Kubernetes (k8s) 核心运行原理的流程图及文字说明
flowchart TD
%% 用户提交资源流程
A[用户] -->|提交 Manifest| B[kubectl]
B -->|发送请求| C[API Server]
C -->|写入状态| D[etcd]
D -->|持久化存储| C
%% 控制平面响应变更
subgraph ControlPlane
C -->|通知变更| E[Controller Manager]
C -->|通知变更| F[Scheduler]
E -->|监控状态| C
F -->|查询未调度 Pod| C
end
%% Pod 调度与绑定
F -->|绑定 Pod 到 Node| C
C -->|更新 Pod 绑定| D
%% 工作节点执行流程
subgraph WorkerNode
G[kubelet] -->|监听 Pod 分配| C
G -->|创建 Pod| H[Container Runtime]
H -->|启动容器| I[Pod Containers]
G -->|上报状态| C
J[kube-proxy] -->|监听 Service/Endpoint| C
J -->|配置网络规则| K[Node Network]
end
%% 添加步骤序号作为独立节点
N1["步骤 1-4: 资源提交与存储"] -.- A
N2["步骤 5-8: 控制平面响应"] -.- ControlPlane
N3["步骤 9-10: Pod 调度"] -.- F
N4["步骤 11-16: 节点执行"] -.- WorkerNode
classDef step fill:#f9f,color:black,stroke-dasharray:5 5;
class N1,N2,N3,N4 step;
核心步骤说明:
-
用户提交配置
用户通过kubectl提交 YAML/JSON 格式的资源配置清单(Deployment、Service 等)。 -
API Server 接收请求
kube-apiserver验证请求合法性,将资源状态写入etcd。 -
状态持久化
etcd作为分布式键值存储,持久化保存集群所有状态数据。 -
控制器响应变更
Controller Manager中的控制器(如 Deployment Controller)通过 Informer 机制 监听资源变更:- 比较当前状态与期望状态(例如:副本数不足时创建新 Pod)。
- 生成新的 Pod 配置并提交给 API Server。
-
调度器工作
Scheduler监听未绑定的 Pod:- 过滤(Filter):排除不满足条件的 Node(如资源不足)。
- 打分(Score):对符合的 Node 优先级排序。
- 绑定(Bind):将 Pod 绑定到最优 Node(写入 etcd)。
-
Node 节点执行
kubelet监听分配到本节点的 Pod:- 调用
Container Runtime(如 containerd)拉取镜像、启动容器。 - 通过
CNI插件配置容器网络。
- 调用
-
服务发现与负载均衡
kube-proxy监听 Service 和 Endpoint 变化:- 更新节点上的
iptables/IPVS规则,实现服务负载均衡。
- 更新节点上的
-
状态反馈
kubelet持续收集 Pod/容器状态上报给 API Server,最终写入etcd。
关键设计思想:
- 声明式 API:用户声明“期望状态”,系统自动收敛到该状态。
- 控制循环:控制器不断检查实际状态与期望状态的差异并修复。
- 组件松耦合:通过 API Server 的 REST API 交互,组件可独立升级。
- 事件驱动:基于 etcd 的 Watch 机制实现高效状态同步。
进阶流程示例(Deployment 扩缩容):
flowchart LR
U[用户] -->|kubectl scale deploy/web --replicas=3| APIServer
APIServer -->|写入 etcd| etcd
DeploymentController -->|监听副本数变化| APIServer
DeploymentController -->|创建 ReplicaSet| APIServer
ReplicaSetController -->|监听并创建 3 个 Pod| APIServer
Scheduler -->|绑定 Pod 到 Node| APIServer
kubelet -->|启动容器| ContainerRuntime