Kubernetes中通过kompose转换的Nginx Pod持续处于Pending状态求助
根因分析
从你提供的Pod事件日志可直接定位问题:调度器无可用节点分配Pod,触发Pending状态,具体原因有两个:
- 集群1个Master节点携带
node-role.kubernetes.io/master污点,默认普通Pod未配置对应容忍规则,无法调度到Master节点 - 剩余2个工作节点携带
node.kubernetes.io/unreachable污点,说明集群已和这两个节点断连,节点处于不可用状态,无法承载Pod运行
你能正常ping通公网域名仅说明节点有公网连通性,和集群内部节点调度、节点状态异常没有关联。
排查解决步骤
优先修复工作节点不可达问题
- 执行
kubectl get nodes确认节点状态,若2个工作节点显示为NotReady,登录对应节点排查: - 检查kubelet运行状态:
systemctl status kubelet,若服务异常执行systemctl restart kubelet重启 - 检查节点与Master节点的网络连通性,确认kube-apiserver的6443端口未被拦截
- 关闭节点上的防火墙、SELinux等可能拦截集群内部通信的规则,确认节点状态恢复为
Ready后Pod会自动调度
- 执行
若为单节点测试集群(无可用工作节点),可允许Pod调度到Master节点,二选一执行即可:
方案1:给当前Nginx Deployment添加污点容忍配置,修改Deployment的spec.template.spec字段,新增如下配置:spec: containers: - image: nginx name: something-cool ports: - containerPort: 80 resources: {} # 新增以下内容 tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule restartPolicy: Always修改后重新执行
kubectl apply -k .生效。方案2:直接移除Master节点的默认调度污点(仅适合测试环境,生产环境不推荐),执行命令:
kubectl taint nodes --all node-role.kubernetes.io/master-验证结果
配置生效后等待60秒左右,执行kubectl get pods查看Pod状态,若变为Running即为修复完成,也可通过kubectl describe pod <Pod名称>查看调度日志确认结果。
内容的提问来源于stack exchange,提问作者Saeed
相关产品推荐
相关产品推荐

