配置 Pod 驱逐时间 - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

配置 Pod 驱逐时间

在控制平面或可用区故障场景中设计弹性时,Pod 驱逐时间非常有用。在可用区故障测试期间,子网失去网络连接,所有受影响的 Amazon EKS 节点都将失去与 Amazon EKS 控制平面的连接。在 1 分钟内,所有受影响的 Amazon EKS 节点都将标有NotReady状态,pod 终端节点或 EndpointSlices 已从服务终端节点中移除。但是,在受影响节点上运行的所有 Pod 都会在默认的 5 分钟内保持该running状态。然后将 pod 标记为TERMINATING,并调度新的 pod。

Kubernetes 控制器管理器中的pod-eviction-timeout参数默认设置为 5 分钟,并且可以通过 Kubernetes 控制平面进行更新。但是,由于 Amazon EKS 是一项托管 Kubernetes 服务,pod-eviction-timeout因此无法修改。

要解决这个问题,你可以使用基于节点污点的驱逐。当节点关闭或 kubelet 停止发布状态时,该节点将被 node.kubernetes.io/unreachable 污染。默认情况下,Pod 可以容忍这种污点 5 分钟,但你可以或多或少地使用标准的污点容忍度来覆盖它。要定义自定义容忍期限,请将指定 for node.kubernetes.io/unreachablenode.kubernetes.io/not-readytolerationSeconds的代码附加到每个部署。以下代码提供了一个示例:

apiVersion: apps/v1 kind: Deployment metadata: name: busybox namespace: default spec: replicas: 2 selector: matchLabels: app: busybox template: metadata: labels: app: busybox spec: tolerations: - key: "node.kubernetes.io/unreachable" operator: "Exists" effect: "NoExecute" tolerationSeconds: 2 - key: "node.kubernetes.io/not-ready" operator: "Exists" effect: "NoExecute" tolerationSeconds: 2 containers: - image: busybox command: - sleep - "3600" imagePullPolicy: IfNotPresent name: busybox restartPolicy: Always