設定 Pod 移出時間 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定 Pod 移出時間

在控制平面或可用區域故障案例中設計彈性時,Pod 移出時間非常有用。在可用區域故障測試期間,子網路失去網路連線時,所有受影響的 Amazon EKS 節點都會失去與 Amazon EKS 控制平面的連線。在 1 分鐘內,所有受影響的 Amazon EKS 節點都會標示 NotReady 狀態,而且已從服務端點移除 Pod 端點或 EndpointSlices。不過,在受影響節點上執行的所有 Pod 都會維持在預設 5 分鐘running的狀態。然後,Pod 會標記為 TERMINATING,並排定新的 Pod。

Kubernetes Controller Manager 內的 pod-eviction-timeout 參數預設為 5 分鐘,並且可以透過 Kubernetes 控制平面更新。不過,由於 Amazon EKS 是受管 Kubernetes 服務,pod-eviction-timeout因此無法修改。

對於解決方法,您可以使用節點污點型移出。當節點關閉或 kubelet 停止張貼狀態時,節點會受到 node.kubernetes.io/unreachable 的污染。根據預設,Pod 會容忍此污點 5 分鐘,但您可以使用標準污點容錯來覆寫該污點超過或縮短時間。若要定義自訂容錯持續時間,請將指定 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