《Kubernetes故障篇:had untolerated taint node.kubernetes.io/not-ready》

一、环境信息

操作系统K8S版本containerd版本
Centos7.6v1.24.17v1.6.12

二、背景信息

部署完K8S集群后,使用如下命令测试集群,进入pod中发现无法解析k8s默认域名和无法ping通外网,宿主机主机是可以ping通外网的

root@k8s-master-63:~#  kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh
If you don't see a command prompt, try pressing enter.
/ # nslookup kubernetes.default

通过以下命令检查网络插件coredns的状态,发现coredns报错had untolerated taint {node.kubernetes.io/not-ready

root@k8s-master-63:~# kubectl describe pods -n kube-system coredns-7f74c56694-5p4wn
Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  23m   default-scheduler  0/4 nodes are available: 4 node(s) had untolerated taint {node.kubernetes.io/not-ready: }. preemption: 0/4 nodes are available: 4 Preemption is not helpful for scheduling.
  Normal   Scheduled         20m   default-scheduler  Successfully assigned kube-system/coredns-7f74c56694-q8dz6 to k8s-master-63
  Normal   Pulled            20m   kubelet            Container image "registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.6" already present on machine
  Normal   Created           20m   kubelet            Created container coredns
  Normal   Started           20m   kubelet            Started container coredns

三、解决方法

报错原因:k8s节点不可调度。

# 1、解除调度
kubectl uncordon k8s-master-63
kubectl uncordon k8s-master-64
kubectl uncordon k8s-master-65
kubectl uncordon k8s-worker-66

# 2、删除coredns
kubectl delete pod -n kube-system coredns-7f74c56694-24wql
kubectl delete pod -n kube-system coredns-7f74c56694-hsvpk

如下所示,则表示正常

root@k8s-master-63:~# kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh
If you don't see a command prompt, try pressing enter.
/ # nslookup kubernetes.default
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      kubernetes.default
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
/ # 
/ # ping www.baidu.com
PING www.baidu.com (14.119.104.189): 56 data bytes
64 bytes from 14.119.104.189: seq=0 ttl=56 time=18.861 ms
64 bytes from 14.119.104.189: seq=1 ttl=56 time=9.493 ms
64 bytes from 14.119.104.189: seq=2 ttl=56 time=26.687 ms
64 bytes from 14.119.104.189: seq=3 ttl=56 time=25.154 ms

总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:企业级K8s集群运维实战

这个错误提示是因为 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 调度到其他节点上,避免数据丢失或服务中断。 希望这些信息能够帮助您解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

东城绝神

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值