コンテナ ワークロードを実行するクラスタを作成する

コンテナ ワークロードのデプロイを可能にする 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 クラスタを作成する手順は次のとおりです。

コンソール

  1. ナビゲーション メニューで、[Kubernetes Engine] > [クラスタ] を選択します。

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

  3. [名前] フィールドに、クラスタの名前を指定します。

  4. クラスタの Kubernetes バージョンを選択します。

  5. クラスタを作成するゾーンを選択します。

  6. [プロジェクトを接続] をクリックし、クラスタに接続する既存のプロジェクトを選択します。オンにして [保存] をクリックします。クラスタの作成後に、プロジェクトの詳細ページからプロジェクトを関連付けたり、関連付けを解除したりできます。コンテナ ワークロードをデプロイする前に、クラスタにプロジェクトを関連付ける必要があります。

    コンソールを使用してクラスタを作成します。

  7. [次へ] をクリックします。

  8. クラスタのネットワーク設定を構成します。クラスタの作成後にこれらのネットワーク設定を変更することはできません。Kubernetes クラスタでサポートされているデフォルトのインターネット プロトコルは、インターネット プロトコル バージョン 4(IPv4)のみです。

    1. 専用のロードバランサ ノードを作成する場合は、作成するノードの数を入力します。デフォルトでは、ノードはゼロになり、ロードバランサ トラフィックはコントロール ノードを通過します。

    2. 使用するサービス CIDR(クラスレス ドメイン間ルーティング)を選択します。ロードバランサなどのデプロイされたサービスには、この範囲から IP アドレスが割り当てられます。

    3. 使用する Pod CIDR を選択します。クラスタは、この範囲から Pod と VM に IP アドレスを割り当てます。

    4. [次へ] をクリックします。

  9. クラスタ用に自動生成されたデフォルトのノードプールの詳細を確認します。 [編集] をクリックして、デフォルトのノードプールを変更します。

  10. 追加のノードプールを作成するには、[ノードプールを追加] を選択します。デフォルトのノードプールを編集するときや、新しいノードプールを追加するときに、次のオプションを使用してカスタマイズします。

    1. ノードプールに名前を割り当てます。ノードプールの作成後に名前を変更することはできません。
    2. ノードプール内に作成するワーカーノードの数を指定します。
    3. ワークロードの要件に最も適したマシンクラスを選択します。次の設定のリストを表示します。

      • マシンタイプ
      • CPU
      • メモリ
    4. [保存] をクリックします。

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

API

API を直接使用して新しいクラスタを作成するには、カスタム リソースを GDC インスタンスに適用します。

  1. 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 プロファイルをご覧ください。
  2. カスタム リソースを GDC インスタンスに適用します。

    kubectl apply -f cluster.yaml --kubeconfig MANAGEMENT_API_SERVER
    

    MANAGEMENT_API_SERVER は、ゾーン API サーバーの kubeconfig パスに置き換えます。ターゲット ゾーンの API サーバーの kubeconfig ファイルをまだ生成していない場合は、ログインで詳細を確認してください。

Terraform

  1. 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 プロファイルをご覧ください。
  2. 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 マシンを割り当ててください。