ノードプールを管理する

Google Distributed Cloud(GDC)エアギャップ Kubernetes クラスタを作成すると、指定したノード数とノードタイプによって、クラスタの最初のノードプールが作成されます。既存のクラスタのコンピューティング要件が変更された場合は、次のノードプール タスクを実行できます。

クラスタ内のノードプールの詳細については、 ノードについてをご覧ください。

このドキュメントは、組織内の Kubernetes クラスタの管理を担当する、アプリケーション オペレータ グループのアプリケーション デベロッパーと、プラットフォーム管理者グループの IT 管理者を対象としています。詳細については、 GDC エアギャップ ドキュメントの対象読者をご覧ください。

始める前に

このドキュメントの手順を完了するには、必要な権限をリクエストして環境を準備する必要があります。

IAM ロールをリクエストする

Kubernetes クラスタ内のノードプールを管理するために必要な権限を取得するには、特定のロールが必要です。必要なロールは、組織スコープの共有クラスタまたはプロジェクト スコープの Standard クラスタのどちらを使用しているかによって異なります。詳細については、 Kubernetes クラスタの構成をご覧ください。

共有クラスタのロール

共有クラスタのノードプールを作成、削除、編集、表示するには、組織 IAM 管理者に連絡してユーザー クラスタ管理者user-cluster-admin)ロールをリクエストしてください。このロールは名前空間にバインドされていません。

Standard クラスタのロール

プロジェクト IAM 管理者に連絡して、次のロールをリクエストしてください。

  • Standard クラスタ管理者standard-cluster-admin): Standard クラスタのノードプールを作成、削除、編集、表示します。

  • クラスタ デベロッパーcluster-developer): Standard クラスタを作成、削除、編集、表示します。このロールは、GDC コンソールからクラスタのノードプールの詳細を表示するために必要です。

これらのロールは、プロジェクトの名前空間にバインドされています。

環境を準備する

API を使用して Kubernetes クラスタ に対してコマンドを実行するには、次のリソースが必要です。

  • Kubernetes クラスタ名を確認するか、プラットフォーム管理者グループのメンバーにクラスタ名を確認します。

  • Kubernetes クラスタ名を使用して、この手順の KUBERNETES_CLUSTER_NAME を置き換えます。

  • ログインして生成 Kubernetes クラスタの管理 API サーバー kubeconfig ファイル。

  • 管理 API サーバーの kubeconfig パスを使用して、この手順の MANAGEMENT_API_SERVER を置き換えます。

ノードプールを追加する

既存の Kubernetes クラスタにノードプールを追加する手順は次のとおりです。

コンソール

  1. プロジェクト選択ツールで、プロジェクトまたは組織を選択します。

    Standard クラスタはプロジェクト スコープ、共有クラスタは組織スコープです。適切なスコープを選択して、適切な Kubernetes クラスタタイプを表示します。

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

  3. クラスタリストでクラスタをクリックします。[クラスタの詳細] ページが表示されます。

  4. [**ノードプール > ノードプールを追加**] を選択します。

  5. ノードプールの名前を割り当てます。ノードプールの作成後に名前を変更することはできません。

  6. ノードプールに作成するワーカーノードの数を指定します。

  7. ワークロードの要件に最も適したマシンクラスを選択します。マシンクラスは次の設定で表示されます。

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

