Kubernetes 是一个复杂的分布式系统,其核心设计理念是 声明式管理 和 自动化控制。以下是 Kubernetes 的工作机制详解,从用户提交应用到容器运行的全流程:
1. 核心架构:控制平面(Control Plane)与工作节点(Worker Nodes)
Kubernetes 集群由两类角色组成:
• 控制平面 :负责全局决策和协调(如调度、扩缩容)。
• 工作节点:运行用户应用的实际容器。

2. 控制平面(Control Plane)的组件
(1) API Server(kube-apiserver)
• 作用 :集群的"前门",所有操作(包括 kubectl
命令)通过 REST API 与其交互。
• 关键行为 :
• 验证请求的合法性(认证、鉴权)。
• 将资源状态写入 etcd 数据库。
• 通知其他组件(如调度器、控制器)处理请求。
(2) etcd
• 作用 :分布式键值数据库,存储集群所有资源的状态(如 Pod、Service 配置)。
• 重要性:是集群的"唯一真实数据源"(Single Source of Truth)。
(3) 调度器(kube-scheduler)
• 作用 :为新创建的 Pod 选择合适的工作节点。
• 调度逻辑:
- 过滤不满足条件的节点(如资源不足、标签不匹配)。
- 对剩余节点打分(如资源利用率、亲和性策略)。
- 选择得分最高的节点绑定 Pod。
(4) 控制器管理器(kube-controller-manager)
• 作用 :运行一系列 控制器(Controllers) ,持续监控资源状态,确保其与期望状态一致。
• 常见控制器 :
• Deployment Controller :确保 Pod 副本数与 replicas
定义一致。
• Node Controller :监控节点状态,处理节点故障。
• Service Controller:管理负载均衡器和 DNS 记录。
(5) Cloud Controller Manager(可选)
• 作用:与云厂商(如 AWS、Azure)交互,管理云资源(如负载均衡器、磁盘卷)。
3. 工作节点(Worker Node)的组件
(1) kubelet
• 作用 :节点上的"代理",负责管理本节点的 Pod 和容器。
• 关键行为 :
• 从 API Server 接收 Pod 定义。
• 调用容器运行时(如 Docker、containerd)启动/停止容器。
• 定期向 API Server 报告 Pod 状态。
(2) kube-proxy
• 作用 :维护节点网络规则,实现 Service 的负载均衡和流量转发。
• 实现方式:基于 iptables 或 IPVS。
(3) 容器运行时(Container Runtime)
• 常见实现 :Docker、containerd、CRI-O。
• 作用:真正运行容器的底层引擎,负责镜像下载、容器启停等。
4. Kubernetes 的工作流程(以部署一个 Pod 为例)
步骤 1:用户提交资源定义
用户通过 kubectl apply -f pod.yaml
提交一个 Pod 的 YAML 定义:
yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.23
步骤 2:API Server 处理请求
• API Server 验证请求合法性,将 Pod 定义写入 etcd。
• 返回响应给用户(如 "pod/nginx created")。
步骤 3:调度器分配节点
• 调度器发现 etcd 中有一个未调度的 Pod(spec.nodeName
为空)。
• 根据资源需求、亲和性规则等选择合适节点。
• 更新 Pod 的 spec.nodeName
字段并写入 etcd。
步骤 4:kubelet 创建容器
• 目标节点上的 kubelet 通过 Watch 机制发现分配给自己的 Pod。
• 调用容器运行时下载镜像并启动容器。
• 更新 Pod 状态为 Running
并写入 etcd。
步骤 5:持续状态同步
• 控制器(如 Deployment Controller)持续检查 Pod 状态。
• 如果 Pod 崩溃,控制器会重新创建新的 Pod。
5. 核心工作原理:控制循环(Control Loop)
Kubernetes 的核心逻辑基于 "观察-比较-执行"(Observe-Diff-Act) 循环:
- Observe:从 etcd 读取当前资源状态。
- Diff:比较当前状态与用户声明的期望状态。
- Act:执行操作使当前状态逼近期望状态(如扩缩副本、重启容器)。

6. 网络与存储的实现机制
(1) 网络模型
• Pod 网络 :每个 Pod 拥有唯一 IP,跨节点可直接通信(需 CNI 插件如 Calico、Flannel)。
• Service 网络:通过虚拟 IP(ClusterIP)和 iptables/IPVS 规则实现负载均衡。
(2) 存储管理
• PV/PVC :管理员创建持久卷(PV),用户通过 PVC 申请存储。
• 动态卷供应:StorageClass 允许按需自动创建云存储卷(如 AWS EBS)。
7. 自我修复(Self-Healing)场景示例
-
节点宕机 :
• Node Controller 检测到节点状态为
NotReady
。• 标记该节点上所有 Pod 为
Terminating
。• 调度器在其他节点重新创建这些 Pod。
-
容器崩溃 :
• kubelet 检测到容器退出,自动重启容器。
• 若重启次数超过阈值,标记 Pod 为
Failed
,由控制器重新创建 Pod。
8. 扩展机制:CRD 与 Operator
• Custom Resource Definition (CRD) :允许用户定义新的资源类型(如 MySQLCluster
)。
• Operator:通过自定义控制器管理 CRD,实现复杂应用的自动化运维(如数据库备份、升级)。
总结
• 核心思想 :通过声明式 API 描述应用状态,由控制平面持续驱动集群达到期望状态。
• 组件协同 :
• API Server 作为中枢,连接所有组件。
• etcd 存储全局状态。
• 控制器和调度器实现自动化决策。
• 关键能力:调度、自愈、服务发现、滚动更新、扩缩容。