【Kubernetes】Coredns pods的ContainerCreating问题排查过程

在本地K8s集群中遇到Coredns Pod处于ContainerCreating状态,排查后发现由于k8s-master节点有污点导致无法调度。通过减少Coredns副本数到1并调整,成功解决此问题,所有Pod状态恢复正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本地测试环境搭建了一套简单的K8s集群,1个Master节点、1个Node节点。

查询pods的状态时,发现coredns的两个pods实例一直处于容器创建(ContainerCreating)状态,而flannel容器实例运行正常。如下图所示:

继续查看coredns其中一个pod实例的详细信息,发现容器状态为挂起(Pending),从Events并没有发现什么明显的报错。

        在征求群友的建议后,删除这两个处于ContainerCreating状态的coredns pod实例,删除命令如下:

$ kubectl delete pods coredns-66bff467f8-6pnv2 -n kube-system

$ kubectl delete pods coredns-66bff467f8-g9k68 -n kube-system

        删除后,pod实例会根据副本(rep

<think>好的,我现在需要帮助用户解决Kubernetes中的FailedMount和NetworkNotReady警告问题。首先,我得理解用户提供的错误信息。用户提到了两个主要问题:FailedMount错误,具体是MountVolume.Setup失败,涉及kube-system/coredns的config-volume;另一个是NetworkNotReady,指出docker的CNI配置未初始化,还有readiness probe失败。 首先,我应该分开处理这两个问题。FailedMount可能与Volume的配置有关,而NetworkNotReady则涉及网络插件的问题。不过这两个问题可能相互关联,比如网络问题可能导致某些组件无法正常启动,进而影响Volume的挂载。 关于FailedMount,用户提到的是config-volume挂载失败,对象kube-system/coredns未注册。可能的原因包括ConfigMap不存在或者命名空间问题。我需要检查coredns相关的ConfigMap是否存在,确认其名称是否正确,以及是否在正确的命名空间kube-system中。如果ConfigMap不存在,可能需要重新创建或检查部署配置。另外,kubelet可能无法访问API服务器,导致无法获取ConfigMap,这时候需要检查kubelet的日志,看看是否有连接问题或者证书错误。 接下来是NetworkNotReady,错误信息提到docker的CNI配置未初始化。这说明网络插件(比如Calico、Flannel)没有正确安装或配置。用户需要确认是否安装了CNI插件,并且相关的Pod(如kube-flannel-ds)是否处于Running状态。如果网络插件未运行,kubelet就会报告NetworkNotReady。另外,检查CNI配置文件是否存在,通常位于/etc/cni/net.d/,如果缺失或配置错误,需要重新配置。 还有readiness probe失败,这可能是因为CoreDNS无法启动,而无法启动的原因可能是网络问题,比如CNI未配置导致CoreDNS无法通信。所以解决网络问题可能同时解决readiness probe失败的问题。 此外,用户提供的引用中有提到ImagePullBackOff的问题,这可能与镜像拉取有关,但用户当前的问题可能不直接相关,不过如果CoreDNS的镜像拉取失败,也可能导致问题,需要检查CoreDNS的Pod状态,看是否有镜像拉取错误。还有引用中提到Kubernetes自动添加的toleration,这可能影响Pod的调度,但当前问题可能更多是配置错误导致。 总结步骤应该是先解决网络问题,再处理Volume挂载问题。因为如果网络不通,CoreDNS可能无法正常运行,进而影响整个集群的状态。检查CNI插件的安装和配置,确保网络插件Pod正常运行。然后检查ConfigMap是否存在,并确保kubelet能够正确访问API服务器,挂载所需的Volume。 可能还需要查看kubelet的日志,使用journalctl -u kubelet来查看相关错误,确认是否有证书问题或权限问题。同时,检查CoreDNS的Pod日志,kubectl logs -n kube-system coredns-pod-name,看是否有具体的错误信息,比如连接超时或无法加载配置。 如果用户是在初始化集群时遇到这些问题,可能还需要检查kubeadm的初始化过程是否正确,证书是否生成,以及各个组件(如kube-apiserver、kube-controller-manager)是否正常运行。此外,节点是否处于Ready状态,使用kubectl get nodes查看,如果节点未就绪,可能需要进一步排查kubelet和容器运行时的状态。 最后,用户可能需要重新应用CNI插件的配置文件,或者重启kubelet服务,以重新初始化配置。如果之前有修改过集群配置,可能需要回滚或修正相关配置,比如bootstrap.kubeconfig中的证书路径是否正确,引用的证书是否存在等。</think>### 解决Kubernetes中FailedMount和NetworkNotReady警告问题的分步指南 #### 1. **FailedMount: MountVolume.Setup失败** 此错误表明Kubernetes无法挂载`config-volume`到CoreDNS的Pod,通常由以下原因导致: **步骤1: 确认ConfigMap存在** ```bash kubectl get configmap coredns -n kube-system ``` - 若不存在,需重新创建或修复CoreDNS配置[^2]。 - 若存在,检查其内容是否正确: ```bash kubectl describe configmap coredns -n kube-system ``` **步骤2: 检查kubelet与API服务器通信** - 查看kubelet日志: ```bash journalctl -u kubelet | grep "MountVolume.Setup" ``` - 若显示证书错误,需检查`bootstrap.kubeconfig`中引用的CA证书路径(如`/opt/kubernetes/ssl/ca.pem`)是否正确。 **步骤3: 检查CoreDNS Pod状态** ```bash kubectl describe pod -n kube-system -l k8s-app=kube-dns ``` - 若Pod因Volume挂载失败处于`ContainerCreating`状态,需修复ConfigMap或kubelet配置。 --- #### 2. **NetworkNotReady: CNI配置未初始化** 此错误表明网络插件未正确安装或运行,导致节点网络未就绪。 **步骤1: 安装CNI网络插件** - 以Calico为例: ```bash kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml ``` - 或Flannel: ```bash kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ``` **步骤2: 检查CNI插件Pod状态** ```bash kubectl get pods -n kube-system | grep -E 'flannel|calico' ``` - 若Pod未运行(如`ImagePullBackOff`),需检查镜像拉取问题[^4]: - 更换镜像源(如使用阿里云镜像)。 - 确认节点网络连通性。 **步骤3: 验证CNI配置文件** - 登录节点检查`/etc/cni/net.d/`目录: ```bash ls /etc/cni/net.d/ ``` - 若无配置文件,需重新初始化CNI插件。 --- #### 3. **Readiness Probe失败** CoreDNS的Readiness Probe失败通常由网络问题或配置错误导致: ```bash kubectl logs -n kube-system <coredns-pod-name> | grep "readiness probe" ``` - 若日志显示无法绑定端口或解析请求,需修复网络配置或CoreDNS的`Corefile`[^3]。 --- #### 4. **综合检查** - **节点状态**: ```bash kubectl get nodes ``` - 若节点状态为`NotReady`,重启kubelet并检查系统服务: ```bash systemctl restart kubelet && journalctl -u kubelet ``` - **系统资源**: - 检查磁盘空间(`df -h`)和内存(`free -h`),避免资源不足导致挂载失败。 --- ### 关键引用说明 - **NetworkReady=false**:需确保CNI插件已正确初始化[^1]。 - **证书路径配置**:`bootstrap.kubeconfig`中CA证书路径必须与实际路径一致。 - **自动添加的Toleration**:Kubernetes会为Pod添加`not-ready`和`unreachable`容忍,但需优先解决根本问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cnskylee

技术分享我是认真的,期待您打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值