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

このドキュメントでは、Google Distributed Cloud(GDC)エアギャップ Kubernetes クラスタの Kubernetes バージョンをアップグレードする方法について説明します。クラスタに最新の Kubernetes の機能と修正が組み込まれるように、クラスタの定期的なアップグレードを計画する必要があります。

このドキュメントは、組織内の Kubernetes リソースの管理を担当する、プラットフォーム管理者グループ内の IT 管理者、セキュリティ エンジニア、ネットワーク管理者などを対象としています。詳細については、 GDC エアギャップ ドキュメントの 対象読者をご覧ください。

始める前に

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

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

Kubernetes クラスタをアップグレードするために必要な権限を取得するには、特定のロールが必要です。プロジェクトと組織にスコープ設定されたロールをリクエストする必要があります。

組織のロール

Kubernetes クラスタで使用可能なアップグレード バージョンを一覧表示するには、組織 IAM 管理者にユーザー クラスタ管理者 (user-cluster-admin)ロールの付与を依頼してください。このロールは Namespace にバインドされていません。

Standard クラスタを管理していて、プラットフォーム管理者グループからユーザー クラスタ管理者ロールを取得できない場合は、使用可能な Kubernetes アップグレード バージョンのリストを提供するよう依頼する必要があります。

プロジェクトのロール

クラスタのアップグレードを作成、削除、編集、表示するには、プロジェクト IAM 管理者にStandard クラスタ管理者(standard-cluster-admin)ロールの付与を依頼してください。このロールはプロジェクト Namespace にバインドされています。

環境を準備する

API を使用して Kubernetes クラスタ に対してコマンドを実行するには、次のリソースが必要です。

  • gdcloud CLIをダウンロードして インストールします。

  • kubectl CLI をインストールします。

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

  • Kubernetes クラスタ名を使用して、この手順の CLUSTER_NAME を置き換えます。

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

  • 管理 API サーバーの kubeconfig パスを使用して、この手順の MANAGEMENT_API_SERVER を置き換えます。

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

UserClusterUpgradeRequest API を使用して、既存の Kubernetes クラスタをアップグレードします。

API を使用して Kubernetes クラスタをアップグレードする手順は次のとおりです。

  1. UserClusterMetadata オブジェクトの kubernetesVersion 値を出力して、使用可能な Kubernetes アップグレード バージョンを一覧表示します。

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get userclustermetadata -o=custom-columns='TARGET_VERSION:.spec.kubernetesVersion'
    

    MANAGEMENT_API_SERVER は、管理 API サーバーの kubeconfig ファイルのパスに置き換えます。

    このコマンドは、使用可能な Kubernetes バージョンのリストを返します。

    TARGET_VERSION
    1.30.1000-gke.85
    
  2. 前の出力から、クラスタのアップグレード先の Kubernetes バージョンをメモします。次のステップでアップグレード リクエストに指定する targetVersion は、使用可能なバージョンのいずれかである必要があります。

  3. UserClusterUpgradeRequest リソースを作成して、クラスタのアップグレードをリクエストします。

      kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
      apiVersion: cluster.gdc.goog/v1
      kind: UserClusterUpgradeRequest
      metadata:
        name: CLUSTER_NAME
        namespace: CLUSTER_NAMESPACE
      spec:
        clusterRef:
          name: CLUSTER_NAME
        targetVersion: TARGET_VERSION
      EOF
    

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

    • MANAGEMENT_API_SERVER: Management API サーバーの kubeconfig ファイルのパス。
    • CLUSTER_NAME: アップグレードする Kubernetes クラスタの名前(user-vm-2 など)。
    • CLUSTER_NAMESPACE: Kubernetes クラスタの Namespace。共有クラスタの場合は、platform Namespace を使用します。 Standard クラスタの場合は、クラスタのプロジェクト Namespace を使用します。
    • TARGET_VERSION: 前のステップで特定したアップグレードのターゲット バージョン(1.30.1000-gke.85 など)。

    Kubernetes クラスタの平均アップグレード時間は約 20 分です。

  4. UserClusterUpgradeRequest リソースをモニタリングして、クラスタのアップグレードを確認します。

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        describe userclusterupgraderequest CLUSTER_NAME \
        -n CLUSTER_NAMESPACE
    

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

    • MANAGEMENT_API_SERVER: Management API サーバーの kubeconfig ファイルのパス。
    • CLUSTER_NAME: アップグレードする Kubernetes クラスタの名前(user-vm-2 など)。
    • CLUSTER_NAMESPACE: Kubernetes クラスタの Namespace。共有クラスタの場合は、platform Namespace を使用します。 Standard クラスタの場合は、クラスタのプロジェクト Namespace を使用します。

    出力の Spec セクションを確認します。Current Version と Target Version が含まれています。Current Version と Target Version が異なる場合、アップグレードはまだ進行中です。

    Spec:
      ...
      Current Version: 1.29.500-gke.60
      Target Version: 1.30.1000-gke.85
    Status:
      Conditions:
      - Message: Upgrade is in progress
        Reason: UpgradeInProgress
        Status: "False"
        Type: Succeeded
    

    Succeeded 条件のステータスが True で、Current Version が Target Version と一致すると、アップグレードは完了し、成功します。

    Succeeded 条件のステータスが False の場合、アップグレードは失敗しています。Kubernetes クラスタのアップグレードに関連するエラーが発生した場合は、インフラストラクチャ オペレーター グループにお問い合わせください。

アップグレード後にクラスタのステータスを確認する

Kubernetes クラスタがアップグレードされたら、Cluster リソースのステータスを確認して、クラスタとそのコンポーネントが正常であることを確認します。

  1. Cluster リソースの status.conditions フィールドと status.componentsConditions フィールドを表示します。

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get cluster CLUSTER_NAME \
        -n CLUSTER_NAMESPACE -o yaml
    

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

    • MANAGEMENT_API_SERVER: Management API サーバーの kubeconfig ファイルのパス。
    • CLUSTER_NAME: Kubernetes クラスタの名前(user-vm-2 など)。
    • CLUSTER_NAMESPACE: Kubernetes クラスタの Namespace。共有クラスタの場合は、platform Namespace を使用します。 Standard クラスタの場合は、クラスタのプロジェクト Namespace を使用します。
  2. 出力の status セクションで、次のことを確認します。

    • status.conditions で、Ready 条件の status が True で、Reconciling 条件の status が False であることを確認します。
    • status.componentsConditions で、Ready 条件の status が True、Reconciling 条件の status が False であり、 reason が ReconciliationError または Reconciling を示す条件がないことを確認します。

    コントロール プレーン ノードが 3 つ、ワーカーノードが 3 つある Kubernetes クラスタの場合、アップグレードには約 20 分かかります。20 分経過してもクラスタまたはそのコンポーネントが Reconciling 状態のままの場合、または条件に ReconciliationError が表示される場合は、インフラストラクチャ オペレーター グループにお問い合わせください。

次のステップ