マルチゾーン クラスタとリージョン クラスタ

このページでは、Kubernetes Engine でのマルチゾーン クラスタとリージョン クラスタのサポートの概要について説明します。

概要

デフォルトでは、クラスタは作成時に指定された単一のゾーン内にクラスタ マスターとノードを作成します。マルチゾーン クラスタまたはリージョン クラスタを作成することにより、クラスタの可用性と復元力を向上させることができます。マルチゾーン クラスタとリージョン クラスタは、リージョン内の複数のゾーンに Kubernetes リソースを分散させます。

マルチゾーン クラスタ:

  • 1 つのゾーンに単一のクラスタ マスターを作成します。
  • 複数のゾーンにノードを作成します。

リージョン クラスタ:

  • 3 つのゾーンに 3 つのクラスタ マスターを作成します。
  • デフォルトでは 3 つのゾーンにノードを作成します。必要に応じて、指定した数のゾーンにノードを作成することもできます。

リージョン クラスタとマルチゾーン クラスタの主な違いは、リージョン クラスタは 3 つのクラスタ マスターを作成する一方、マルチゾーン クラスタが作成するクラスタ マスターは 1 つだけであるという点です。

クラスタの作成時に、マルチゾーン クラスタまたはリージョン クラスタを作成することを選択できます。ただし、マルチゾーン クラスタをリージョン クラスタに移行したりダウングレードしたりすることはできません。その逆も同様です。

料金

ベータ期間中は、リージョン クラスタを追加料金なしで使用できます。

マルチゾーン クラスタまたはリージョン クラスタを使用する場合、プロジェクトにより多くのリージョン割り当てが必要になります。マルチゾーン クラスタまたはリージョン クラスタを使用する前に、割り当てと Kubernetes Engine の料金を確認してください。Insufficient regional quota to satisfy request for resource(リソースのリクエストに対応する十分なリージョン割り当てがありません)というエラーが発生した場合、そのリクエストは現在のリージョンで利用できる割り当てを超えています。

さらに、複数のゾーンにまたがるノード間トラフィックに対しては料金が発生します。たとえば、あるゾーン内のサービスが別のゾーン内のサービスと通信する必要がある場合、ソーン間ネットワーク トラフィックに対する料金が発生します。詳細については、Compute Engine の料金ページに記載されている「同一リージョン内のゾーン間の下り(GB あたり)」をご覧ください。

マルチゾーン クラスタおよびリージョン クラスタでの永続ストレージ

永続ストレージ ディスクはゾーンのリソースです。クラスタに永続ストレージを追加する場合は、ゾーンが指定されていない限り、Kubernetes Engine はディスクを単一のゾーンに割り当てます。その際、Kubernetes Engine はゾーンをランダムに選択します。StatefulSet を使用する場合は、各レプリカ用にプロビジョニングされた永続ディスクがゾーン全体に分散されます。

永続ディスクがプロビジョニングされると、そのディスクを参照するすべてのポッドが、ディスクと同じゾーンにスケジュールされます。

読み取り / 書き込み用の永続ディスクを複数のノードに接続することはできません。

マルチゾーン クラスタ

マルチゾーン クラスタは、複数のゾーンにノードを作成することで、アプリケーションの可用性を向上させるのに役立ちます。万一ゾーン全体が停止した場合でも、ダウンタイムを防ぐことができます。

マルチゾーン クラスタは同一リージョン内の複数のゾーンにノードを作成します。マルチゾーン クラスタに含まれるすべてのノードは、同じクラスタ マスターによって制御されます。

マルチゾーン クラスタの仕組み

マルチゾーン クラスタを初めて作成する場合や、既存のクラスタにゾーンを追加してマルチゾーン クラスタを作成する場合、Kubernetes Engine はすべてのゾーンのリソースサイズを同じにします。

たとえば、4 コアが割り当てられた 2 個の VM インスタンスをリクエストし、クラスタが 3 つのゾーンに分散するように設定したとします。この場合、ゾーンごとに 8 コアずつ、合計 24 コアを取得します。

マルチゾーン クラスタは、ポッドがゾーン間で均等にスケジュールされるよう、複数のゾーンに均等にリソースを分散させます。このようにすることで、可用性と障害復旧性が向上します。コンピューティング リソースがゾーン間で均等に分散していないと、スケジューラがポッドを均等にスケジュールできない場合があります。ポッドの反アフィニティを指定することで、リソースの均等な分散を保証することができます。

マルチゾーン クラスタ内のデフォルト ノードプールとカスタム ノードプールは、自動的にマルチゾーンの可用性を備えています。これらのノードには、障害ドメインを示す Kubernetes のラベルが適用されます。これにより、Kubernetes スケジューラはこれらのノードを考慮できるようになります。

新しいマルチゾーン クラスタを作成する

Console

