0/1 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn‘t

问题描述:在单机版k8s上部署应用后,发现Pod的状态一直处于pending状态,

于是 kubectl describe pods 查看了下发现:

Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  10m   default-scheduler  0/1 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate.

意思是   1个节点有pod不能容忍的污点{node-role.kubernetes.io/master:}。

原因当创建单机版的 k8s 时,这个时候 master 节点是默认不允许调度 pod 。

解决:执行命令:

        

kubectl taint nodes --all node-role.kubernetes.io/master-

将 master 标记为可调度即可


补充知识:

Taint(污点)和 Toleration(容忍)可以作用于 node 和 pod 上,其目的是优化 pod 在集群间的调度,这跟节点亲和性类似,只不过它们作用的方式相反,具有 taint 的 node 和 pod 是互斥关系,而具有节点亲和性关系的 node 和 pod 是相吸的。另外还有可以给 node 节点设置 label,通过给 pod 设置 nodeSelector 将 pod 调度到具有匹配标签的节点上。

Taint 和 toleration 相互配合,可以用来避免 pod 被分配到不合适的节点上。每个节点上都可以应用一个或多个 taint ,这表示对于那些不能容忍这些 taint 的 pod,是不会被该节点接受的。如果将 toleration 应用于 pod 上,则表示这些 pod 可以(但不要求)被调度到具有相应 taint 的节点上。

设置污点

NoSchedule: 一定不能被调度
PreferNoSchedule: 尽量不要调度
NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod

kubectl taint nodes node1 key1=value1:NoSchedule
kubectl taint nodes node1 key1=value1:NoExecute
kubectl taint nodes node1 key2=value2:NoSchedule

查看污点

kubectl describe node node1

删除污点

kubectl taint node node1 key1:NoSchedule-  # 这里的key可以不用指定value
kubectl taint node node1 key1:NoExecute-
kubectl taint node node1 key1-             # 删除指定key所有的effect
kubectl taint node node1 key2:NoSchedule-

官方教程

  • 12
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个错误提示是因为 Kubernetes 集群中的节点出现污点 (Taint)。污点是指节点上的一些标记,用于表明节点的一些特属性或状态,例如节点上硬盘容量不足。当一个 Pod 需要调度到某个节点上时,Kubernetes 会根据 Pod 的需求和节点的状态来判断是否可以将其调度到该节点上。如果节点上的污点与 Pod 的需求不匹配,那么该节点就会被排除在调度的范围之外,从而导致 Pod 调度失败。 根据这个错误提示,您的 Kubernetes 集群中有两个节点出现了污点:一个是控制平面节点上的 node-role.kubernetes.io/control-plane 污点,另一个是某个节点上的 node.kubernetes.io/disk-pressure 污点。其中,node-role.kubernetes.io/control-plane 污点用于标记控制平面节点,通常不应该将其他类型的 Pod 调度在控制平面节点上。而 node.kubernetes.io/disk-pressure 污点则表示该节点上的硬盘容量不足。 为了解决这个问题,您可以采取以下几个步骤: 1. 查看节点状态:使用 kubectl get nodes 命令查看节点的状态,确认哪些节点上出现了污点。 2. 解除污点:使用 kubectl taint nodes 命令解除节点上的污点,例如:kubectl taint nodes node1 node-role.kubernetes.io/control-plane=:NoSchedule 可以解除节点 node1 上的控制平面污点,从而允许其他类型的 Pod 调度到该节点上。 3. 节点维护:如果污点是由于节点上的硬盘容量不足导致的,那么您可以考虑对该节点进行维护,扩容硬盘容量或清理无用数据。在进行节点维护之前,需要使用 kubectl drain 命令将该节点上的 Pod 调度到其他节点上,避免数据丢失或服务中断。 希望这些信息能够帮助您解决问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值