Warning FailedScheduling 30s default-scheduler 0/1 nodes are available: 1 node(s) had untolerat

文章讲述了在创建Pod后遇到Pending状态的问题,原因在于kubeadm部署时未正确设置节点taint。通过添加`node-role.kubernetes.io/control-plane`taint并移除该taint,Pod状态得以恢复正常。

创建pod后,一直处于 Pending状态

default            nginx-748c667d99-stwfb                     0/1     Pending   0          8s

使用kubectl describe pod  nginx-748c667d99-stwfb 查看有如下信息:

Warning  FailedScheduling  30s   default-scheduler  0/1 nodes are available: 1 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }. preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling..

定位发现是使用kubeadm部署时缺少一步:

kubectl taint nodes --all node-role.kubernetes.io/control-plane-

 执行完输出:

node/k8s-master1 untainted

接着执行 kubectl get pod  nginx-748c667d99-stwfb 命令后,

NAME                     READY   STATUS              RESTARTS   AGE
nginx-748c667d99-stwfb   0/1     ContainerCreating   0          82s
运行正常了

### Pod 调度失败的常见原因分析 在 Kubernetes 中,Pod 调度失败通常由多个因素引起,常见的包括节点资源不足、污点(Taint)配置不当以及节点亲和性冲突等。以下将结合具体示例分析这些问题。 #### 1. **节点资源不足导致调度失败** 当 Pod 请求的资源(如 CPU 或内存)超过集群中任何节点的可用资源时,调度器将无法找到合适的节点来运行该 Pod。例如,若 Pod 请求了 10Gi 内存,但集群中所有节点的可用内存均小于该值,调度器会报告 `Insufficient memory` 错误: ``` Warning FailedScheduling 35s default-scheduler 0/3 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 2 Insufficient memory. ``` 这种情况可以通过优化 Pod 的资源配置或增加集群节点来解决。 #### 2. **节点污点(Taint)配置不当** Kubernetes 使用污点机制来控制哪些 Pod 可以调度到特定节点上。例如,控制平面节点(如 `k8s-master`)通常会带有 `node-role.kubernetes.io/master:NoSchedule` 污点,以防止普通 Pod 被调度到这些节点上: ``` Warning FailedScheduling 8s default-scheduler 0/3 nodes are available: 1 node(s) had taint {node.kubernetes.io/not-ready: }, that the pod didn’t tolerate, 1 node(s) had volume node affinity conflict. ``` 如果 Pod 没有配置相应的容忍度(Toleration),调度器将无法将其调度到这些节点上。可以通过以下方式为 Pod 添加容忍度: ```yaml spec: tolerations: - key: "node-role.kubernetes.io/master" operator: "Exists" effect: "NoSchedule" ``` 此外,也可以手动移除节点的污点: ```bash kubectl taint nodes k8s-master node-role.kubernetes.io/control-plane:NoSchedule- ``` #### 3. **节点亲和性冲突** 节点亲和性(Node Affinity)用于控制 Pod 应该调度到哪些节点上。如果 Pod 配置了严格的节点亲和性规则,而集群中没有满足该规则的节点,则调度失败。例如: ``` Warning FailedScheduling 8s default-scheduler 0/3 nodes are available: 1 node(s) had taint {node.kubernetes.io/not-ready: }, that the pod didn’t tolerate, 1 node(s) had volume node affinity conflict. ``` 解决方法包括调整节点亲和性规则,或者确保集群中有满足该规则的节点。 #### 4. **节点不可用或未就绪** 如果节点处于不可用状态(如网络故障、kubelet 未运行等),调度器将无法将 Pod 调度到该节点。例如: ``` Warning FailedScheduling 8s default-scheduler 0/3 nodes are available: 1 node(s) had taint {node.kubernetes.io/not-ready: }, that the pod didn’t tolerate, 1 node(s) had volume node affinity conflict. ``` 可以通过检查节点状态来确认问题: ```bash kubectl describe node <node-name> ``` 确保节点处于 `Ready` 状态,并修复可能导致节点不可用的问题。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值