API

  1. インタラクティブ エディタを使用して、kubectl CLI で Cluster カスタム リソース仕様を開きます。

    kubectl edit clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig MANAGEMENT_API_SERVER
    

    次のように置き換えます。

    • KUBERNETES_CLUSTER_NAME: クラスタの名前。
    • KUBERNETES_CLUSTER_NAMESPACE: クラスタの名前空間。共有クラスタの場合は、platform 名前空間を使用します。Standard クラスタの場合は、クラスタのプロジェクトの名前空間を使用します。
    • MANAGEMENT_API_SERVER: Kubernetes クラスタがホストされているゾーン API サーバーの kubeconfig パス。
  2. nodePools セクションに新しいエントリを追加します。

    nodePools:
    # Several lines of code are omitted here.
    - machineTypeName: MACHINE_TYPE
      name: NODE_POOL_NAME
      nodeCount: NUMBER_OF_WORKER_NODES
      taints: TAINTS
      labels: LABELS
      acceleratorOptions:
        gpuPartitionScheme: GPU_PARTITION_SCHEME
    

    次のように置き換えます。

    • 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 プロファイルをご覧ください。
  3. ファイルを保存し、エディタを終了します。

ノードプールを表示する

Kubernetes クラスタ内の既存のノードプールを表示する手順は次のとおりです。

コンソール

  1. プロジェクト選択ツールで、プロジェクトまたは組織を選択します。

    Standard クラスタはプロジェクト スコープ、共有クラスタは組織スコープです。適切なスコープを選択して、適切な Kubernetes クラスタタイプを表示します。

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

  3. クラスタリストでクラスタをクリックします。[クラスタの詳細] ページが表示されます。

  4. [ノードプール] を選択します。

クラスタで実行されているノードプールのリストが表示されます。このページからクラスタのノードプールを管理できます。

API

  • 特定の Kubernetes クラスタのノードプールを表示します。

    kubectl get clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        -o json --kubeconfig MANAGEMENT_API_SERVER | \
        jq .status.workerNodePoolStatuses
    

    次のように置き換えます。

    • KUBERNETES_CLUSTER_NAME: クラスタの名前。
    • KUBERNETES_CLUSTER_NAMESPACE: クラスタの名前空間。共有クラスタの場合は、platform 名前空間を使用します。Standard クラスタの場合は、クラスタのプロジェクトの名前空間を使用します。

    出力は次のようになります。

    [
      {
        "conditions": [
          {
            "lastTransitionTime": "2023-08-31T22:16:17Z",
            "message": "",
            "observedGeneration": 2,
            "reason": "NodepoolReady",
            "status": "True",
            "type": "Ready"
          },
          {
            "lastTransitionTime": "2023-08-31T22:16:17Z",
            "message": "",
            "observedGeneration": 2,
            "reason": "ReconciliationCompleted",
            "status": "False",
            "type": "Reconciling"
          }
        ],
        "name": "worker-node-pool",
        "readyNodes": 3,
        "readyTimestamp": "2023-08-31T18:59:46Z",
        "reconcilingNodes": 0,
        "stalledNodes": 0,
        "unknownNodes": 0
      }
    ]
    

ノードプールのサイズを変更する

プールをスケールアップまたはスケールダウンすることで、Kubernetes クラスタ内のノードプールのサイズを手動で変更できます。ノードプールをスケールダウンするときに、削除する特定のノードを選択することはできません。

既存のクラスタでノードプールをスケーリングする手順は次のとおりです。

コンソール

  1. プロジェクト選択ツールで、プロジェクトまたは組織を選択します。

    Standard クラスタはプロジェクト スコープ、共有クラスタは組織スコープです。適切なスコープを選択して、適切な Kubernetes クラスタタイプを表示します。

  2. ダッシュボードで、編集するクラスタが存在するプロジェクトを選択します。

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

  4. ノードプールが関連付けられているクラスタ名を選択します。[クラスタの詳細] ページが表示されます。

  5. [ノードプール] タブをクリックします。

  6. サイズを変更するノード プールの 編集アイコンを選択します。[ノードプールの編集] プロンプトが表示されます。

  7. [ノード数] フィールドを更新して、ノードプールに必要な新しいノード数を反映させます。ワークロードの要件に合わせてノード数を増減できます。

  8. [保存] をクリックします。

  9. クラスタの [ノードプール] タブに戻り、サイズ変更されたノードプールのステータスが Ready で、ノード数が正しいことを確認します。ノードプールが指定したサイズにスケーリングされるまでに数分かかることがあります。

    コンソールを使用して、ノードプールの準備ができていることを確認します。

