コンテナ ワークロードのデプロイを可能にする Kubernetes クラスタを作成します。クラスタはゾーン リソースであり、複数のゾーンにまたがることはできません。マルチゾーン デプロイでクラスタを運用するには、各ゾーンにクラスタを手動で作成する必要があります。
始める前に
Kubernetes クラスタの作成に必要な権限を取得するには、組織の IAM 管理者にユーザー クラスタ管理者ロール(user-cluster-admin
)を付与するよう依頼してください。このロールは名前空間にバインドされていません。
Google Distributed Cloud(GDC)エアギャップには、Kubernetes クラスタに対して次の上限があります。
- 組織あたり 16 個のクラスタ
- クラスタあたり 42 個のワーカーノード、最小 3 個のワーカーノード
- クラスタあたり 4,620 個の Pod
- ノードあたり 110 Pod
Pod CIDR ブロックを構成する
クラスタは、IP アドレスを割り当てるときに次のロジックに従います。
- Kubernetes は、256 個のアドレスで構成される /24 CIDR ブロックを各ノードに割り当てます。この量は、ユーザー クラスタのノードあたりのデフォルトの最大 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
必要なノード数に基づいて、ユーザー クラスタに構成する必要な 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 クラスタの作成
Kubernetes クラスタを作成する手順は次のとおりです。
コンソール
ナビゲーション メニューで、[Kubernetes Engine] > [クラスタ] を選択します。
[クラスタを作成] をクリックします。
[名前] フィールドに、クラスタの名前を指定します。
クラスタの Kubernetes バージョンを選択します。
クラスタを作成するゾーンを選択します。
[プロジェクトを接続] をクリックし、クラスタに接続する既存のプロジェクトを選択します。オンにして [保存] をクリックします。クラスタの作成後に、プロジェクトの詳細ページからプロジェクトを関連付けたり、関連付けを解除したりできます。コンテナ ワークロードをデプロイする前に、クラスタにプロジェクトを関連付ける必要があります。
[次へ] をクリックします。
クラスタのネットワーク設定を構成します。クラスタの作成後にこれらのネットワーク設定を変更することはできません。Kubernetes クラスタでサポートされているデフォルトのインターネット プロトコルは、インターネット プロトコル バージョン 4(IPv4)のみです。
専用のロードバランサ ノードを作成する場合は、作成するノードの数を入力します。デフォルトでは、ノードはゼロになり、ロードバランサ トラフィックはコントロール ノードを通過します。
使用するサービス CIDR(クラスレス ドメイン間ルーティング)を選択します。ロードバランサなどのデプロイされたサービスには、この範囲から IP アドレスが割り当てられます。
使用する Pod CIDR を選択します。クラスタは、この範囲から Pod と VM に IP アドレスを割り当てます。
[次へ] をクリックします。
クラスタ用に自動生成されたデフォルトのノードプールの詳細を確認します。edit [編集] をクリックして、デフォルトのノードプールを変更します。
追加のノードプールを作成するには、[ノードプールを追加] を選択します。デフォルトのノードプールを編集するときや、新しいノードプールを追加するときに、次のオプションを使用してカスタマイズします。
- ノードプールに名前を割り当てます。ノードプールの作成後に名前を変更することはできません。
- ノードプール内に作成するワーカーノードの数を指定します。
ワークロードの要件に最も適したマシンクラスを選択します。次の設定のリストを表示します。
- マシンタイプ
- CPU
- メモリ
[保存] をクリックします。
[作成] をクリックしてクラスタを作成します。
API
API を直接使用して新しいクラスタを作成するには、カスタム リソースを GDC インスタンスに適用します。
Cluster
カスタム リソースを作成し、cluster.yaml
などの YAML ファイルとして保存します。apiVersion: cluster.gdc.goog/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: platform spec: clusterNetwork: podCIDRSize: POD_CIDR serviceCIDRSize: SERVICE_CIDR initialVersion: kubernetesVersion: KUBERNETES_VERSION loadBalancer: ingressServiceIPSize: LOAD_BALANCER_POOL_SIZE 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 によって作成されたクラスタ用に予約されています。POD_CIDR
: Pod の仮想 IP アドレスが割り当てられるネットワーク範囲のサイズ。未設定の場合、デフォルト値の21
が使用されます。SERVICE_CIDR
: サービス仮想 IP アドレスが割り振られるネットワーク範囲のサイズ。未設定の場合、デフォルト値の23
が使用されます。KUBERNETES_VERSION
: クラスタの Kubernetes バージョン(1.26.5-gke.2100
など)。構成可能な Kubernetes バージョンを一覧表示するには、クラスタで使用可能な Kubernetes バージョンを一覧表示するをご覧ください。LOAD_BALANCER_POOL_SIZE
: ロードバランサ サービスで使用される重複しない IP アドレスプールのサイズ。設定されていない場合は、デフォルト値の20
が使用されます。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_SERVER
MANAGEMENT_API_SERVER
は、ゾーン API サーバーの kubeconfig パスに置き換えます。ターゲット ゾーンの API サーバーの kubeconfig ファイルをまだ生成していない場合は、ログインで詳細を確認してください。
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" = "platform" } "spec" = { "clusterNetwork" = { "podCIDRSize" = "POD_CIDR" "serviceCIDRSize" = "SERVICE_CIDR" } "initialVersion" = { "kubernetesVersion" = "KUBERNETES_VERSION" } "loadBalancer" = { "ingressServiceIPSize" = "LOAD_BALANCER_POOL_SIZE" } "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 によって作成されたクラスタ用に予約されています。POD_CIDR
: Pod の仮想 IP アドレスが割り当てられるネットワーク範囲のサイズ。未設定の場合、デフォルト値の21
が使用されます。SERVICE_CIDR
: サービス仮想 IP アドレスが割り振られるネットワーク範囲のサイズ。未設定の場合、デフォルト値の23
が使用されます。KUBERNETES_VERSION
: クラスタの Kubernetes バージョン(1.26.5-gke.2100
など)。構成可能な Kubernetes バージョンを一覧表示するには、クラスタで使用可能な Kubernetes バージョンを一覧表示するをご覧ください。LOAD_BALANCER_POOL_SIZE
: ロードバランサ サービスで使用される重複しない IP アドレスプールのサイズ。設定されていない場合は、デフォルト値の20
が使用されます。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 を使用して新しい Kubernetes クラスタを適用します。
terraform apply
クラスタで使用可能な Kubernetes バージョンを一覧表示する
kubectl
CLI を使用して、GDC インスタンスで使用可能な Kubernetes バージョンを一覧表示できます。
kubectl get userclustermetadata.upgrade.private.gdc.goog \
-o=custom-columns=K8S-VERSION:.spec.kubernetesVersion \
--kubeconfig MANAGEMENT_API_SERVER
MANAGEMENT_API_SERVER
は、クラスタのゾーン API サーバーの kubeconfig パスに置き換えます。
出力は次のようになります。
K8S-VERSION
1.25.10-gke.2100
1.26.5-gke.2100
1.27.4-gke.500
クラスタで GPU ワークロードをサポートする
Distributed Cloud は Kubernetes クラスタの NVIDIA GPU をサポートし、GPU デバイスをユーザー ワークロードとして実行します。たとえば、AI と ML のノートブックを GPU 環境で実行することを希望する場合があります。AI ノートブックと ML ノートブックを活用する前に、クラスタが GPU デバイスをサポートしていることを確認してください。GPU マシンがプロビジョニングされているクラスタでは、GPU サポートがデフォルトで有効になっています。
クラスタは、GDC コンソールまたは API を直接使用して作成できます。関連付けられたコンテナで GPU ワークロードをサポートするように、クラスタに GPU マシンをプロビジョニングします。詳細については、Kubernetes クラスタを作成するをご覧ください。
GPU は静的に割り当てられます。最初の 4 つの GPU は、常に事前トレーニング済みの人工知能(AI)や機械学習(ML)API などのワークロード専用です。これらの GPU は Kubernetes クラスタで実行されません。残りの GPU は Kubernetes クラスタで使用できます。AI ノートブックと ML ノートブックは Kubernetes クラスタで実行されます。
AI や ML API、ノートブックなどのコンポーネントを使用できるように、適切なクラスタタイプに GPU マシンを割り当ててください。