k8s node NotReady后会发生什么?

本文深入探讨了Kubernetes(K8s)集群中,当节点变为NotReady状态时,不同控制器(如Node Controller、Deployment、ReplicaSet、StatefulSet等)的响应行为。内容涵盖节点监控、Pod驱逐、网络、存储等方面,揭示了K8s如何管理和恢复受影响的Pod和服务,以保持集群的稳定性和服务可用性。

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

K8s 是一种强大的容器编排和管理平台,能够高效地调度、管理和监控容器化应用程序;其本身使用声明式语义管理着集群内所有资源模型、应用程序、存储、网络等多种资源,Node 本身又属于 K8s 计算资源,上面承载运行着各种类型的应用程序,当Node NotReady 后运行在其上面各种 Workload 类型的 Pod 都会受到影响,脱离了 K8s 生命周期的管理后将会变的不可控无法提供服务,为保障该 Node 上 Pod 的可用性及可控性,K8s 会对这个 Node 上的 Pod 进行网络、存储、副本保持等控制;因 K8s 自身 controller manager 较多加上集群管理及运维的复杂度,增加了 Node NotReady 后的理解与学习成本;本文将基于 K8s 1.24 版本对 Node NotReady 后会触发哪些行为进行详细描述。

1. 控制器探索

1.1. Node Controller

默认情况下,Kubelet 每隔 10s (--node-status-update-frequency=10s) 更新 Node 的状态(我们称之为心跳),而 kube-controller-manager 每隔 5s 检查一次 Node 的状态 (--node-monitor-period=5s)。kube-controller-manager 会在 Node 未更新状态超过 40s (--node-monitor-grace-period=40s)时 ,将其标记为 NotReady (Node Ready Condition: True on healthy, False on unhealthy and not accepting pods, Unknown on no heartbeat)。当 Node 超过 5m 未更新状态,则 kube-controller-manager 会驱逐该 Node 上的所有 Pod

Kubernetes 会自动给 Pod 添加针对 node.kubernetes.io/not-ready 和 node.kubernetes.io/unreachable 的容忍度,且配置 tolerationSeconds=300。这里需要注意的是当 Pod 对应容忍没有配置tolerationSeconds时,该容忍生效后 K8s 不会对 Pod 进行驱逐,可以通过 tolerations 配置 Pod 的容忍度,来覆盖默认的配置:

tolerations:
- key: "node.kubernetes.io/unreachable"
  operator: "Exists"
  effect: "NoExecute"
  tolerationSeconds: 300
- key: "node.kubernetes.io/not-ready"
  operator: "Exists"
  effect: "NoExecute"
  tolerationSeconds: 300

Node 控制器在节点异常后,会按照默认的速率(--node-eviction-rate=0.1,即每10秒一个节点的速率)进行 Node 的驱逐。Node 控制器按照 Zone 将节点划分为不同的组&#

ks node 处于 NotReady 状态通常表示该节点无法正常工作,无法接受新的Pod调。这可能是由于节点的网络连接问题资源不足、kubelet未正确运行、容器运行时问题等引起的。要解决此问题,可以尝试以下步骤1. 检查节点的网络连接:确保节点能够与群中的其他节点和控制平面进行通信。可以使用 ping 命令或其他网络工具进行测试。 2. 检查节点资源:确保节点具有足够的资源(CPU、内存、磁盘)来运行Pod。可以使用 kubectl describe node <node-name> 命令查看节点资源信息。 3. 检查 kubelet 运行状态:通过运行 systemctl status kubelet 命令(在使用 systemd 的系统上)或 service kubelet status 命令(在使用 init.d 的系统上)来检查 kubelet 服务是否正常运行。如果 kubelet 未运行,请尝试启动它。 4. 检查容器运行时:如果节点上使用的是 Docker 运行时,请确保 Docker 服务正常运行。可以通过运行 systemctl status docker 命令来检查 Docker 服务状态。如果出现问题,可以尝试重启 Docker 服务。 5. 检查容器运行时配置:某些情况下,容器运行时的配置可能有问题,导致节点处于 NotReady 状态。请检查容器运行时的配置文件,并确保其正确设置。 如果以上步骤都没有解决问题,可以查看节点的日志文件(如 kubelet 日志、容器运行时日志)来获取更多详细信息,以帮助进一步排查和解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值