Kubernetes的设计哲学
Kubernetes(K8s)是Google基于Borg系统的设计经验开源的容器编排系统。其核心设计哲学是:声明式API(用户声明期望状态,系统自动调和)+控制循环(持续检测偏差并自动修正)+可扩展性(CRD/Webhook扩展API和调度逻辑)。这三个原则构成了K8s强大而灵活的架构基础。
etcd:一致性的基石
etcd是K8s集群的唯一状态存储——所有资源对象(Pod/Deployment/Service等)都以键值对形式存储在其中。etcd基于Raft共识算法保证强一致性和高可用:Leader接受所有读写请求、Follower同步数据、Leader失联时自动选举新Leader。etcd的watch机制是K8s控制循环的基础——各组件通过watch etcd中的数据变化触发调和循环。生产实践:etcd存储应使用高性能SSD,快照备份是灾难恢复的关键。
API Server与认证鉴权
API Server是K8s控制面的唯一入口——所有组件(kubelet/scheduler/controller-manager)和用户(kubectl)都通过它交互。RESTful资源型API,所有资源都是CRUD操作。认证链(Authentication):X.509客户端证书/ServiceAccount Token/OIDC/Webhook。授权链(Authorization):RBAC(Role-Based Access Control是生产推荐方式)/ABAC/Webhook。准入控制(Admission):Mutating Webhook修改请求/Validating Webhook校验请求——OPA/Gatekeeper实现了策略即代码。
调度器架构
调度器将新创建的Pod绑定到最优节点:过滤阶段(Predicate:资源充足/亲反亲和/端口可分配等硬约束)→打分阶段(Priority:利于拓扑分布均衡/已有镜像的节点优先)。调度框架(Scheduling Framework)将调度过程插件化:每个阶段都可以通过插件扩展。
Controller Manager
Controller Manager运行所有核心控制循环:Deployment Controller维持实际副本数等于期望副本数、ReplicaSet Controller管理Pod生命周期、Node Controller监控节点状态。每个Controller遵循控制循环模式:观察期望状态→观察实际状态→采取行动减小偏差。这个朴素的设计哲学通过大量正交的Controller实现了复杂的编排语义。
kubelet与容器运行时
kubelet是运行在每个节点上的Agent:接收PodSpec→管理Pod生命周期→通过CRI(Container Runtime Interface)与容器运行时交互(containerd/CRI-O)、通过CNI(Container Network Interface)配置网络、通过CSI(Container Storage Interface)管理存储。CRI标准化了容器运行时接口使其可插拔替代。

发表评论 取消回复