Google Kubernetes Engine(GKE)クラスタで実行されているアプリケーションは、ノードのアップグレードやその他のメンテナンス イベントなどの停止に備える必要があります。ステートフル アプリケーションは、多くの場合、I/O を完全に停止させ、ストレージからマウント解除する時間を必要とするため、特に停止の影響を受けやすくなります。Pod Disruption Budget(PDB)や readiness プローブなどの Kubernetes 機能を使用して、アップグレード中のアプリケーションの可用性を維持できます。
GKE はクラスタをモニタリングし、Recommender サービスを使用して、プラットフォームの使用を最適化する方法のガイダンスを提供します。GKE は、停止に対してワークロードを準備する機会を検出し、停止に対するワークロードの復元力を最大化するために、PDB または readiness プローブを更新する方法に関するガイダンスを提供します。たとえば、StatefulSet が PDB で保護されていない場合、ノードのアップグレード中に、クラスタはすべての Pod を一度に削除する可能性があります。これを回避するために、GKE は、アップグレード中にほとんどの Pod の実行が継続できるように、PDB を作成するためのガイダンスを提供しています。
停止に関連するガイダンスを GKE が提供している具体的な条件については、GKE が停止に対する脆弱性があるワークロードを特定するタイミングをご覧ください。
Recommender からの分析情報と推奨事項を管理する方法については、分析情報と推奨事項で GKE の使用を最適化するをご覧ください。
停止に対する脆弱性があるワークロードを特定する
GKE は、クラスタの停止の影響を受けやすいワークロードを識別する分析情報を生成します。これらの分析情報を取得するには、Google Cloud CLI または Recommender API を使用して分析情報と推奨事項を表示します。特定の分析情報をフィルタするには、次のセクションで説明するサブタイプを使用します。これらの分析情報は Google Cloud コンソールでは使用できません。
GKE が停止に対する脆弱性があるワークロードを特定するタイミング
GKE が分析情報と推奨事項を提供するシナリオと、関連するサブタイプについては、次の表をご覧ください。
分析情報のサブタイプ | 説明 | アクション |
---|---|---|
PDB_UNPROTECTED_STATEFULSET |
StatefulSet の Pod セレクタラベルと一致する既存の DBDB ラベルが存在しない場合に StatefulSet が存在するとき、アラートを送信します。つまり、ノードのアップグレードなどのイベントが発生すると、StatefulSet 内のすべての Pod が停止する可能性があります。 | StatefulSet の Pod セレクタ フィールドのラベルと一致するラベルの PDB を追加します。StatefulSet で許容される停止の回数をその PDB で指定します。この分析情報に関連する推奨事項は、前述の StatefulSet をカバーするために PDB が設定する必要があるラベルを提案します。 |
PDB_UNPERMISSIVE |
ノードのアップグレードなどのメンテナンス アクティビティのために Pod に一致する PDB を遵守できないときに、アラートを送信します。PDB では少なくとも 1 つの Pod の停止を許可する必要があるため、GKE は 1 時間後に必要なメンテナンスのためにこの PDB に違反します。 | PDB の minAvailable 設定を Pod の合計数より小さくするか、maxUnavailable の設定を 0 より大きくします。 |
PDB_STATEFULSET_WITHOUT_PROBES |
StatefulSet が PDB で構成されているものの readiness プローブがないときに、アラートを送信します。そのため PDB はアプリケーションの準備状況の測定に関して効果的ではありません。PDB は、正常とみなせる Pod を調べるときに、readiness プローブに従います。このため、PDB がカバーする Pod に readiness プローブが構成されていない場合、PDB は、Pod が正常か、単に稼働中かを示す可視性が制限されます。 | 分析情報に記載されている PDB の StatefulSet の Pod に、readiness プローブを追加します。また、liveness プローブを追加することをおすすめします。 |
DEPLOYMENT_MISSING_PDB |
既存の PDB と一致しない Pod セレクタを持つ Deployment が存在し、Deployment に複数のレプリカが存在する場合、または水平 Pod 自動スケーリングが有効になっている場合にアラートを送信します。つまり、ノードのアップグレードなどのイベントが発生すると、Deployment 内のすべての Pod が停止する可能性があります。 | Deployment の Pod セレクタ フィールドのラベルと一致するラベルの PDB を追加します。Deployment で許容される停止の回数をその PDB で指定します。この分析情報に関連する推奨事項は、前述の Deployment をカバーするために PDB が設定する必要があるラベルを提案します。 |
ガイダンスを実装して停止への準備を改善する
クラスタ内のワークロードに関する分析情報と推奨事項をすでに受け取っており、停止への準備を強化する場合は、前のセクションで説明したように、その分析情報のサブタイプに推奨される手順とアクションを実装します。
推奨事項は 1 日に 1 回評価されるため、実装してから解決するまでに最大 24 時間かかることがあります。推奨事項のガイダンスを実装してから 24 時間未満の場合は、推奨事項に解決済みのマークを付けることができます。推奨事項を実装しない場合は、拒否できます。
次のステップ
- GKE クラスタの信頼性と稼働時間の保証の詳細については、GKE Day 2 オペレーションのベスト プラクティスをご覧ください。
- Kubernetes での Pod 停止の可能性についての詳細は、停止をご覧ください。