Google Distributed Cloud(GDC)エアギャップを使用すると、GDC 上の GKE を使用して、作成後に Kubernetes クラスタを管理できます。このサービスを使用すると、進化するコンテナ ワークロードの要件に対応できます。
始める前に
Kubernetes クラスタのノードプールを表示して管理するには、次のロールが必要です。
- ユーザー クラスタ管理者(
user-cluster-admin
) - ユーザー クラスタ ノード閲覧者(
user-cluster-node-viewer
)
これらのロールは Namespace にバインドされていません。
Kubernetes クラスタに対してコマンドを実行するには、次のリソースがあることを確認してください。
Kubernetes クラスタ名を確認するか、プラットフォーム管理者にクラスタ名を確認します。
まだ Kubernetes クラスタの kubeconfig ファイルがない場合は、ログインして生成します。
これらの手順では、Kubernetes クラスタの kubeconfig パスを使用して
KUBERNETES_CLUSTER_KUBECONFIG
を置き換えます。
ノードのメンテナンスを行う
ノードの修復またはメンテナンスが必要な場合は、まずノードをメンテナンス モードにします。ノードをメンテナンス モードにすると、Pod とワークロードがドレインされ、Pod のスケジューリングからノードが除外されます。メンテナンス モードでは、Pod トラフィックが中断されるリスクなしに、ノードを操作できます。
仕組み
GDC のメンテナンス モードは、特定のノードで kubectl
cordon
と kubectl drain
を実行するのと似ています。メンテナンス モードに関連する詳細は次のとおりです。
- 指定されたノードはスケジュール不可に設定されます。このアクションは
kubectl cordon
が行う処理です。 - ノード taint が指定されたノードに追加され、ノードで Pod のスケジュールも実行もできないことが示されます。このアクションは
kubectl drain
と似ています。 - ノードが Pod の終了を待機して停止するのを防ぐために、20 分のタイムアウトが適用されます。Pod は、すべての taint を許容するよう構成されている場合、またはファイナライザが設定されている場合、停止できません。GDC クラスタはすべての Pod を終了しようとしますが、タイムアウトを超えるとノードがメンテナンス モードになります。このタイムアウトにより、実行中の Pod のアップグレードがブロックされなくなります。
- ノードで VM ベースのワークロードが実行されている場合、GDC クラスタは仮想マシン インスタンス(VMI)Pod に
NodeSelector
を適用してから、Pod を停止します。NodeSelector
は、ノードがメンテナンス モードを解除されたときに、VMI Pod が同じノードで再起動されるようにします。
ノードをメンテナンス モードにする
クラスタ構成ファイルの maintenanceBlocks
セクションで、選択したノードの IP アドレス範囲を指定して、メンテナンス モードにするノードを選択します。選択するノードは、Ready
状態で、クラスタで機能している必要があります。
ノードをメンテナンス モードにするには:
クラスタ構成ファイルを編集して、メンテナンス モードにするノードを選択します。
任意のエディタで構成ファイルを編集するか、次のコマンドを実行して、クラスタのカスタム リソースを直接編集します。
kubectl edit cluster KUBERNETES_CLUSTER_NAME \ -n KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
Kubernetes クラスタの次の項目を置き換えます。
KUBERNETES_CLUSTER_NAME
: クラスタの名前。KUBERNETES_CLUSTER_NAMESPACE
: クラスタの名前空間。KUBERNETES_CLUSTER_KUBECONFIG
: kubeconfig ファイルのパス。
クラスタ構成が適用されると、クラスタは該当するノードをメンテナンス モードにします。
クラスタ構成ファイルに
maintenanceBlocks
セクションを追加して、メンテナンス モードにするノードの単一の IP アドレスまたはアドレス範囲を指定します。次のサンプルでは、IP アドレスの範囲を指定して複数のノードを選択する方法を示します。
... metadata: name: my-cluster namespace: cluster-my-cluster spec: maintenanceBlocks: cidrBlocks: - 172.16.128.1-172.16.128.64 ...
クラスタ内のノードのステータスを取得します。
kubectl get nodes -n KUBERNETES_CLUSTER_NAME \ --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
結果は次のようになります。
NAME STATUS ROLES AGE VERSION user-gdc-01 Ready master 2d22h v1.23.5-gke.1502 user-gdc-04 Ready none 2d22h v1.23.5-gke.1502 user-gdc-05 Ready,SchedulingDisabled none 2d22h v1.23.5-gke.1502 user-gdc-06 Ready none 2d22h v1.23.5-gke.1502
ステータスが
SchedulingDisabled
の場合、ノードがメンテナンス モードであることを示します。メンテナンス モードのノード数を取得します。
kubectl get nodepools --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
レスポンスは次の出力のようになります。
NAME READY RECONCILING STALLED UNDERMAINTENANCE UNKNOWN np1 3 0 0 1 0
このサンプルの
UNDERMAINTENANCE
列は、1 つのノードがメンテナンス モードであることを示しています。クラスタでは、ノードがメンテナンス モードになると、ノードに次の taint も追加されます。
baremetal.cluster.gke.io/maintenance:NoExecute
baremetal.cluster.gke.io/maintenance:NoSchedule
ノードプールのサイズを変更する
GDC 環境の KUBERNETES クラスタでは、ワークロードの変化に合わせてノードプールのサイズを変更できます。Kubernetes クラスタのノードプールを管理するには、ユーザー クラスタ管理者(user-cluster-admin
)ロールが必要です。このロールは Namespace にバインドされていません。
既存のクラスタでノードプールをスケーリングするには、次の操作を行います。
コンソール
- ダッシュボードで、編集するクラスタが存在するプロジェクトを選択します。
- ナビゲーション メニューで、[Kubernetes Engine] > [クラスタ] を選択します。
- ノードプールが関連付けられているクラスタ名を選択します。[クラスタの詳細] ページが表示されます。
- [ノードプール] タブをクリックします。
- サイズ変更するノードプールの edit [編集] アイコンを選択します。[ノードプールの編集] プロンプトが表示されます。
[ノード数] フィールドを更新して、ノードプールに必要な新しいノード数を反映します。ワークロードの要件に合わせてノード数を増減できます。
[保存] をクリックします。
クラスタの [ノードプール] タブに戻り、サイズ変更されたノードプールが
Ready
ステータスで、ノード数が正しいことを確認します。ノードプールが指定した仕様にスケーリングされるまでに数分かかることがあります。
API
インタラクティブ エディタを使用して、
kubectl
CLI でCluster
カスタム リソース仕様を開きます。kubectl edit clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME -n platform \ --kubeconfig MANAGEMENT_API_SERVER
次のように置き換えます。
KUBERNETES_CLUSTER_NAME
: ノードプールをホストするクラスタの名前。MANAGEMENT_API_SERVER
: Kubernetes クラスタがホストされているゾーン API サーバーの kubeconfig パス。ターゲット ゾーンの API サーバーの kubeconfig ファイルをまだ生成していない場合は、ログインをご覧ください。
サイズ変更するノードプールの
nodeCount
フィールドを更新します。nodePools: ... - machineTypeName: n2-standard-2-gdc name: nodepool-1 nodeCount: NUMBER_OF_WORKER_NODES
NUMBER_OF_WORKER_NODES
は、ノードプールでプロビジョニングするワーカーノードの更新された数に置き換えます。ファイルを保存し、エディタを終了します。
ノードプールの構成を確認して、ノードのスケーリングが完了したことを確認します。
kubectl get clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME -n platform -o json \ --kubeconfig MANAGEMENT_API_SERVER | jq .status.workerNodePoolStatuses
readyNodes
の数値が、ノードプールに設定したノード数を反映していることを確認します。ノードプールが指定した仕様にスケーリングされるまでに数分かかることがあります。
プロジェクト階層内のクラスタを移動する
プロジェクトは、サービス インスタンスの論理グループを提供します。GDC プロジェクト階層で Kubernetes クラスタを追加および削除して、サービスを適切にグループ化できます。
プロジェクトをクラスタに接続する
GDC コンソールからクラスタを作成する場合は、コンテナ ワークロードを正常にデプロイする前に、少なくとも 1 つのプロジェクトを関連付ける必要があります。既存のクラスタにプロジェクトを追加する必要がある場合は、次の手順を行います。
- ナビゲーション メニューで、[Kubernetes Engine] > [クラスタ] を選択します。
- クラスタのリストでクラスタをクリックして、[クラスタの詳細] ページを開きます。
- [プロジェクトを接続] を選択します。
- プロジェクト リストから、追加する利用可能なプロジェクトを選択します。[保存] をクリックします。
クラスタからプロジェクトを切り離す
既存の Kubernetes クラスタからプロジェクトを切り離すには、次の操作を行います。
- ナビゲーション メニューで、[Kubernetes Engine] > [クラスタ] を選択します。
- クラスタのリストでクラスタをクリックして、[クラスタの詳細] ページを開きます。
クラスタから切り離すプロジェクトの [delete 切り離し] をクリックします。
組織内のすべてのクラスタを表示する
組織で使用可能なすべての Kubernetes クラスタ(ステータス、Kubernetes バージョン、その他の詳細を含む)を表示できます。Kubernetes クラスタはゾーンリソースであるため、クラスタはゾーンごとにのみ一覧表示できます。
コンソール
ナビゲーション メニューで、[Kubernetes Engine] > [クラスタ] を選択します。
組織内の利用可能なすべてのクラスタが、ステータスなどの情報とともに表示されます。
kubectl
組織内のゾーンで使用可能な Kubernetes クラスタを一覧表示します。
kubectl get clusters.cluster.gdc.goog -n platform \ --kubeconfig MANAGEMENT_API_SERVER
MANAGEMENT_API_SERVER
は、ゾーン API サーバーの kubeconfig パスに置き換えます。ターゲット ゾーンの API サーバーの kubeconfig ファイルをまだ生成していない場合は、ログインで詳細を確認してください。出力は次のようになります。
NAME STATE K8S VERSION user-vm-1 Running 1.25.10-gke.2100 user-test Running 1.26.5-gke.2100
更新可能なプロパティを表示する
Kubernetes クラスタごとに、作成後に変更できるプロパティのセットがあります。変更できるのは、Cluster
カスタム リソースの spec
にある変更可能なプロパティのみです。spec
のすべてのプロパティが、クラスタのプロビジョニング後に更新できるわけではありません。更新可能なプロパティを表示するには、次の操作を行います。
コンソール
ナビゲーション メニューで、[Kubernetes Engine] > [クラスタ] を選択します。
Kubernetes クラスタのリストで、クラスタ名をクリックしてプロパティを表示します。
編集可能なプロパティには、edit(編集)アイコンが表示されます。
kubectl
Cluster
仕様のプロパティのリストと、各プロパティに対応する有効な値を表示します。kubectl explain clusters.cluster.gdc.goog.spec \ --kubeconfig MANAGEMENT_API_SERVER
MANAGEMENT_API_SERVER
は、ゾーン API サーバーの kubeconfig パスに置き換えます。ターゲット ゾーンの 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 を使用します。たとえば、ノードプールのサイズを変更できます。
Ingress サービス IP アドレスのサイズをスケーリングする
Kubernetes クラスタを作成した後で、Ingress サービス IP アドレスのサイズをスケーリングできます。
インタラクティブ エディタを使用して、
kubectl
CLI でCluster
カスタム リソース仕様を開きます。kubectl edit clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME -n platform \ --kubeconfig MANAGEMENT_API_SERVER
次のように置き換えます。
KUBERNETES_CLUSTER_NAME
: IP アドレスを提供するクラスタの名前。MANAGEMENT_API_SERVER
: Kubernetes クラスタがホストされているゾーン API サーバーの kubeconfig パス。ターゲット ゾーンの API サーバーの kubeconfig ファイルをまだ生成していない場合は、ログインをご覧ください。
ingressServiceIPSize
フィールドを新しい IP アドレス サイズに更新します。... spec: ... loadBalancer: ingressServiceIPSize: INGRESS_SERVICE_IP_SIZE ...
INGRESS_SERVICE_IP_SIZE
は、更新された上り(内向き)サービス IP アドレスのサイズに置き換えます。ファイルを保存し、エディタを終了します。
上り(内向き)サービス IP アドレスのサイズに設定された上限はありません。リクエストした IP アドレスの数は、組織に基づいて割り当てられます。リクエストを満たせない場合、クラスタはエラーを報告します。
Kubernetes クラスタをアップグレードする
Kubernetes クラスタの自動アップグレードまたは手動アップグレードを実行できます。クラスタのアップグレード方法の詳細については、クラスタのアップグレード セクションをご覧ください。