GKE の StatefulSet について


このページでは、Google Kubernetes Engine(GKE)での StatefulSet オブジェクトの使用方法について説明します。ステートフル アプリケーションをデプロイする方法もご覧ください。

StatefulSet について

StatefulSet は、スケジュールされた場所にかかわらず GKE が保持する一意で永続的な ID と固有のホスト名を持つ「ポッド」のセットを表します。任意の StatefulSet Pod の状態情報やその他の復元データは、StatefulSet の各 Pod に関連付けられた永続ディスク ストレージに保持されます。StatefulSet Pod はいつでも再起動できます。

ステートレス アプリケーションには、Deployment を使用します。

StatefulSet は GKE と Kubernetes で同様に機能します。このドキュメントでは、GKE 固有の考慮事項について説明します。StatefulSet の仕組みについては、StatefulSet に関する Kubernetes のドキュメントをご覧ください。

StatefulSet のネットワーキングを計画する

StatefulSet は、永続ボリュームと一意のネットワーク ID(ホスト名)の形式で永続ストレージを提供します。次の表に、StatefulSet を構成するときにアプリケーション運用者が知っておくべき注意事項を示します。

ネットワーキングの注意事項 説明 ベスト プラクティス
固定 IP アドレスではない GKE サービス

Pod のレプリカには一意の序数インデックスがあり、レプリカごとのボリュームとネットワーク ID(ホスト名)をサポートしていますが、GKE が再スケジュールしたり、Pod を強制排除したりすると、レプリカに割り当てられる IP アドレスが変わる可能性があります。

ネットワークの問題を軽減するために、このアーキテクチャでは Kubernetes Service リソースを使用する必要があります。詳細については、Kubernetes Service のタイプをご覧ください。

Headless Services

初期化時に、StatefulSet が一致する Headless Service とペアになります。

Service の「metadata.name」が StatefulSet の serviceName フィールドと一致することを確認します。これにより、アプリケーション内の各 Pod を、明確に定義された一意のネットワーク アドレスにアドレスを指定できます。また、Headless Service は、StatefulSet の各レプリカにマルチ IP レコードを提供するため、完全なピア検出が可能になります。

ピアの検出

ステートフル アプリケーションが完全な可用性で機能するには、最小数(クォーラム)のレプリカが必要です。

Pod はクラッシュ、再スケジュール、強制排除の可能性があるため、StatefulSet の各レプリカは、クォーラムから離脱して再参加できる必要があります。ピアリングが必要なアプリケーションには、Kubernetes の Headless Service を介して他のピアを検出する機能が必要です。

readinessProbe と livenessProbe に基づくヘルスチェック

アプリケーションでは、readiness、liveness、スタートアップの各プローブが適切に構成されている必要があります。各プローブのタイムアウトの選択は、アプリケーションの要件によって異なります。

readinessProbe では、以下のベスト プラクティスに沿って、トラフィックを処理する準備が整ったときに readiness をマークするようにアプリケーションを構成します。

  • livenessProbe: livenessProbe を使用すると、コンテナが正常かどうかを通知できます。たとえば、データベース レプリカは、livenessプローブを使用して、GKE がレプリカ(デッドロック条件など)を再起動する必要があることを示すことができます。
  • readinessプローブ: readinessプローブを使用して、トラフィックを処理するレプリカを一時的に削除できます。たとえば、バックアップを実行する必要があるデータベース レプリカがある場合、readiness プローブ を使用してリクエストの受信を一時的に停止できます。
  • スタートアッププローブ: スタートアッププローブを使用して、長時間実行の初期化が完了するまでヘルスチェックを遅らせることができます。たとえば、データベース レプリカがある場合、スタートアップ プローブを使用して、ディスクから保存されたデータの初期化を待機できます。

プローブの詳細については、livenessProbe、readinessProbe、startupProbe を構成するをご覧ください。

StatefulSet を操作する

GKE クラスタに StatefulSet をデプロイして操作する方法については、Kubernetes ドキュメントで StatefulSet の基本をご覧ください。

次のステップ