このドキュメントでは、Google Distributed Cloud(GDC)のエアギャップ ゾーンに標準の Kubernetes クラスタを作成する方法について説明します。標準クラスタは、プロジェクト スコープで構成可能な Kubernetes クラスタを提供します。これには、最小限のマネージド サービスが含まれています。標準クラスタは、共有クラスタよりもサービス構成の柔軟性が高いですが、管理オーバーヘッドも大きくなります。Standard クラスタの詳細については、Kubernetes クラスタ構成をご覧ください。
Standard クラスタはゾーンリソースであり、複数のゾーンにまたがることはできません。マルチゾーン ユニバースでクラスタを運用するには、各ゾーンにクラスタを手動で作成する必要があります。
このドキュメントは、組織内のコンテナ ワークロードの管理を担当するアプリケーション オペレーター グループのアプリケーション デベロッパーなどのユーザーを対象としています。詳細については、GDC エアギャップの対象ユーザーに関するドキュメントをご覧ください。
始める前に
Standard クラスタにアクセスして管理するための適切な設定があることを確認します。詳細については、標準クラスタへのアクセスを管理するをご覧ください。
標準クラスタの作成に必要な権限を取得するには、組織の IAM 管理者にプロジェクト IAM 管理者(
project-iam-admin)ロールと標準クラスタ管理者(standard-cluster-admin)ロールの付与を依頼してください。これらのロールはプロジェクトの Namespace にバインドされます。Kubernetes クラスタの次の Google Distributed Cloud(GDC)エアギャップの制限を計画します。
- 組織あたり 16 個のクラスタ
- クラスタあたり 42 個のワーカーノード、最小 3 個のワーカーノード
- クラスタあたり 4,620 個の Pod
- ノードあたり 110 Pod
Pod CIDR ブロックを計画する
ワークロードに適切なサイズの Pod CIDR ブロックを割り当てるには、Kubernetes クラスタを作成する前に、クラスタに必要な IP アドレスの量を計算する必要があります。クラスタの作成後に変更できないネットワーキング パラメータがほとんどです。
Kubernetes クラスタは、IP アドレスを割り当てるときに次のロジックに従います。
- Kubernetes は、256 個のアドレスで構成される
/24CIDR ブロックを各ノードに割り当てます。この量は、Kubernetes クラスタのノードあたりのデフォルトの最大 Pod 数である 110 個に準拠しています。 - ノードに割り当てられる CIDR ブロックのサイズは、ノードあたりの最大 Pod 数によって異なります。
- ブロックには、ノードあたりの最大 Pod 数の少なくとも 2 倍のアドレス範囲があります。
次の例で、110 個の Pod を収容するために ノードあたりのマスクサイズ= /24 のデフォルト値がどのように計算されたかを確認してください。
Maximum pods per node = 110
Total number of IP addresses required = 2 * 110 = 220
Per node mask size = /24
Number of IP addresses in a /24 = 2(32 - 24) = 256
必要なノード数に基づいて、Kubernetes クラスタ用に構成する必要な Pod CIDR マスクを決定します。CIDR 範囲を構成する際は、クラスタへの将来のノード追加を計画します。
Total number of nodes supported = 2(Per node mask size - pod CIDR mask)
デフォルトのノードあたりのマスクサイズ= /24 があるため、次の表で Pod CIDR マスクとサポートされるノード数をマッピングします。
| Pod CIDR マスク | 計算: 2(ノードごとのマスクサイズ - CIDR マスク) | コントロール プレーン ノードを含むサポートされるノードの最大数 |
|---|---|---|
| /21 | 2(24 - 21) | 8 |
| /20 | 2(24-20) | 16 |
| /19 | 2(24 - 19) | 32 |
| /18 | 2(24 - 18) | 64 |
Kubernetes クラスタの Pod CIDR ブロックを計算したら、次のセクションでクラスタ作成ワークフローの一部として構成します。
標準クラスタを作成する
標準クラスタを作成する手順は次のとおりです。
API
Clusterカスタム リソースを作成し、cluster.yamlなどの YAML ファイルとして保存します。apiVersion: cluster.gdc.goog/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: PROJECT_NAME spec: clusterNetwork: podCIDRSize: POD_CIDR serviceCIDRSize: SERVICE_CIDR initialVersion: kubernetesVersion: KUBERNETES_VERSION nodePools: - machineTypeName: MACHINE_TYPE name: NODE_POOL_NAME nodeCount: NUMBER_OF_WORKER_NODES taints: TAINTS labels: LABELS acceleratorOptions: gpuPartitionScheme: GPU_PARTITION_SCHEME releaseChannel: channel: UNSPECIFIED次のように置き換えます。
CLUSTER_NAME: クラスタの名前。クラスタ名の末尾を-systemにすることはできません。-system接尾辞は、GDC によって作成されたクラスタ用に予約されています。PROJECT_NAME: クラスタを作成するプロジェクトの名前。POD_CIDR: Pod の仮想 IP アドレスが割り当てられるネットワーク範囲のサイズ。未設定の場合、デフォルト値の21が使用されます。SERVICE_CIDR: サービス仮想 IP アドレスが割り振られるネットワーク範囲のサイズ。未設定の場合、デフォルト値の23が使用されます。KUBERNETES_VERSION: クラスタの Kubernetes バージョン(1.26.5-gke.2100など)。構成可能な Kubernetes バージョンを一覧表示するには、クラスタで使用可能な Kubernetes バージョンを一覧表示するをご覧ください。MACHINE_TYPE: ノードプールのワーカーノードのマシンタイプ。構成可能な内容については、使用可能なマシンタイプをご覧ください。NODE_POOL_NAME: ノードプールの名前。NUMBER_OF_WORKER_NODES: ノードプールでプロビジョニングするワーカーノードの数。TAINTS: このノードプールのノードに適用する taint。このフィールドは省略できます。LABELS: このノードプールのノードに適用するラベル。Key-Value ペアのリストが含まれています。このフィールドは省略可能です。GPU_PARTITION_SCHEME: GPU ワークロードを実行している場合は、GPU パーティショニング スキーマ。このフィールドは省略可能です。例:mixed-2このフィールドが設定されていない場合、GPU はパーティショニングされません。使用可能なマルチインスタンス GPU(MIG)プロファイルの詳細については、サポートされている MIG プロファイルをご覧ください。
カスタム リソースを GDC インスタンスに適用します。
kubectl apply -f cluster.yaml --kubeconfig MANAGEMENT_API_SERVERMANAGEMENT_API_SERVERは、ゾーン API サーバーの kubeconfig パスに置き換えます。ターゲット ゾーンの API サーバーの kubeconfig ファイルをまだ生成していない場合は、ログインをご覧ください。
標準クラスタの作成が完了するまでに最大 60 分かかることがあります。
Terraform
Terraform 構成ファイルに次のコード スニペットを挿入します。
provider "kubernetes" { config_path = "MANAGEMENT_API_SERVER" } resource "kubernetes_manifest" "cluster-create" { manifest = { "apiVersion" = "cluster.gdc.goog/v1" "kind" = "Cluster" "metadata" = { "name" = "CLUSTER_NAME" "namespace" = "PROJECT_NAME" } "spec" = { "clusterNetwork" = { "podCIDRSize" = "POD_CIDR" "serviceCIDRSize" = "SERVICE_CIDR" } "initialVersion" = { "kubernetesVersion" = "KUBERNETES_VERSION" } "nodePools" = [{ "machineTypeName" = "MACHINE_TYPE" "name" = "NODE_POOL_NAME" "nodeCount" = "NUMBER_OF_WORKER_NODES" "taints" = "TAINTS" "labels" = "LABELS" "acceleratorOptions" = { "gpuPartitionScheme" = "GPU_PARTITION_SCHEME" } }] "releaseChannel" = { "channel" = "UNSPECIFIED" } } } }次のように置き換えます。
MANAGEMENT_API_SERVER: ゾーン API サーバーの kubeconfig パス。ターゲット ゾーンの API サーバーの kubeconfig ファイルをまだ生成していない場合は、ログインをご覧ください。CLUSTER_NAME: クラスタの名前。クラスタ名の末尾を-systemにすることはできません。-system接尾辞は、GDC によって作成されたクラスタ用に予約されています。PROJECT_NAME: クラスタを作成するプロジェクトの名前。POD_CIDR: Pod の仮想 IP アドレスが割り当てられるネットワーク範囲のサイズ。未設定の場合、デフォルト値の21が使用されます。SERVICE_CIDR: サービス仮想 IP アドレスが割り振られるネットワーク範囲のサイズ。未設定の場合、デフォルト値の23が使用されます。KUBERNETES_VERSION: クラスタの Kubernetes バージョン(1.26.5-gke.2100など)。構成可能な Kubernetes バージョンを一覧表示するには、クラスタで使用可能な Kubernetes バージョンを一覧表示するをご覧ください。MACHINE_TYPE: ノードプールのワーカーノードのマシンタイプ。構成可能な内容については、使用可能なマシンタイプをご覧ください。NODE_POOL_NAME: ノードプールの名前。NUMBER_OF_WORKER_NODES: ノードプールでプロビジョニングするワーカーノードの数。TAINTS: このノードプールのノードに適用する taint。このフィールドは省略できます。LABELS: このノードプールのノードに適用するラベル。Key-Value ペアのリストが含まれています。このフィールドは省略可能です。GPU_PARTITION_SCHEME: GPU ワークロードを実行している場合は、GPU パーティショニング スキーマ。このフィールドは省略可能です。例:mixed-2このフィールドが設定されていない場合、GPU はパーティショニングされません。使用可能なマルチインスタンス GPU(MIG)プロファイルの詳細については、サポートされている MIG プロファイルをご覧ください。
Terraform を使用して新しい標準クラスタを適用します。
terraform apply
標準クラスタの作成が完了するまでに最大 60 分かかることがあります。