k8s之节点异常状态与污点

节点异常状态与污点

NotReady 节点状态为 NotReady 的原因

0. 常见原因:Kubelet 挂掉

  • 判断方法
    • 登录到节点:ssh root@11.127.211.13
    • 检查 Kubelet 进程:ps -ef | grep 'kubelet'

1. 网络问题

  • 网络连接中断

    • 节点与 API 服务器之间的网络连接不稳定或中断,会导致节点无法正常向 API 服务器汇报状态。
    • 例如,网络设备故障、网络配置错误等,使得 Kubelet 无法与 API 服务器进行通信。
  • 网络插件故障

    • Kubernetes 的网络插件(如 Calico、Flannel 等)出现问题,会影响节点之间的网络通信以及 Pod 的网络功能。
    • 例如,网络插件配置错误、网络插件服务崩溃等,都可能导致节点状态变为 NotReady

2. Kubelet 服务问题

  • Kubelet 未运行

    • Kubelet 是节点上负责管理 Pod 的核心组件,如果 Kubelet 服务未启动或异常停止,节点将无法正常与 API 服务器交互,从而显示为 NotReady
  • Kubelet 配置错误

    • Kubelet 的配置文件(通常是 /etc/kubernetes/kubelet.conf)存在错误,可能会导致 Kubelet 无法正常工作。
    • 例如,配置的 API 服务器地址错误、认证信息错误等。
  • Kubelet 资源不足

    • 如果节点上的资源(如 CPU、内存)严重不足,Kubelet 可能无法正常运行,进而影响节点状态。

3. 节点硬件问题

  • 磁盘空间不足

    • 节点上的磁盘空间被占满,会导致 Kubelet 无法正常写入日志、存储容器镜像等,从而使节点状态变为 NotReady
    • 可以通过 df -h 命令查看节点磁盘使用情况。
  • 内存不足

    • 节点内存耗尽,会影响 Kubelet 及其他系统进程的正常运行,导致节点状态异常。
    • 可以使用 free -m 命令查看节点内存使用情况。
  • 硬件故障

    • 节点的硬件设备(如硬盘、网卡、内存等)出现故障,也会导致节点无法正常工作,显示为 NotReady

4. 节点系统问题

  • 操作系统异常

    • 节点的操作系统出现问题,如内核崩溃、系统服务故障等,会影响 Kubelet 的正常运行,使节点状态变为 NotReady
  • 系统时间不同步

    • 节点的系统时间与 API 服务器的时间差异过大,可能会导致认证和通信问题,从而影响节点状态。

SchedulingDisabled 节点状态为 SchedulingDisabled 的原因

1. 手动设置

  • 管理员可以使用 kubectl cordon <node-name> 命令将节点标记为不可调度,这样新的 Pod 将不会被调度到该节点上,节点状态会显示为 SchedulingDisabled
  • 这通常用于在进行节点维护、升级等操作前,避免新的 Pod 被调度到该节点。
# 设置节点不可调度
kubectl cordon <node-name>

# 解除不可调度状态
kubectl uncordon <node-name>

2. 节点健康检查失败

  • 当节点的健康检查(如节点的心跳检查、资源可用性检查等)持续失败时,Kubernetes 可能会自动将节点标记为不可调度,以防止新的 Pod 被调度到可能存在问题的节点上。
  • 这种情况通常伴随着节点状态变为 NotReady

3. 资源耗尽

  • 如果节点上的资源(如 CPU、内存、磁盘等)严重不足,Kubernetes 可能会将节点标记为不可调度,避免新的 Pod 被调度到该节点,导致资源进一步紧张。

重新认识污点

在 Kubernetes 中,污点(Taints)是应用于节点上的一种属性,它可以防止 Pod 被调度到具有特定污点的节点上,除非该 Pod 具有与之匹配的容忍度(Tolerations)。

