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

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

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

始める前に

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

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

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

組織のロール

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

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

プロジェクトのロール

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

環境を準備する

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

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 を使用します。標準クラスタの場合は、クラスタのプロジェクト 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 を使用します。標準クラスタの場合は、クラスタのプロジェクト 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 を使用します。標準クラスタの場合は、クラスタのプロジェクト 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 が表示されている場合は、インフラストラクチャ オペレーター グループにお問い合わせください。

次のステップ