Kubernetes クラスタを維持する

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

始める前に

Kubernetes クラスタのノードプールを表示して管理するには、次のロールが必要です。

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

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

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

  1. Kubernetes クラスタ名を確認するか、プラットフォーム管理者にクラスタ名を確認します。

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

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

ノードのメンテナンスを行う

ノードの修復またはメンテナンスが必要な場合は、まずノードをメンテナンス モードにします。ノードをメンテナンス モードにすると、Pod とワークロードがドレインされ、Pod のスケジューリングからノードが除外されます。メンテナンス モードでは、Pod トラフィックが中断されるリスクなしに、ノードを操作できます。

仕組み

GDC のメンテナンス モードは、特定のノードで kubectl cordonkubectl 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 状態で、クラスタで機能している必要があります。

ノードをメンテナンス モードにするには:

  1. クラスタ構成ファイルを編集して、メンテナンス モードにするノードを選択します。

    任意のエディタで構成ファイルを編集するか、次のコマンドを実行して、クラスタのカスタム リソースを直接編集します。

    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 ファイルのパス。

    クラスタ構成が適用されると、クラスタは該当するノードをメンテナンス モードにします。

  2. クラスタ構成ファイルに maintenanceBlocks セクションを追加して、メンテナンス モードにするノードの単一の IP アドレスまたはアドレス範囲を指定します。

    次のサンプルでは、IP アドレスの範囲を指定して複数のノードを選択する方法を示します。

    ...
    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
    spec:
      maintenanceBlocks:
        cidrBlocks:
        - 172.16.128.1-172.16.128.64
    ...
    
  3. クラスタ内のノードのステータスを取得します。

    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 の場合、ノードがメンテナンス モードであることを示します。

  4. メンテナンス モードのノード数を取得します。

    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 にバインドされていません。

既存のクラスタでノードプールをスケーリングするには、次の操作を行います。

コンソール

  1. ダッシュボードで、編集するクラスタが存在するプロジェクトを選択します。
  2. ナビゲーション メニューで、[Kubernetes Engine] > [クラスタ] を選択します。
  3. ノードプールが関連付けられているクラスタ名を選択します。[クラスタの詳細] ページが表示されます。
  4. [ノードプール] タブをクリックします。
  5. サイズ変更するノードプールの [編集] アイコンを選択します。[ノードプールの編集] プロンプトが表示されます。
  6. [ノード数] フィールドを更新して、ノードプールに必要な新しいノード数を反映します。ワークロードの要件に合わせてノード数を増減できます。

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

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

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

API

  1. インタラクティブ エディタを使用して、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 ファイルをまだ生成していない場合は、ログインをご覧ください。
  2. サイズ変更するノードプールの nodeCount フィールドを更新します。

    nodePools:
    ...
    - 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 platform -o json \
        --kubeconfig MANAGEMENT_API_SERVER | jq .status.workerNodePoolStatuses
    

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

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

プロジェクトは、サービス インスタンスの論理グループを提供します。GDC プロジェクト階層で Kubernetes クラスタを追加および削除して、サービスを適切にグループ化できます。

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

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

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

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

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

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

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

組織で使用可能なすべての Kubernetes クラスタ(ステータス、Kubernetes バージョン、その他の詳細を含む)を表示できます。Kubernetes クラスタはゾーンリソースであるため、クラスタはゾーンごとにのみ一覧表示できます。

コンソール

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

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

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

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 のすべてのプロパティが、クラスタのプロビジョニング後に更新できるわけではありません。更新可能なプロパティを表示するには、次の操作を行います。

コンソール

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

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

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

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 アドレスのサイズをスケーリングできます。

  1. インタラクティブ エディタを使用して、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 ファイルをまだ生成していない場合は、ログインをご覧ください。
  2. ingressServiceIPSize フィールドを新しい IP アドレス サイズに更新します。

    ...
    spec:
    ...
      loadBalancer:
        ingressServiceIPSize: INGRESS_SERVICE_IP_SIZE
    ...
    

    INGRESS_SERVICE_IP_SIZE は、更新された上り(内向き)サービス IP アドレスのサイズに置き換えます。

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

上り(内向き)サービス IP アドレスのサイズに設定された上限はありません。リクエストした IP アドレスの数は、組織に基づいて割り当てられます。リクエストを満たせない場合、クラスタはエラーを報告します。

Kubernetes クラスタをアップグレードする

Kubernetes クラスタの自動アップグレードまたは手動アップグレードを実行できます。クラスタのアップグレード方法の詳細については、クラスタのアップグレード セクションをご覧ください。