API

  1. インタラクティブ エディタを使用して、kubectl CLI で Cluster カスタム リソース仕様を開きます。

    kubectl edit clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig MANAGEMENT_API_SERVER
    

    次のように置き換えます。

    • KUBERNETES_CLUSTER_NAME: ノードプールをホストするクラスタの名前。
    • KUBERNETES_CLUSTER_NAMESPACE: クラスタの名前空間。共有クラスタの場合は、platform 名前空間を使用します。Standard クラスタの場合は、クラスタのプロジェクトの名前空間を使用します。
    • MANAGEMENT_API_SERVER: Kubernetes クラスタがホストされているゾーン API サーバーの kubeconfig パス。
  2. サイズを変更するノードプールの nodeCount フィールドを更新します。

    nodePools:
    # Several lines of code are omitted here.
    - machineTypeName: n2-standard-2-gdc
      name: nodepool-1
      nodeCount: NUMBER_OF_WORKER_NODES
    

    NUMBER_OF_WORKER_NODES を、ノードプールにプロビジョニングするワーカーノードの更新後の数に置き換えます。

  3. ファイルを保存し、エディタを終了します。

  4. ノードプールの構成を確認して、ノードのスケーリングが完了したことを確認します。

    kubectl get clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \
        -n KUBERNETES_CLUSTER_NAMESPACE -o json \
        --kubeconfig MANAGEMENT_API_SERVER | jq .status.workerNodePoolStatuses
    

    readyNodes の数が、ノードプールに設定したノード数を反映していることを確認します。ノードプールが指定したサイズにスケーリングされるまでに数分かかることがあります。

ノードプールを削除する

ノードプールを削除すると、ノードとそのノードへのルートが削除されます。これらのノードは、実行中のポッドを強制排除して再スケジュールします。ポッドに特定のノードセレクタが設定されており、クラスタ内の他のノードが条件を満たさない場合、そのポッドはスケジュールできない状態のままになることがあります。

ノードプールを削除する前に、クラスタに 3 つ以上のワーカーノードがあることを確認してください。これにより、クラスタに十分なコンピューティング スペースを確保して効果的に実行できます。

ノードプールを削除する手順は次のとおりです。

コンソール

  1. プロジェクト選択ツールで、プロジェクトまたは組織を選択します。

    Standard クラスタはプロジェクト スコープ、共有クラスタは組織スコープです。適切なスコープを選択して、適切な Kubernetes クラスタタイプを表示します。

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

  3. 削除するノードプールをホストしているクラスタをクリックします。

  4. [ノードプール] を選択します。

  5. 削除するノード プールの横にある [**削除**] をクリックします。

API

  1. インタラクティブ エディタを使用して、kubectl CLI で Cluster カスタム リソース仕様を開きます。

    kubectl edit clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig MANAGEMENT_API_SERVER
    

    次のように置き換えます。

    • KUBERNETES_CLUSTER_NAME: クラスタの名前。
    • KUBERNETES_CLUSTER_NAMESPACE: クラスタの名前空間。共有クラスタの場合は、platform 名前空間を使用します。Standard クラスタの場合は、クラスタのプロジェクトの名前空間を使用します。
    • MANAGEMENT_API_SERVER: Kubernetes クラスタがホストされているゾーン API サーバーの kubeconfig パス。
  2. nodePools セクションからノードプール エントリを削除します。たとえば、次のスニペットでは、machineTypeNamenamenodeCount フィールドを削除する必要があります。

    nodePools:
    # Several lines of code are omitted here.
    - machineTypeName: n2-standard-2-gdc
      name: nodepool-1
      nodeCount: 3
    

    削除するノードプールのすべてのフィールドを削除してください。

  3. ファイルを保存し、エディタを終了します。

次のステップ