Kubernetes クラスタを維持する

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

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

始める前に

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

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

Kubernetes クラスタのメンテナンスに必要な権限を取得するには、特定のロールが必要です。必要なロールは、組織スコープの共有クラスタとプロジェクト スコープの標準クラスタのどちらで作業しているかによって異なります。詳細については、Kubernetes クラスタの構成をご覧ください。

共有クラスタロール

共有 Kubernetes クラスタとそのリソースを表示して管理するには、実行するタスクに基づいて次のロールを付与するよう IAM 組織管理者に依頼します。

  • プロジェクト作成者(project-creator): プロジェクト リソースを作成または表示します。このロールは、共有クラスタをプロジェクトに接続するために必要です。

  • プロジェクト編集者(project-editor): プロジェクト リソースの削除、更新、表示。このロールは、プロジェクトから共有クラスタを接続解除するために必要です。

  • ユーザー クラスタ閲覧者(user-cluster-viewer): 共有クラスタとそのリソースを表示します。このロールは、管理 API サーバーでホストされている共有クラスタの管理プレーン API へのアクセス権を付与します。

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

標準クラスタロール

標準の Kubernetes クラスタとそのリソースを表示するには、IAM プロジェクト管理者に標準クラスタ閲覧者(standard-cluster-viewer)ロールを付与するよう依頼します。このロールは、管理 API サーバーでホストされている標準クラスタの管理プレーン API へのアクセス権を付与します。

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

環境を準備する

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

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

  • これらの手順では、CLUSTER_NAME を Kubernetes クラスタ名に置き換えます。

  • ログインして、管理 API サーバーの kubeconfig ファイルを生成します。

  • これらの手順では、MANAGEMENT_API_SERVER を管理 API サーバーの kubeconfig パスに置き換えます。

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

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

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

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 クラスタはゾーンリソースであるため、ゾーンごとにクラスタを一覧表示することしかできません。

コンソール

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

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

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

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

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

gdcloud

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

    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 を使用します。たとえば、ノードプールのサイズを変更できます。

次のステップ