Kubernetes クラスタを維持する

Google Distributed Cloud(GDC)エアギャップを使用すると、GDC 上の GKE を使用して、Kubernetes クラスタを作成した後に管理できます。このサービスを使用すると、次のワークフローでコンテナ ワークロードの要件の変化に対応し、既存のクラスタノードを維持できます。

このドキュメントは、複数のプロジェクトにまたがるクラスタでホストされているコンテナ ワークロードを管理するプラットフォーム管理者グループ内の IT 管理者と、単一のプロジェクト内でアプリケーション ワークロードの作成を担当するアプリケーション オペレーター グループ内のデベロッパーを対象としています。詳細については、GDC エアギャップの対象ユーザーに関するドキュメントをご覧ください。

始める前に

このドキュメントのタスクを完了するには、次のリソースとロールが必要です。

  • 共有 Kubernetes クラスタでノードプールを表示して管理するには、組織の IAM 管理者に次のロールの付与を依頼してください。

    • ユーザー クラスタ管理者(user-cluster-admin
    • ユーザー クラスタ ノード閲覧者(user-cluster-node-viewer

    これらのロールはプロジェクト Namespace にバインドされていません。

  • 標準 Kubernetes クラスタでノードプールを表示して管理するには、組織の IAM 管理者に Standard Cluster 管理者(standard-cluster-admin)ロールの付与を依頼してください。このロールはプロジェクトの名前空間にバインドされます。

  • Kubernetes クラスタに対してコマンドを実行するには、次のリソースがあることを確認してください。

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

    • まだ kubeconfig ファイルがない場合は、ログインして Kubernetes クラスタの kubeconfig ファイルを生成します。

    • これらの手順で KUBERNETES_CLUSTER_KUBECONFIG を置き換えるには、Kubernetes クラスタの kubeconfig パスを使用します。

  • ゾーン API サーバーに対してコマンドを実行するには、クラスタをホストするゾーン API サーバーの kubeconfig ファイルを生成します。詳しくは、ログインするをご覧ください。環境変数 MANAGEMENT_API_SERVER を kubeconfig パスに設定します。

プロジェクト階層内のクラスタを移動する

プロジェクトは、サービス インスタンスの論理グループ化を提供します。共有 Kubernetes クラスタを GDC プロジェクト階層に追加または削除して、サービスを適切にグループ化できます。標準クラスタは単一のプロジェクトにのみスコープ設定されているため、プロジェクト階層内で移動することはできません。

プロジェクトを共有クラスタに接続する

GDC コンソールから共有クラスタを作成する場合は、コンテナ ワークロードを正常にデプロイする前に、少なくとも 1 つのプロジェクトを関連付ける必要があります。既存のクラスタにプロジェクトを追加する必要がある場合は、次の手順を行います。

コンソール

  1. ナビゲーション メニューで、[Kubernetes Engine] > [クラスタ] を選択します。
  2. クラスタのリストで、クラスタ名をクリックして [クラスタの詳細] ページを開きます。
  3. [プロジェクトを接続] を選択します。
  4. 使用可能なプロジェクトのリストで、クラスタにアタッチするプロジェクト名をクリックします。
  5. [保存] をクリックします。

API

  • クラスタの新しい ProjectBinding カスタム リソースを作成します。

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
    apiVersion: resourcemanager.gdc.goog/v1
    kind: ProjectBinding
    metadata:
      name: CLUSTER_NAME-PROJECT_NAME
      namespace: platform
      labels:
        resourcemanager.gdc.goog/projectbinding-for-user-project: "true"
    spec:
      clusterRef:
       name: CLUSTER_NAME
      selector:
        nameSelector:
          matchNames:
          - PROJECT_NAME
    EOF
    

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

    • MANAGEMENT_API_SERVER: ゾーン API サーバーの kubeconfig パス。
    • CLUSTER_NAME: クラスタの名前。
    • PROJECT_NAME: クラスタをバインドするプロジェクトの名前。各 ProjectBinding リソースは 1 つのクラスタにのみマッピングできます。プロジェクトで複数のクラスタへのアクセスが必要な場合は、クラスタごとに一意の ProjectBinding を作成する必要があります。

Terraform

  1. Terraform 構成ファイルに次のコード スニペットを挿入して、ProjectBinding カスタム リソースを作成します。

    provider "kubernetes" {
      config_path = "MANAGEMENT_API_SERVER"
    }
    
    resource "kubernetes_manifest" "PROJECT_BINDING_RESOURCE_NAME" {
      manifest = {
        "apiVersion" = "resourcemanager.gdc.goog/v1"
        "kind" = "ProjectBinding"
        "metadata" = {
          "name" = "CLUSTER_NAME-PROJECT_NAME"
          "namespace" = "platform"
          "labels" = {
            "resourcemanager.gdc.goog/projectbinding-for-user-project" = "true"
          }
        }
        "spec" = {
          "clusterRef" = {
            "name" = "CLUSTER_NAME"
          }
          "selector" = {
            "nameSelector" = {
              "matchNames" = [
                "PROJECT_NAME",
              ]
            }
          }
        }
      }
    }
    

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

    • MANAGEMENT_API_SERVER: ゾーン API サーバーの kubeconfig パス。
    • PROJECT_BINDING_RESOURCE_NAME: プロジェクト バインディングの Terraform リソース名(CLUSTER_NAME-PROJECT_NAME-binding など)。この名前は、Terraform がプロジェクト バインディングを識別するために使用するもので、GDC では使用されません。
    • CLUSTER_NAME: クラスタの名前。各 ProjectBinding リソースは 1 つのクラスタにのみマッピングできます。プロジェクトで複数のクラスタへのアクセスが必要な場合は、クラスタごとに一意の ProjectBinding を作成する必要があります。
    • PROJECT_NAME: バインドするプロジェクトの名前。各 ProjectBinding リソースは 1 つのクラスタにのみマッピングできます。プロジェクトで複数のクラスタへのアクセスが必要な場合は、クラスタごとに一意の ProjectBinding を作成する必要があります。
  2. 新しいプロジェクト バインディングを適用します。

    terraform apply
    

共有クラスタからプロジェクトを切り離す

プロジェクトを共有クラスタから切り離すと、クラスタで実行されているワークロードの削除など、大きな変更が発生する可能性があります。プロジェクトを共有クラスタから切り離す前に、その影響を必ず理解してください。

既存の共有クラスタからプロジェクトを切り離すには、次の操作を行います。

コンソール

  1. ナビゲーション メニューで、[Kubernetes Engine] > [クラスタ] を選択します。
  2. クラスタのリストでクラスタをクリックして、[クラスタの詳細] ページを開きます。
  3. クラスタから切り離すプロジェクトの [切り離し] をクリックします。

API

  • プロジェクトとクラスタをリンクする ProjectBinding リソースを削除します。

    kubectl --kubeconfig MANAGEMENT_API_SERVER delete projectbinding \
        CLUSTER_NAME-PROJECT_NAME -n platform
    

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

    • MANAGEMENT_API_SERVER: ゾーン API サーバーの kubeconfig パス。
    • CLUSTER_NAME: クラスタの名前。
    • PROJECT_NAME: クラスタから切り離すプロジェクトの名前。

Terraform

  • プロジェクト バインディング リソースを削除します。

    terraform destroy -target kubernetes_manifest.PROJECT_BINDING_RESOURCE_NAME
    

    PROJECT_BINDING_RESOURCE_NAME は、削除するプロジェクト バインディングの Terraform リソース名(CLUSTER_NAME-PROJECT_NAME-binding など)に置き換えます。この名前は、Terraform がプロジェクト バインディングを識別するために使用するもので、GDC では使用されません。

組織内のすべてのクラスタを表示する

組織で使用可能なすべての Kubernetes クラスタ(ステータス、Kubernetes バージョン、その他の詳細を含む)を表示できます。

Kubernetes クラスタはゾーン リソースであるため、ゾーンごとにクラスタを一覧表示することしかできません。

コンソール

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

    組織内の利用可能なすべての共有クラスタとそのステータスなどの情報が表示されます。

    組織内の各共有クラスタのステータスやその他の情報が表示されるクラスタの詳細ページ。

gdcloud

  • 組織内のゾーンで使用可能な共有クラスタを一覧表示します。

    gdcloud clusters list
    

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

    CLUSTERREF.NAME   READINESS.STATE   TYPE   CURRENTVERSION.USERCLUSTERVERSION     CURRENTVERSION.SUPPORT.STATUS
    user-vm-1         Ready             user   1.15.0-gdch.394225-1.28.15-gke.1200   In Support
    user-vm-2         Ready             user   1.15.0-gdch.394225-1.29.12-gke.800    In Support
    

API

  • 組織内のゾーンで使用可能な Kubernetes クラスタを一覧表示します。

    kubectl get clusters.cluster.gdc.goog -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig MANAGEMENT_API_SERVER
    

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

    • MANAGEMENT_API_SERVER: ゾーン API サーバーの kubeconfig パス。
    • KUBERNETES_CLUSTER_NAMESPACE: クラスタの Namespace。共有クラスタの場合は、platform Namespace を使用します。標準クラスタの場合は、クラスタのプロジェクト Namespace を使用します。

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

    NAME        STATE     K8S VERSION
    user-vm-1   Running   1.25.10-gke.2100
    user-test   Running   1.26.5-gke.2100
    

クラスタで使用可能な Kubernetes バージョンを一覧表示する

GDC ゾーンで使用可能な Kubernetes バージョンを一覧表示して、クラスタでアクセスできる Kubernetes 機能を検証できます。

  • ゾーンで使用可能な 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
    

更新可能なプロパティを表示する

Kubernetes クラスタごとに、作成後に変更できるプロパティのセットがあります。変更できるのは、Cluster カスタム リソースの spec にある変更可能なプロパティのみです。spec のすべてのプロパティが、クラスタのプロビジョニング後に更新できるわけではありません。更新可能なプロパティを表示するには、次の操作を行います。

コンソール

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

  2. Kubernetes クラスタのリストで、クラスタ名をクリックしてプロパティを表示します。

  3. 編集可能なプロパティには、 [編集] アイコンが表示されます。

API

  • Cluster 仕様のプロパティのリストと、各プロパティに対応する有効な値を表示します。

    kubectl explain clusters.cluster.gdc.goog.spec \
        --kubeconfig MANAGEMENT_API_SERVER
    

    MANAGEMENT_API_SERVER は、ゾーン API サーバーの kubeconfig パスに置き換えます。

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

    KIND:     Cluster
    VERSION:  cluster.gdc.goog/v1
    
    RESOURCE: spec <Object>
    
    DESCRIPTION:
        <empty>
    
    FIELDS:
      clusterNetwork    <Object>
        The cluster network configuration. If unset, the default configurations
        with pod and service CIDR sizes are used. Optional. Mutable.
    
      initialVersion    <Object>
        The GDC air-gapped version information of the user cluster during cluster creation.
        Optional. Default to use the latest applicable version. Immutable.
    
      loadBalancer  <Object>
        The load balancer configuration. If unset, the default configuration with
        the ingress service IP address size is used. Optional. Mutable.
    
      nodePools <[]Object>
        The list of node pools for the cluster worker nodes. Optional. Mutable.
    
      releaseChannel    <Object>
        The release channel a cluster is subscribed to. When a cluster is
        subscribed to a release channel, GDC maintains the cluster versions for
        users. Optional. Mutable.
    

    これらの設定を更新するには、GDC コンソールまたは kubectl CLI を使用します。たとえば、ノードプールのサイズを変更できます。

次のステップ