2021-06-26 calico-node-xxx pod 状态反复CrashLoopBackOff

本文记录了在k8s集群中遇到的calico-node Pod状态反复出现CrashLoopBackOff的问题。通过检查pod event、logs及节点端口占用,发现127.0.0.1:9099端口冲突。尝试kill相关进程,但效果不明显。进一步检查kubelet和containerd状态后,最终通过删除并重建calico-node容器解决了问题,恢复正常运行。
[root@k8s-master ~]# kubectl get pods -n kube-system -owide
NAME                                       READY   STATUS             RESTARTS   AGE    IP               NODE         NOMINATED NODE   READINESS GATES
calico-kube-controllers-7f4f5bf95d-pvvt9   1/1     Running            26         16d    10.244.169.129   k8s-node2    <none>           <none>
calico-node-6qcv4                          1/1     Running            1          16d    192.168.32.171   k8s-master   <none>           <none>
calico-node-dncv8                          1/1     Running            1          16d    192.168.32.173   k8s-node2    <none>           <none>
calico-node-sgkn2                          0/1     CrashLoopBackOff   80         16d    192.168.32.172   k8s-node1    <none>           <none>
coredns-7f89b7bc75-2cf7q                   1/1     Running            0          16d    10.244.36.74     k8s-node1    <none>           <none>
coredns-7f89b7bc75-494l7                   1/1     Running            1          16d    10.244.169.130   k8s-node2    <none>           <none>
etcd-k8s-master                            1/1     Running            1          16d    192.168.32.171   k8s-master   <none>           <none>
kube-apiserver-k8s-master                  1/1     Running            2          16d    192.168.32.171   k8s-master   <none>           <none>
kube-controller-manager-k8s-master         1/1     Running            0          133m   192.168.32.171   k8s-ma
<think>我们正在分析 `kubectl get pod -o wide -n kube-system` 命令的输出,特别是在删除并重新部署 Calico 之后。这个命令会列出 `kube-system` 命名空间中所有 Pod 的详细信息,包括状态、重启次数、所在节点等。以下是我们需要关注的几个关键点: 1. **Calico 相关 Pod状态**:在重新部署后,CalicoPod(如 `calico-node-xxx`、`calico-kube-controllers-xxx`)应该处于 `Running` 状态,且重启次数(RESTARTS 列)应该较低(理想情况下为0)。如果重启次数较高,可能表示配置有问题或资源不足。 2. **CoreDNS 的状态**:CoreDNS 是 Kubernetes 集群的 DNS 服务,它依赖于网络插件。在删除 Calico 后,CoreDNS 可能会因为网络中断而处于 `Error` 或 `CrashLoopBackOff` 状态。重新部署 Calico 后,CoreDNS 应该恢复到 `Running` 状态。 3. **其他系统组件**:包括 `kube-apiserver`、`kube-controller-manager`、`kube-scheduler`、`kube-proxy` 等。这些组件在 Calico 删除期间可能不受影响,但最好确认它们都处于 `Running` 状态。 4. **节点分配(NODE 列)**:确认 Pod 被调度到了预期的节点上。特别是 Calico 的 DaemonSet 应该在每个节点上都有一个 Pod。 5. **IP 地址(IP 列)**:每个 Pod 都应该分配到了 IP 地址。如果 Calico 正常工作,所有 Pod 的 IP 地址应该都属于 Calico 的 IP 池。 6. **就绪状态(READY 列)**:显示容器是否通过就绪探针。例如,`1/1` 表示该 Pod 有1个容器且已就绪。 **示例输出分析**: 假设我们有以下输出(简化版): ``` NAME READY STATUS RESTARTS AGE IP NODE calico-node-abc12 1/1 Running 0 5m 192.168.44.25 k8s-master calico-node-def34 1/1 Running 0 5m 192.168.44.26 k8s-node1 calico-node-ghi56 1/1 Running 0 5m 192.168.44.27 k8s-node2 calico-kube-controllers-789xyz 1/1 Running 0 5m 10.244.0.1 k8s-master coredns-7f6cbbb7b8-9qj2k 1/1 Running 0 10m 10.244.1.2 k8s-node1 coredns-7f6cbbb7b8-fxz7p 1/1 Running 0 10m 10.244.2.2 k8s-node2 kube-apiserver-k8s-master 1/1 Running 0 1h 192.168.44.25 k8s-master kube-controller-manager-k8s-master 1/1 Running 0 1h 192.168.44.25 k8s-master kube-scheduler-k8s-master 1/1 Running 0 1h 192.168.44.25 k8s-master kube-proxy-8m2xv 1/1 Running 0 1h 192.168.44.25 k8s-master kube-proxy-jk9s8 1/1 Running 0 1h 192.168.44.26 k8s-node1 kube-proxy-lmn0p 1/1 Running 0 1h 192.168.44.27 k8s-node2 ``` **分析**: - Calico 组件:所有 `calico-node` 和 `calico-kube-controllers` 都处于 `Running` 状态,重启次数为0,且每个节点上都有一个 `calico-node` Pod。这表示 Calico 已经成功部署。 - CoreDNS:两个 Pod 都处于 `Running` 状态,重启次数为0,说明 DNS 服务正常。 - 其他系统组件:所有组件状态正常。 - IP 地址:Calico 相关的 Pod 和管理节点上的 Pod 使用了不同的 IP 段(如 `192.168.44.x` 和 `10.244.x.x`),这是正常的,因为 Calico 节点 Pod 使用主机网络,而其他 Pod 使用 Pod 网络。 **如果发现问题**: - **Calico Pod 未运行**:检查重新部署的步骤是否正确,以及节点上是否有残留文件未清理干净(参考之前的删除步骤)。 - **CoreDNS 异常**:如果 CoreDNS 处于 `CrashLoopBackOff` 或 `Error` 状态,可能是网络问题导致其无法启动。可尝试删除 CoreDNS Pod 让其重建:`kubectl delete pod -n kube-system -l k8s-app=kube-dns`。 - **Pod 没有 IP 地址**:检查 Calico 的 IP 池配置和节点网络连通性。 **验证网络连通性**: 创建一个测试 Pod 来检测集群内外网络的连通性: ```bash kubectl run test-pod --image=busybox --rm -it --restart=Never -- ping 8.8.8.8 ``` 如果无法连通,需进一步检查 Calico 的日志:`kubectl logs -n calico-system <calico-node-pod-name>`。 **总结**:在删除并重新部署 Calico 后,通过 `kubectl get pod -o wide -n kube-system` 命令可以快速验证关键系统组件的状态。重点关注 Calico 组件和 CoreDNS 的状态,确保它们都正常运行,且 Pod 分配到正确的 IP 地址。 §§ 相关问题 §§ 1. 如何查看 Calico 的日志以诊断网络问题? 2. CoreDNS 持续重启的可能原因有哪些? 3. 如何修改 Calico 的 IP 地址池配置? </think>### 分析 `kubectl get pod -o wide -n kube-system` 输出(Calico 重部署场景) 在删除并重建 Calico 后,检查系统组件状态至关重要。以下是关键分析点和典型输出示例: --- #### **关键分析维度** 1. **Calico 核心组件状态** - ✅ **calico-node-\***:DaemonSet 应在每个节点运行(`1/1 READY`),状态为 `Running` - ✅ **calico-kube-controllers-\***:Deployment 应稳定运行(`RESTARTS=0`) - ❌ 异常状态:`CrashLoopBackOff`/`Error` 表示配置错误或资源冲突[^2] 2. **CoreDNS 状态** - ✅ 应有 2 个副本(如 `coredns-5d78c9869d-xxxxx`) - ❌ `ContainerCreating` 超时:CNI 插件未正常工作 - ❌ `Pending`:节点网络未就绪 3. **kube-proxy 状态** - ✅ 每个节点应有 1 个 `kube-proxy-xxxx` Pod(`Running`状态- ❌ 频繁重启:网络策略冲突或 iptables 错误 4. **控制平面组件** - ✅ **kube-apiserver**:主节点必须 `Running` - ✅ **kube-controller-manager**:无频繁重启 - ✅ **kube-scheduler**:`READY 1/1` 5. **IP 地址分配(IP 列)** -Calico Pod 应有节点 IP(主机网络模式) - ✅ 其他 Pod 应在 Calico IP 池内(如 `10.244.x.x`) - ❌ `<none>`:IPAM 故障 --- #### **典型输出示例(正常状态)** ```bash NAME READY STATUS RESTARTS AGE IP NODE calico-node-8n44g 1/1 Running 0 12m 192.168.44.25 k8s-master calico-node-kj7f2 1/1 Running 0 12m 192.168.44.26 k8s-node1 calico-node-xq9p8 1/1 Running 0 12m 192.168.44.27 k8s-node2 calico-kube-controllers-789xyz 1/1 Running 0 12m 10.244.0.1 k8s-master coredns-7f6cbbb7b8-9qj2k 1/1 Running 0 15m 10.244.1.2 k8s-node1 coredns-7f6cbbb7b8-fxz7p 1/1 Running 0 15m 10.244.2.2 k8s-node2 kube-apiserver-k8s-master 1/1 Running 0 1h 192.168.44.25 k8s-master kube-proxy-8m2xv 1/1 Running 0 1h 192.168.44.25 k8s-master kube-proxy-jk9s8 1/1 Running 0 1h 192.168.44.26 k8s-node1 ``` --- #### **常见问题诊断** | 现象 | 可能原因 | 解决方案 | |-------------------------------|------------------------------|------------------------------| | `calico-node` 卡在 `Init` | 节点残留文件未清理 | 执行 `rm -rf /var/lib/calico/*` [^1] | | CoreDNS `ContainerCreating` | CNI 插件未生效 | 检查 `kubectl get daemonset -n calico-system` | | Pod IP 为 `<none>` | IP 地址池耗尽 | 扩展 Calico IP 池范围 | | 频繁重启 (`RESTARTS > 5`) | 资源竞争或配置冲突 | 检查 `kubectl describe pod <name>` 事件 | > **操作建议**: > 若发现异常,通过标签过滤 Calico Pod 深入检查: > ```bash > kubectl get pods -n kube-system -l k8s-app=calico-node -o wide # 聚焦 Calico 节点[^4] > kubectl logs -n kube-system calico-node-xxxxx # 查看具体日志 > ``` ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值