ポッドエビクション時間を設定する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ポッドエビクション時間を設定する

ポッドエビクション時間は、コントロールプレーンまたはアベイラビリティーゾーンの障害シナリオで回復性を設計する場合に便利です。サブネットのネットワーク接続が失われるアベイラビリティーゾーンの障害テスト中、影響を受けるすべての Amazon EKS ノードは Amazon EKS コントロールプレーンへの接続を失います。1 分以内に、影響を受けるすべての Amazon EKS ノードに NotReadyステータスとマークされ、ポッドエンドポイントまたは EndpointSlices がサービスエンドポイントから削除されます。ただし、影響を受けるノードで実行されているすべてのポッドは、デフォルトの 5 分間runningステータスのままになります。その後、ポッドは としてマークされTERMINATING、新しいポッドがスケジュールされます。

Kubernetes Controller Manager 内の pod-eviction-timeoutパラメータはデフォルトで 5 分に設定され、Kubernetes コントロールプレーンを介して更新できます。ただし、Amazon EKS はマネージド Kubernetes サービスであるため、 pod-eviction-timeout は変更できません。

回避策として、ノードテイントベースのエビクションを使用できます。ノードがダウンするか、kubelet がステータスの投稿を停止すると、ノードは node.kubernetes.io/unreachable で汚染されます。デフォルトでは、ポッドはこのテイントを 5 分間許容しますが、これを標準のテイント許容値で多かれ少なかれ上書きできます。カスタム許容期間を定義するには、 tolerationSecondsnode.kubernetes.io/unreachablenode.kubernetes.io/not-readyの値を指定するコードを各デプロイにアタッチします。次のコードは例を示しています。

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