docker & containerd 3
下面给你一份**“Kubernetes 节点从加入到 Pod Running + 故障分析完整生产级文档”**(可以直接当排障手册用)。
📘 Kubernetes 节点完整生命周期 & 排障手册
🧭 一、节点加入流程(kubeadm join)
kubeadm join↓
kubelet 启动↓
bootstrap kubeconfig↓
连接 apiserver (6443)↓
Node Registration↓
Node = Unknown↓
kubelet 心跳上报↓
Node Controller 判定↓
Node = Ready
🧠 二、Node Ready 判定机制
✔ Node Condition
| Condition | 含义 |
|---|---|
| Ready | kubelet 正常 |
| MemoryPressure | 内存压力 |
| DiskPressure | 磁盘压力 |
| PIDPressure | 进程数压力 |
| NetworkUnavailable | 网络不可用 |
✔ Ready 判定逻辑
kubelet 心跳正常
AND
CNI 正常
AND
无资源压力
= Ready
🚀 三、Pod 生命周期流程
Pod Created↓
Scheduler 选择 Node↓
kubelet watch Pod↓
container runtime 创建容器↓
CNI 分配 IP↓
kubelet 更新状态↓
Pod Running
📊 四、Pod 状态全集(生产标准)
| 状态 | 含义 | 常见原因 |
|---|---|---|
| Pending | 未调度 | scheduler / node notReady |
| ContainerCreating | 创建中 | CNI / runtime / volume |
| Running | 正常 | - |
| Succeeded | 成功结束 | Job |
| Failed | 失败退出 | 应用 crash |
| CrashLoopBackOff | 重启失败 | 程序问题 |
| ImagePullBackOff | 拉镜像失败 | registry / DNS |
| ErrImagePull | 拉镜像错误 | tag / 网络 |
| Unknown | Node异常 | kubelet down |
🐳 五、runtime 状态对照
containerd
| 状态 | 含义 |
|---|---|
| SANDBOX_CREATING | Pod网络创建中 |
| RUNNING | 容器运行 |
| EXITED | 退出 |
| IMAGE_PULL_ERROR | 镜像失败 |
Docker(旧)
| 状态 | 含义 |
|---|---|
| Created | 创建 |
| Running | 运行 |
| Restarting | 重启 |
| Exited | 退出 |
🌐 六、CNI(flannel)流程
Pod 创建↓
flannel 分配 Pod IP↓
VXLAN 建立隧道↓
跨节点通信
⚠️ 七、Pod 卡住的核心原因分类
1️⃣ Scheduler 问题
-
Node NotReady
-
资源不足
2️⃣ kubelet 问题
-
10250 端口异常
-
心跳延迟
-
runtime阻塞
3️⃣ runtime 问题(最常见)
-
containerd hang
-
image pull 卡死
-
sandbox 创建失败
4️⃣ CNI 问题
-
flannel crash
-
VXLAN 不通
-
IP 分配失败
5️⃣ 网络冲突
-
service CIDR 冲突
-
docker bridge 冲突
-
route 表污染
🔥 八、完整排障流程(生产标准)
Step 1:节点状态
kubectl get nodes -o wide
Step 2:Pod 状态
kubectl get pod -A -o wide
Step 3:Pod 事件
kubectl describe pod <pod>
Step 4:kubelet
journalctl -u kubelet -f
Step 5:runtime
crictl ps -a
crictl logs <id>
Step 6:CNI
kubectl logs -n kube-system -l app=flannel
Step 7:网络
ip route
iptables-save
🧨 九、你当前环境的“异常信号总结”
你这个环境已经出现:
-
kubelet join 冲突
-
10250 占用
-
flannel 多节点运行久(300+ days)
-
container runtime 不稳定迹象
👉 属于:
⚠️ “长期运行 + 网络 overlay + 节点污染型集群”
🚨 十、什么时候需要重建节点(很关键)
✔ 建议直接重建:
-
kubelet反复异常
-
containerd hang
-
flannel不稳定
-
iptables混乱
-
join失败多次
❌ 不建议重建:
-
单个 Pod 异常
-
镜像问题
-
配置问题
🧠 一句话总结
Kubernetes 的本质不是“Pod运行”,而是:
kubelet + runtime + CNI + network + scheduler 的协同状态机
🚀 如果你下一步需要
我可以帮你补一份更狠的:
👉 “生产级 K8s 节点重建标准流程(无污染版本 / flannel专用)”
可以直接用来一键修复你这种环境。
