このページでは、トポロジ ドメインの概要と、トポロジ ドメインを設定する際のガイドラインについて説明します。
トポロジ ドメインを設定するには、高度なクラスタを有効にする必要があります。高度なクラスタ プレビューには次の制限事項があります。
- 高度なクラスタは、新しい 1.31 クラスタのクラスタ作成時にのみ有効にできます。
- 高度なクラスタを有効にすると、クラスタを 1.32 にアップグレードできなくなります。高度なクラスタはテスト環境でのみ有効にします。
このページは、会社の戦略に従って IT ソリューションとシステム アーキテクチャを定義し、ユーザー権限に関連するポリシーを作成および管理する、管理者とアーキテクトを対象としています。 Google Cloud のコンテンツで参照する一般的なロールとタスク例の詳細については、一般的な GKE Enterprise ユーザーロールとタスクをご覧ください。
概要
トポロジ ドメインは、キャンパスやデータセンターなど、同じ論理グループまたは物理グループの一部と見なされるクラスタノードのグループです。トポロジ ドメインは、関連する障害が発生する可能性のある基盤となるハードウェアまたはソフトウェアに対応している必要があります。次に例を示します。
- ソフトウェア障害(vCenter Server が異なるなど)
- ハードウェア障害(ラックの違い、電源の違い、建物の違いなど)
VMware 用 Google Distributed Cloud(ソフトウェアのみ)では、クラスタの作成時にトポロジ ドメインを設定する一環として、トポロジラベルを定義します。クラスタの作成後、トポロジラベルがトポロジ ドメイン内のノードのラベルに入力されます。
プレビュー版でトポロジ ドメインを使用するには、次のオプションがあります。
トポロジラベルのキーとして、Kubernetes クラスタレベルのデフォルト制約
"topology.kubernetes.io/zone"
を使用します。詳細については、組み込みのデフォルト制約をご覧ください。トポロジのラベルキーに応じて、Deployment、StatefulSet、または ReplicaSet の
PodTemplate
を構成します。Pod 仕様では、トポロジ ラベルのキーをtopologySpreadConstraints.topologyKey
フィールドの値として使用します。このキーにより、Kubernetes スケジューラはトポロジ ドメインに Pod を分散して、高可用性を確保し、障害が発生した場合に単一の領域に過度に集中するのを防ぎます。Pod 仕様でtopologySpreadConstraints
を構成する方法については、Kubernetes ドキュメントの Pod トポロジの分散の制約をご覧ください。
トポロジ ドメインラベルの例
ユーザー クラスタを作成するときに、次の 3 つのトポロジ ドメインを作成するとします。
...
topologyDomains:
- name: "topology-domain-1"
topologyLabels:
"topology.examplepetstore.com/zone": "zone-1"
...
...
topologyDomains:
- name: "topology-domain-2"
topologyLabels:
"topology.examplepetstore.com/zone": "zone-2"
...
...
topologyDomains:
- name: "topology-domain-3"
topologyLabels:
"topology.examplepetstore.com/zone": "zone-3"
...
クラスタの作成後に、Pod 仕様を更新します。次に例を示します。
...
topologySpreadConstraints:
topologyKey: "topology.examplepetstore.com/zone"
...
概要として、Kubernetes スケジューラは topology.examplepetstore.com/zone
を使用して、クラスタノードを zone-1
、zone-2
、zone-3
の異なるグループに分割します。その後、スケジューラはこれらの 3 つのノードグループに Pod を分散します。
トポロジ ドメインの設定に関するガイドライン
Kubernetes スケジューラがすべてのクラスタ リソースを効果的に使用できるようにするには、次のガイドラインに従うことをおすすめします。
- トポロジ ドメインはバランスが取れている必要があります。各トポロジ ドメインにほぼ同量の CPU 容量と RAM 容量を用意する必要があります。
- 少なくとも 2 つ、できれば 3 つのトポロジ ドメインを指定します。
- 複数のトポロジ キーで分散しないでください。
- 各トポロジ ドメイン内のノードのサイズは同じである必要があります。
- クラスタ内のワークロード分離にtaint と toleration を使用する場合は、各ノードグループが前述の要件を満たしている必要があります。
これらのガイドラインが満たされていない場合、スケジューラはクラスタの全容量を使用することを試みますが、Pod のスケジュールに時間がかかることがあります。また、すべての Pod が想定どおりに分散されるわけではありません。