マルチゾーン クラスタを作成する手順は次のとおりです。

  1. GCP Console で [Kubernetes Engine] メニューにアクセスします。

    [Kubernetes Engine] メニューにアクセス

  2. [クラスタを作成] をクリックします。

  3. [ロケーション] で [ゾーン] が選択されていることを確認します。
  4. [ゾーン] プルダウン メニューから目的のゾーンus-central1-a など)を選択します。
  5. 必要に応じてクラスタを設定し、[その他] をクリックします。
  6. [その他のゾーン] メニューから目的のゾーンを選択します。
  7. [作成] をクリックします。

gcloud

マルチゾーン クラスタを作成するには、--additional-zones フラグを指定した gcloud container clusters create コマンドを使用し、追加のゾーンをカンマで区切って指定します。

gcloud container clusters create [CLUSTER_NAME] --zone [ZONE] \
--additional-zones [ZONE,...]

例:

gcloud container clusters create example-cluster --zone us-central1-f \
--additional-zones us-central1-a,us-central1-b

上記のコマンドは次の出力を返します。

NAME             ZONE           MASTER_VERSION  MASTER_IP        MACHINE_TYPE   NODE_VERSION  NUM_NODES  STATUS
example-cluster  us-central1-f  x.x.x           xxx.xxx.xxx.xx   n1-standard-1  x.x.x         9          RUNNING

この例では、合計 9 つのノードが作成されることに注意してください。--num-nodes フラグを省略すると、デフォルトでは、クラスタがゾーンごとに 3 つのノードを作成します。3 つのゾーンが指定されているので、このコマンドは us-central1-fus-central1-aus-central1-b のそれぞれに 3 つのノードが含まれる、9 ノードのクラスタを作成します。

既存のクラスタに複数のゾーンを追加する

Console

既存のクラスタにゾーンを追加する手順は次のとおりです。

  1. GCP Console で [Kubernetes Engine] メニューにアクセスします。

    [Kubernetes Engine] メニューにアクセスする

  2. 目的のクラスタを選択してから、[編集] をクリックします。

  3. [その他のゾーン] メニューから、目的のゾーンの一部またはすべてを選択します。
  4. [保存] をクリックします。

gcloud

クラスタにゾーンを追加するには、--node-locations フラグを指定した gcloud beta container clusters update コマンドを使用します。このフラグに、追加のゾーンをカンマで区切って指定します。

gcloud beta container clusters update [CLUSTER_NAME] --zone [ZONE] \
--node-locations [ZONE,ZONE,...]

例:

gcloud beta container clusters update example-cluster --zone us-central1-a \
--node-locations us-central1-a,us-central1-f

既存のクラスタからゾーンを削除する

Console

既存のクラスタからゾーンを削除するには、次の手順を行います。

  1. GCP Console で [Kubernetes Engine] メニューにアクセスします。

    [Kubernetes Engine] メニューにアクセス

  2. 目的のクラスタを選択してから、[編集] をクリックします。

  3. [その他のゾーン] メニューで、目的のゾーンの選択を解除します。
  4. [保存] をクリックします。

gcloud

クラスタからゾーンを削除するには、プライマリ ゾーンのみを渡す --node-locations フラグを指定した gcloud beta container clusters update コマンドを使用します。

gcloud beta container clusters update [CLUSTER_NAME] --zone [ZONE] \
--node-locations [ZONE]

例:

gcloud beta container clusters update example-cluster --zone us-central1-a\
--node-locations us-central1-a

リージョン クラスタ

は、

リージョン クラスタは、クラスタ全体の単一の静的エンドポイントを提供します。そのため、個々のゾーンが停止したりゾーンのダウンタイムが発生したりしても、クラスタのコントロール プレーンにアクセスすることができます。

リージョン クラスタの仕組み

リージョン クラスタは、単一のリージョン内の複数のゾーンにクラスタ マスターとノードを複製します。たとえば us-east1 リージョン内のリージョン クラスタは、3 つすべての us-east1 ゾーン(us-east1-bus-east1-cus-east1-d)でクラスタ マスターとノードを作成します。これにより、リソースの可用性が高まり、ゾーンのダウンタイムからクラスタが保護されることになります。それは、単一のゾーンで障害が発生したとしても、リージョン クラスタとそのリソースで障害が発生することはないためです。インフラストラクチャが停止しても、リージョンのコントロール プレーンは引き続き使用できるため、手動で、またはクラスタ オートスケーラーを使用してノードを再び均衡化することができます。

リージョン クラスタを使用すると、次のようなメリットがあります。

  • 単一ゾーンの障害からの回復力。 リージョン クラスタはリージョン内の単一のゾーンだけで利用できるのではなく、リージョン全体で利用できます。そのため、単一のゾーンがダウンしても Kubernetes コントロール プレーンやリソースには影響がありません。
  • ゼロ ダウンタイムのマスター アップグレードと、マスター障害によるダウンタイムの短縮化。高可用性コントロール プレーンを使用するため、アップグレードの際でもプレーンの可用性には影響がありません。

v1beta1 API を使用するように gcloud を設定する

この機能を gcloud と一緒に使用するには、gcloud 用の v1beta1 API サーフェスを有効にする必要があります。これによって、gcloud beta container clusters コマンドを実行できます。