1. node.kubernetes.io/unreachable:NoExecute

  • 污点键(Key)

    • node.kubernetes.io/unreachable 是一个预定义的污点键,通常表示节点处于不可达状态。
    • 这可能是由于网络问题、节点故障或其他原因导致 Kubernetes 控制平面无法与该节点进行通信。
  • 污点效果(Effect)

    • NoExecute 是一种比较严格的污点效果,它有两个主要作用:
      1. 阻止调度:如果一个 Pod 没有容忍这个污点,它将不会被调度到具有该污点的节点上。
      2. 驱逐已有 Pod:如果一个节点被标记为 node.kubernetes.io/unreachable:NoExecute 且一个正在运行的 Pod 没有容忍这个污点,那么该 Pod 会被从节点上驱逐。
    • 不过,Kubernetes 会有一个默认的宽限期(通常是 5 分钟),在宽限期内如果节点恢复正常,Pod 不会被驱逐。

2. node.kubernetes.io/unreachable:NoSchedule

  • 污点键(Key)

    • 同样是 node.kubernetes.io/unreachable,表示节点不可达。
  • 污点效果(Effect)

    • NoSchedule 意味着如果一个 Pod 没有容忍这个污点,它将不会被调度到具有该污点的节点上。
    • NoExecute 不同的是,NoSchedule 不会影响已经在该节点上运行的 Pod,它只对新的调度决策起作用。

3. node.kubernetes.io/unschedulable:NoSchedule

  • 污点键(Key)

    • node.kubernetes.io/unschedulable 是一个表示节点不可调度的预定义污点键。
    • 通常,当管理员使用 kubectl cordon 命令将节点标记为不可调度时,会自动给节点添加这个污点。
  • 污点效果(Effect)

    • NoSchedule 表明如果一个 Pod 没有容忍这个污点,它将不会被调度到具有该污点的节点上。
    • 已经在该节点上运行的 Pod 不会受到影响。

节点状态与污点的关系

节点状态 NotReady 与三种污点的关系

1. 节点因不可达导致 NotReady
  • 当节点由于网络故障、Kubelet 服务异常等原因变得不可达时,Kubernetes 控制平面会给节点添加 node.kubernetes.io/unreachable:NoExecutenode.kubernetes.io/unreachable:NoSchedule 污点。
  • 这种情况下,节点状态通常会变为 NotReady,因为不可达意味着控制平面无法准确获取节点的状态信息,也不能保证节点能够正常运行 Pod。
    • NoExecute 污点不仅会阻止新 Pod 调度到该节点,还会驱逐节点上没有容忍此污点的现有 Pod。
    • NoSchedule 污点则主要阻止新 Pod 调度到该节点,但不影响已在节点上运行的 Pod。
2. 其他原因导致 NotReady
  • 节点 NotReady 也可能由其他因素引起,如磁盘空间不足、内存耗尽、硬件故障等。
  • 在这些情况下,节点可能不会被添加 node.kubernetes.io/unreachable 相关的污点,但可能会被添加 node.kubernetes.io/unschedulable:NoSchedule 污点,以防止新的 Pod 被调度到可能存在问题的节点上。

节点状态 SchedulingDisabled 与三种污点的关系

1. 手动设置导致 SchedulingDisabled
  • 当管理员使用 kubectl cordon <node-name> 命令手动将节点标记为不可调度时,Kubernetes 会给节点添加 node.kubernetes.io/unschedulable:NoSchedule 污点,节点状态会变为 SchedulingDisabled
  • 这是一种主动的操作,目的是在进行节点维护、升级等操作前,避免新的 Pod 被调度到该节点。
2. 节点健康问题导致 SchedulingDisabled
  • 如果节点因为出现严重的健康问题(如不可达、资源耗尽等),Kubernetes 可能会自动将节点标记为不可调度,添加 node.kubernetes.io/unschedulable:NoSchedule 污点或 node.kubernetes.io/unreachable 相关污点,从而使节点状态变为 SchedulingDisabled
  • 这样可以防止新的 Pod 被调度到可能无法正常工作的节点上,保障集群的稳定性。

通过以上内容,您可以更好地理解 Kubernetes 中节点状态与污点的关系,并能够根据实际情况进行排查和处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值