Google Distributed Cloud(GDC)エアギャップを使用すると、GDC 上の GKE を使用して、Kubernetes クラスタを作成した後に管理できます。このサービスを使用すると、次のワークフローで進化するコンテナ ワークロードの要件に対応し、既存のクラスタノードを維持できます。
共有クラスタをプロジェクトに関連付けて関連付けを解除する: クラスタの作成後に共有クラスタを複数のプロジェクトに関連付けたり、関連付けを解除したりして、共有クラスタのワークロードのスコープを変更します。
組織内のクラスタを表示する: 組織内のクラスタを一覧表示して、コンテナ ワークロードで使用可能なものを追跡します。
Kubernetes バージョンを一覧表示する: クラスタの Kubernetes バージョンを表示して、最新の Kubernetes リリースに対応するクラスタの機能を確認します。
更新可能なクラスタ プロパティを表示する:
Clusterカスタム リソース定義内で変更可能なプロパティを表示します。
このドキュメントは、複数のプロジェクトにまたがるクラスタでホストされているコンテナ ワークロードを管理するプラットフォーム管理者グループ内の 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 クラスタ名を確認するか、プラットフォーム管理者グループのメンバーにクラスタ名を確認します。
これらの手順では、Kubernetes クラスタ名を使用して
CLUSTER_NAMEを置き換えます。管理 API サーバーの kubeconfig ファイルにログインして生成します。
これらの手順では、管理 API サーバーの kubeconfig パスを使用して
MANAGEMENT_API_SERVERを置き換えます。
プロジェクト階層でクラスタを移動する
プロジェクトは、サービス インスタンスの論理的なグループ化を提供します。共有 Kubernetes クラスタを GDC プロジェクト階層に追加したり、そこから削除したりして、サービスを適切にグループ化できます。標準クラスタは単一のプロジェクトにのみスコープ設定されているため、プロジェクト階層内で移動することはできません。
プロジェクトを共有クラスタに接続する
GDC コンソールから共有クラスタを作成する場合は、コンテナ ワークロードを正常にデプロイする前に、少なくとも 1 つのプロジェクトを関連付ける必要があります。既存のクラスタにプロジェクトを追加する必要がある場合は、次の手順を行います。
コンソール
- ナビゲーション メニューで、[Kubernetes Engine] > [クラスタ] を選択します。
- クラスタのリストで、クラスタ名をクリックして [クラスタの詳細] ページを開きます。
- [プロジェクトを接続] を選択します。
- 使用可能なプロジェクトのリストで、クラスタにアタッチするプロジェクト名をクリックします。
- [保存] をクリックします。
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
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を作成する必要があります。
新しいプロジェクト バインディングを適用します。
terraform apply
共有クラスタからプロジェクトを切り離す
プロジェクトを共有クラスタから切り離すと、クラスタで実行されているワークロードの削除など、大きな変更が発生する可能性があります。プロジェクトを共有クラスタから切り離す前に、その結果をよく理解してください。
既存の共有クラスタからプロジェクトを切り離すには、次の操作を行います。
コンソール
- ナビゲーション メニューで、[Kubernetes Engine] > [クラスタ] を選択します。
- クラスタのリストでクラスタをクリックして、[クラスタの詳細] ページを開きます。
- クラスタから切り離すプロジェクトの delete [切り離し] をクリックします。
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_NAMEPROJECT_BINDING_RESOURCE_NAMEは、削除するプロジェクト バインディングの Terraform リソース名(CLUSTER_NAME-PROJECT_NAME-bindingなど)に置き換えます。この名前は、Terraform がプロジェクト バインディングを識別するために使用するもので、GDC では使用されません。
プロジェクトまたは組織内のすべてのクラスタを表示する
プロジェクトまたは組織で使用可能なすべての Kubernetes クラスタ(ステータス、Kubernetes バージョン、その他の詳細を含む)を表示できます。
Kubernetes クラスタはゾーンリソースであるため、ゾーンごとにクラスタを一覧表示することしかできません。
コンソール
プロジェクト選択ツールで、プロジェクトまたは組織を選択します。
Standard クラスタはプロジェクト スコープで、共有クラスタは組織スコープです。適切なスコープを選択して、適切な Kubernetes クラスタタイプを表示します。
ナビゲーション メニューで、[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。共有クラスタの場合は、platformNamespace を使用します。標準クラスタの場合は、クラスタのプロジェクト 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_SERVERMANAGEMENT_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 のすべてのプロパティが、クラスタのプロビジョニング後に更新できるわけではありません。更新可能なプロパティを表示する手順は次のとおりです。
コンソール
ナビゲーション メニューで、[Kubernetes Engine] > [クラスタ] を選択します。
Kubernetes クラスタのリストで、クラスタ名をクリックしてプロパティを表示します。
編集可能なプロパティには、edit [編集] アイコンが表示されます。
API
Cluster仕様のプロパティのリストと、各プロパティに対応する有効な値を表示します。kubectl explain clusters.cluster.gdc.goog.spec \ --kubeconfig MANAGEMENT_API_SERVERMANAGEMENT_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 を使用します。たとえば、ノードプールのサイズを変更できます。