リージョン クラスタ


このページでは、Google Kubernetes Engine(GKE)内のリージョン クラスタの動作について説明します。リージョン クラスタの作成や、クラスタのさまざまなタイプに関する詳細の確認ができます。

概要

1 つのゾーン内に 1 つのコントロール プレーンが存在するゾーンクラスタとは対照的に、リージョン クラスタでは、ノードをリージョンの複数ゾーンにわたって複製することにより、クラスタのコントロール プレーンとノードの可用性を向上させます。これにより、マルチゾーン クラスタの利点に加えて、次のような利点も得られます。

  • リージョン内の 1 つのゾーンが停止しても、コントロール プレーンの 2 つのレプリカが使用可能な限り、クラスタのコントロール プレーンはアクセス可能なままになります。
  • クラスタ アップグレードなどのクラスタ メンテナンス中は、コントロール プレーンのレプリカが一度に 1 つだけ使用不可になり、クラスタは動作を継続します。

コントロール プレーンはリージョンの 3 つのゾーンにわたって複製されます。ノードプールの場合は、クラスタのノードプールを実行するゾーンを手動で指定することも、デフォルト構成を使用して各ノードプールをコントロール プレーンのリージョンの 3 つのゾーンにわたって複製することもできます。すべてのゾーンは、クラスタのコントロール プレーンと同じリージョン内に存在する必要があります。

本番環境ワークロードを実行するには、リージョン クラスタを使用します。リージョン クラスタの方がゾーンクラスタと比較して可用性に優れているためです。

リージョン クラスタを作成した後は、そのクラスタをゾーンクラスタに変更することはできません

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

リージョン クラスタは、クラスタのコントロール プレーンとノードを単一リージョン内の複数のゾーンにわたって複製します。たとえば、us-east1 リージョン内のリージョン クラスタは、デフォルトの構成を使用して 3 つの us-east1 ゾーン(us-east1-bus-east1-cus-east1-d)でコントロール プレーンとノードのレプリカを作成します。インフラストラクチャが停止しても、ワークロードは動作を継続し、手動またはクラスタ オートスケーラーを使用してノードを再均衡化できます。

リージョン クラスタを使用するメリットは次のとおりです。

  • 単一ゾーンの障害からの復元力: リージョン クラスタは、リージョン内の単一のゾーンだけでなく、リージョン全体で使用できます。単一のゾーンが使用できなくなっても、コントロール プレーンとリソースには影響がありません。
  • 継続的コントロール プレーン アップグレード、コントロール プレーン リサイズ、およびコントロール プレーン障害時のダウンタイムの短縮。コントロール プレーンの冗長レプリカにより、リージョン クラスタは Kubernetes API の可用性を高め、アップグレード中でもコントロール プレーンにアクセスできます。

制限事項

  • デフォルトでは、リージョン クラスタは、リージョン内の 3 つのゾーンに均一に分散した 9 つのノード(ゾーンごとに 3 つ)で構成されています。これにより 9 つの IP アドレスが使われます。必要に応じて、ノードの数をゾーンあたり 1 つに減らすことができます。新規に作成された Cloud 請求先アカウントには、リージョンごとに 8 つの IP アドレスしか付与されないため、リージョン クラスタの規模に応じて、使用中のリージョン IP アドレスの割り当ての増加をリクエストする必要があります。使用可能な IP アドレスが少なすぎると、クラスタの作成が失敗します。

  • GPU をリージョン クラスタで実行するには、GPU が利用可能なゾーンが 3 つ存在するリージョンを選択します。クラスタの作成時に --node-locations フラグを使用してゾーンを指定することもできます。

    選択したリージョンに GPU が利用可能なゾーンが 3 つ存在しない場合は、次のようなエラーが表示される可能性があります。

    ERROR: (gcloud.container.clusters.create) ResponseError: code=400, message=
        (1) accelerator type "nvidia-tesla-k80" does not exist in zone us-west1-c.
        (2) accelerator type "nvidia-tesla-k80" does not exist in zone us-west1-a.
    

    GPU を使用できるリージョンとゾーンの一覧については、Compute Engine の GPU をご覧ください。

  • ノードプールのゾーンは、クラスタのコントロール プレーンと同じリージョンに存在する必要があります。必要に応じて、クラスタのゾーンを変更することができます。変更すると、新規ノードと既存ノードのすべてがそれらのゾーンにまたがることになります。

料金

リージョン クラスタを使用する場合、類似するゾーンクラスタやマルチゾーン クラスタよりも多くのプロジェクトのリージョン割り当てが必要となります。リージョン クラスタを使用する前に、割り当てと GKE の料金を確実に理解してください。Insufficient regional quota to satisfy request for resource エラーが発生した場合、そのリクエストは現在のリージョンで使用可能な割り当てを超えています。

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

リージョン クラスタ内の永続ストレージ

ゾーン永続ディスクはゾーンリソースであり、リージョン永続ディスクはマルチゾーン リソースです。永続ストレージを追加するとき、ゾーンが指定されない限り、GKE はディスクを単一のランダムなゾーンに割り当てます。ゾーンの制御方法については、永続ディスクのゾーンをご覧ください。

リージョン クラスタの自動スケーリング

クラスタ オートスケーラーを使用してリージョン クラスタ内のノードプールを自動的にスケーリングする場合は、次の点に留意してください。

さらに、リージョン クラスタの自動スケーリングの制限に関する詳細や、クラスタ オートスケーラーがゾーン間で均衡化を図る方法の詳細を確認することもできます。

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

万一ゾーンで障害が発生しても容量を維持できるように、GKE にスケーリング制限の超過を許可し、一部のゾーンが使用できない場合でも最小限の可用性を確保できます。

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

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

Kubernetes のドキュメントでクラスタ オートスケーラーの詳細や、自動スケーリングに関するよくある質問を確認できます。

次のステップ