pod的创建流程
整体流程
1:执行 kubectl create -f nginx-deploy yaml → kubectl 向 kube-apiserver 发起创建请求;
2:kube-apiserver 完成「认证/授权」后,将Deployment 的「期望状态」(比如3个副本)写入etcd,并返回创建成功;
3:kube-controler-manager 中的 Deployment 控制器,通过apiserver 发现新的 Deployment,自动创建对应的 ReplicaSet;
4:eplicaSet 控制器发现「期望3个Pod,实际0个」,通过 apiserver 创建3个Pod 的资源对象,写入etcd:
5:kube-scheduler 监听 apiserver,发现3个[待调度的 Pod」,为每个Pod 筛选并打分,选出最合 适的 Node 节点,将调度结果(Pod 绑定到哪个Node)更新到etcd;
6:对应 Node节点上的 kubelet,通过apiserver 发现「自己被分配了Pod」,调用容器运行时(Docker/containerd)创建 Pod,Pod 启动成功后,kubelet 将 Pod的「实际运行状态」上报给 apiserver,apiserver 更新到 etcd; pn
7: kube-proxy 监控到 Pod 创建后,更新本地的 iptables/ipvs 规则,让 Service 可以转发流量到新Pod;
整体逻辑(三层架构)
请求层(kubeclt发起请求、apiserver接收请求)
执行 kubectl create -f nginx-deploy yaml → kubectl 向 kube-apiserver 发起创建请求;
kube-apiserver 完成「认证/授权」后,将Deployment 的「期望状态」(比如3个副本)写入etcd,并返回创建成功;
kubectl→kube-apiserverapiserver 负责:
- 认证、授权
- 写入期望状态(比如3个副本)到
etcd
记忆口诀:“kubectl喊,apiserver写etcd”
控制器层(实现期望状态)
kube-controler-manager 中的 Deployment 控制器,通过apiserver 发现新的 Deployment,自动创建对应的 ReplicaSet;
ReplicaSet 控制器发现「期望3个Pod,实际0个」,通过 apiserver 创建3个Pod 的资源对象,写入etcd:
Deployment Controller→ 发现新的 Deployment → 创建ReplicaSetReplicaSet Controller→ 检查实际 Pod 数量 vs 期望副本 → 创建 Pod 对象
记忆口诀:“Deployment催,ReplicaSet补”
调度 & 节点执行层
kube-scheduler→ 给 Pod 选 Node → 更新绑定信息kubelet→ 在 Node 上创建 Pod → 上报状态kube-proxy→ 更新本地网络规则
记忆口诀:“Scheduler选,Kubelet建,Proxy通”
自愈流程
如果某个Pod宕机
→ ReplicaSet控制器发现「实际2个Pod+期望 3个」
→自动创建新Pod
→ scheduler 重新调度
→ kubelet 创建 Pod,完成自愈。
自愈逻辑
- Pod 宕机 → ReplicaSet 发现不够 → 重新创建 → Scheduler 调度 → Kubelet 启动
- 本质就是:控制器循环 + 调度 + 节点执行
记忆口诀:“失踪补齐,调度执行”
Pod 创建流程图
kubectl create
│
▼
kube-apiserver (写期望状态etcd)
│
▼
Deployment Controller → ReplicaSet Controller
│
▼
ReplicaSet 创建 Pod 对象 (写etcd)
│
▼
kube-scheduler 选择 Node
│
▼
kubelet 在 Node 上创建 Pod → 状态上报
│
▼
kube-proxy 更新网络- 关键点:Deployment → ReplicaSet → Pod → Scheduler → Kubelet → Proxy
- 自愈:ReplicaSet 检测 Pod 不够 → 重新触发调度 → Kubelet 创建
助记口诀
kubectl喊 → apiserver写 → Deployment催 → ReplicaSet补 → Scheduler选 → Kubelet建 → Proxy通 → Pod活
