翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ゾーン中断中のポッドエビクションを理解する
完全なアベイラビリティーゾーンの中断が発生した場合、つまり、そのアベイラビリティーゾーン内のすべてのノードが Kubernetes コントロールプレーンへの接続を失った場合、Kubernetes のノードライフサイクルコントローラーTerminatingされ、新しいポッドは利用可能なアベイラビリティーゾーンの正常なノードでスケジュールされます。この期間中、影響を受けるノードはNotReadyステータスを表示し、スケジューラは新しいポッドがそれらのノードに配置されないようにし、EndpointSlice コントローラーは接続が復元されるまで、障害のあるアベイラビリティーゾーンに関連付けられたエンドポイントをサービスルーティングから削除します。
ゾーン内で部分的なノード障害が発生し、ノードのサブセットのみが到達不能になるシナリオの場合、ノードライフサイクルコントローラーは異なるエビクション動作を適用します。中断が設定された許容期間 (デフォルトでは 5 分) を超えて持続する場合、切断されたノードのポッドは としてマークTerminatingされ、使用可能なアベイラビリティーゾーンの正常なノードで新しいポッドがスケジュールされます。
Amazon EKS ゾーンシフトを実装して耐障害性を向上させる
Amazon Application Recovery Controller (ARC) と統合される Amazon EKS ゾーンシフトは、アベイラビリティーゾーンの障害発生時にトラフィックをプロアクティブに管理するメカニズムを提供します。この機能を使用すると、異常なアベイラビリティーゾーンから同じゾーン内の正常なゾーンにネットワークトラフィックを一時的にリダイレクト AWS リージョン して、サービスの中断を最小限に抑えることができます。
ゾーンシフトメカニズムについて
Amazon EKS ゾーンシフトは、東西トラフィック (クラスター内のポッド間通信) に対処します。ゾーンシフトが Application Load Balancer または Network Load Balancer で設定されている場合、イングレストラフィックルーティングもサポートされます。このメカニズムは、複数の Kubernetes コンポーネントと AWS コントロールプレーンコンポーネントを調整して、実行中のワークロードを中断することなくトラフィックを安全にリダイレクトすることで動作します。アクティブなゾーンシフト中、Amazon EKS は次の調整されたアクションを自動的に実行します。
-
ノードのグルーニング: 障害が発生したアベイラビリティーゾーン内のすべてのノードがグルーニングされます。これにより、Kubernetes スケジューラは既存のワークロードを維持しながらノードに新しいポッドを配置できなくなります。
-
アベイラビリティーゾーンの再調整の停止: マネージド型ノードグループの場合、アベイラビリティーゾーンの再調整オペレーションは中断され、Auto Scaling グループは正常なアベイラビリティーゾーンでのみ新しいデータプレーンノードを起動するように更新されます。これにより、新しい容量が障害ゾーンにプロビジョニングされなくなります。
-
エンドポイントの削除: EndpointSlice コントローラーは、障害が発生したアベイラビリティーゾーンのポッドエンドポイントを関連するすべての EndpointSlices から削除します。これにより、サービス検出とロードバランシングのメカニズムは、正常なアベイラビリティーゾーンで実行されているポッドにのみトラフィックをルーティングします。
-
ワークロードの保存: Amazon EKS は、影響を受けるアベイラビリティーゾーンでのノードの終了やポッドの削除を控えます。ゾーンシフトの有効期限が切れたりキャンセルされたりすると、追加のスケーリング操作を必要とせずにトラフィックを安全に戻ることができるように、障害ゾーンでフルキャパシティを維持します。
ゾーンシフトのアクティベーション方法
運用モデルに応じて、2 つのアプローチから選択してゾーンシフトを開始できます。
-
手動ゾーンシフトは、モニタリング、アラート、または顧客レポートによって特定のアベイラビリティーゾーンの問題が検出された場合に、オペレーター主導の制御を提供します。このメソッドには、ARC コンソール、 AWS Command Line Interface (AWS CLI)、またはゾーンシフト APIs を介した明示的なアクションが必要です。ここで、演算子は障害のあるアベイラビリティーゾーンを指定し、シフトの有効期限を定義します。手動シフトは、チームが専用のモニタリング機能とオンコール機能を持ち、トラフィック管理の決定を直接制御したい場合に適しています。
-
ゾーンオートシフトは、ARC が、ネットワークメトリクス、Amazon Elastic Compute Cloud (Amazon EC2) AWS のサービス、Elastic Load Balancing など、複数の にわたる内部テレメトリとヘルスシグナルに基づいて潜在的なアベイラビリティーゾーンの障害を検出したときに、シフトを自動的に開始 AWS することを に許可します。 は、インジケータが問題を解決したことを示すと、オートシフト AWS を自動的に終了します。手動による介入を最小限に抑えて可用性を最大限に高めたい場合は、検出されたアベイラビリティーゾーンの障害に数分で対応できるため、このアプローチをお勧めします。
効果的なゾーンシフトの前提条件
アベイラビリティーゾーンの障害発生時にゾーンシフトがアプリケーションを適切に保護するには、ゾーンシフト機能を有効にする前に、マルチ AZ レジリエンスのためにクラスターを設計する必要があります。
-
マルチ AZ ノード分散: 少なくとも 3 つのアベイラビリティーゾーンにワーカーノードをプロビジョニングして、1 つのゾーンが使用できなくなったときに十分な冗長性を確保します。
-
キャパシティプランニング: 1 つのアベイラビリティーゾーンがサービスから削除されたときにワークロード全体に対応するために、正常なアベイラビリティーゾーン間で十分なコンピューティングキャパシティを事前プロビジョニングします。これは、アクティブな中断中のスケーリングオペレーションで容量不足が発生する可能性があるためです。
-
ポッドの分散と事前スケーリング: すべてのアベイラビリティーゾーンに各アプリケーションの複数のレプリカをデプロイし、すべてのゾーンで CoreDNS などの重要なシステムコンポーネントを事前スケーリングします。これにより、ゾーンを遠ざけた後も十分な容量が維持されます。
ゾーン中断の回復力に関する推奨事項
-
クラスターの作成時にゾーンシフトを有効にする: 新しい EKS クラスターの場合、Amazon EKS コンソール、または などのInfrastructure as Code (IaC) ツールによる初期プロビジョニング中に AWS CLI、ARC とのゾーンシフト統合を有効にします AWS CloudFormation。クイック設定で作成された EKS Auto Mode クラスターでは、デフォルトでゾーンシフトが有効になっています。
-
適切なアクティベーション方法を選択する: 自動応答で最大限の可用性を必要とする本番環境、特にアベイラビリティーゾーンの障害中に数分のダウンタイムがビジネスに大きな影響を与える可能性がある顧客向けアプリケーションには、ゾーンオートシフトを選択します。運用チームがトラフィックの移行前に明示的な承認を行うことを希望する環境や、アプリケーションのテストと検証がまだ進行中の環境では、手動ゾーンシフトを使用します。
-
本番デプロイ前のテストレジリエンス: テストゾーンシフトを手動で開始するか、ゾーンオートシフトの練習実行を有効にして、シングル AZ 損失下でクラスターの動作を検証し、アベイラビリティーゾーン数を減らして運用する場合にアプリケーションが可用性を維持し、パフォーマンスが許容範囲内であり、容量が十分であることを確認します。実際のアベイラビリティーゾーンの障害が発生する前に設定ギャップを特定できるように、このテストを強くお勧めします。
-
ロードバランサーの設定と調整する: 外部トラフィックを受信するアプリケーションの場合、関連する Application Load Balancer と Network Load Balancer で ARC ゾーンシフトを有効にして、アベイラビリティーゾーンの障害中に進入トラフィックとクラスター内の東西トラフィックの両方が一緒にシフトするようにします。この調整により、外部リクエストが正常なポッドに到達しても、それらのポッドがシフトアウェイゾーンの依存関係と通信できないシナリオを防ぐことができます。
-
シフトオペレーションのモニタリング: ゾーンシフトを有効にしたら、オートシフトのアクティベーション、手動シフトの開始、シフトの有効期限などのシフトイベントのモニタリングとアラートを設定して、トラフィック管理アクションとそのアプリケーション動作への影響に関する運用上の可視性を維持します。
シフトの完了と復旧
ゾーンシフトが設定された期間に基づいて期限切れになるか、アベイラビリティーゾーンの障害が解決した後に手動でキャンセルされると、EndpointSlice コントローラーはすべての EndpointSlices を自動的に更新して、復元されたアベイラビリティーゾーンにエンドポイントを再統合します。トラフィックは、クライアントがエンドポイント情報を更新して新しい接続を確立すると、以前に影響を受けたゾーンに徐々に戻ります。これにより、手動による介入やポッドの再スケジュールを必要とせずに、クラスターの容量を最大限に活用できます。