v1beta1 API を使用するように gcloud コマンドライン ツールを設定するには、シェルまたはターミナル ウィンドウで次のいずれかのコマンドを実行します。

export CLOUDSDK_CONTAINER_USE_V1_API_CLIENT=false
または
gcloud config set container/use_v1_api false

リージョン クラスタを作成する

リージョン クラスタを作成するには、GCP Console または gcloud コマンドライン ツールを使用します。

デフォルトでは、リージョン クラスタの作成時に 3 つのゾーンにクラスタのノードプールが複製されます。

Console

リージョン クラスタを作成する手順は次のとおりです。

  1. Google Cloud Platform Console の [Kubernetes Engine] メニューにアクセスします。

    [Kubernetes Engine] メニューにアクセス

  2. [クラスタを作成] をクリックします。

  3. [ロケーション] から [リージョン] を選択します。
  4. [リージョン] プルダウン メニューから目的のリージョンus-central1 など)を選択します。
  5. 必要に応じてクラスタを設定し、[作成] をクリックします。

gcloud

リージョン クラスタを作成するには、次のコマンドを実行します。

gcloud beta container clusters create [CLUSTER_NAME] --region [REGION] \
[--node-locations [ZONE,ZONE...]]

ここで、[CLUSTER_NAME] はリージョン クラスタに付ける名前、[REGION] は目的のリージョンus-central1 など)です。リージョンに 3 つを超えるゾーンがある場合、または 3 つより少ないゾーンを使用する場合は、オプションの --node-locations フラグを使用して、デフォルトでノードが複製されるゾーンをオーバーライドします。

たとえば、us-east1 内に 9 つのノードからなるリージョン クラスタを作成するには(デフォルトとして、3 つのゾーンのそれぞれに 3 つのノードを作成)、次のコマンドを使用します。

gcloud beta container clusters create my-regional-cluster --region us-west1

6 つのノードからなるリージョン クラスタを作成するには(3 つのゾーンのそれぞれに 2 つのノードを作成するよう --num-nodes で指定)、次のコマンドを使用します。

gcloud beta container clusters create my-regional-cluster --num-nodes 2 \
--region us-west1

2 つのゾーン内の合計 6 つのノードからなるリージョン クラスタを作成するには(--node-locations で指定した 2 つのゾーンのそれぞれに 3 つのノードを作成)、次のコマンドを使用します。

gcloud beta container clusters create my-regional-cluster --region us-central1 \
--node-locations us-central1-b,us-central1-c

マルチゾーン クラスタおよびリージョン クラスタの自動スケーリング

クラスタ オートスケーラーを使用すると、マルチゾーン クラスタまたはリージョン クラスタが自動的にスケールされます。クラスタ オートスケーラーは次の仕組みに従って、複数のゾーンでクラスタをスケールします。

自動スケーリングの制限

マルチゾーン クラスタとリージョン クラスタの自動スケーリングを行う場合、ノードプールのスケーリング制限はゾーンの可用性によって決まります。

たとえば、次のコマンドは 3 つのゾーンにまたがる 6 つのノードで自動スケーリングを行うマルチゾーン クラスタを作成し、ゾーンごとのノード数は 1 つ以上、4 つ以下に指定しています。

gcloud container clusters create example-cluster --zone us-central1-f \
--additional-zones us-central1-a,us-central1-b --num-nodes 2 \
--enable-autoscaling --min-nodes 1 --max-nodes 4

このクラスタの合計サイズは 3~12 ノードです。これらのノードは 3 つのノードに分散されます。いずれかのゾーンで障害が発生すると、クラスタの合計サイズは 2~8 ノードになります。

スケーリング制限のオーバープロビジョニング

万が一ゾーンで障害が発生したとしても容量を維持できるよう、スケーリング制限をオーバープロビジョニングすることができます。

たとえば、3 つのゾーンにまたがるクラスタに対して 150% のオーバープロビジョンを設定すると、クラスタの容量の 3 分の 1 が失われたとしても、利用可能なゾーンにトラフィックの 100% が確実にルーティングされます。上記の例では、ゾーンごとの最大ノード数を 4 ではなく 6 に指定することで、このオーバープロビジョニングを設定できます。この場合、いずれか 1 つのゾーンで障害が発生すると、クラスタは残りのゾーン内にある 12 のノードにスケールします。

同様に、2 つのゾーンにまたがるクラスタに対して 200% のオーバープロビジョニングを設定すると、クラスタの容量の半分が失われたとしても、トラフィックの 100% が確実にルーティングされます。

オーバープロビジョニングは、マルチゾーン クラスタとリージョン クラスタのどちらに対しても設定できます。クラスタ オートスケーラーの詳細については、クラスタ オートスケーラーのドキュメント、または Kubernetes のドキュメントに記載されている自動スケーリングに関する FAQ をご覧ください。

ゾーン間での均衡化

クラスタ オートスケーラーが複数のゾーンでクラスタのサイズを均衡化する仕組みについては、クラスタ オートスケーラーのドキュメントをご覧ください。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...