GKE on AWS 中的正常节点关停

从 1.26 版开始,GKE on AWS 会自动启用正常节点关停。此功能可以管理节点关停期间 Pod 的正常终止。正常终止可让 Pod 保存其状态,并在节点关停之前释放资源。这种终止 Pod 的方法可最大限度地降低数据丢失的风险。它还可以最大程度地减少其他 Pod 以及依赖于被关停的 Pod 或与这些 Pod 交互的服务中断的风险,从而增强集群的弹性。

工作原理

预定维护、节点扩缩或硬件问题等事件会触发节点关停。kubelet kubelet 组件会检测事件,并指示 systemd 将系统关停延迟指定时长,从而启动正常节点终止过程。此延迟使节点有时间排空和逐出其上运行的 Pod。

正常节点终止的目标是在节点关停之前正常终止非系统和关键系统 Pod。系统会使用以下默认设置:

  • ShutdownGracePeriod:30 秒
  • ShutdownGracePeriodCriticalPods:15 秒

这些设置会为非系统 Pod 在强制停止之前提供 15 秒的时间来正常终止。关键系统 Pod 在非系统 Pod 终止后有 15 秒的时间来关停。但是,由于该功能会尽最大努力运行,因此节点可能无法在指定的 30 秒内正常关停。

触发器和限制

触发正常节点关停的事件包括计划内事件,如下所示:

  • 用户发起的关停
  • 终止实例
  • 计划性维护
  • 缩减集群

在这些情况下,kubelet 会检测节点关停事件并启动正常节点关停过程。

相比之下,如果关停命令不会触发 kubelet 组件所依赖的 systemd 抑制器锁定机制,则无法激活正常节点关停。此类情况的示例包括:

  • 网络断开连接
  • 硬件故障
  • 资源(例如内存或 CPU)不足
  • 意外停电。

在这些情况下,节点可能会突然关停,从而可能导致中断或数据丢失。