EKS 接続クラスタを移行する

GKE 接続クラスタの以前のバージョンは、GKE 接続クラスタ(前の世代)と呼ばれています。以前のバージョンの GKE 接続クラスタから現在の世代に移行すると、この機能(ライフサイクル管理やフリート登録など)にアクセスできます。移行は一方向のオペレーションです。現在の世代の GKE 接続クラスタに移行した後は、GKE 接続クラスタ(前の世代)に戻る方法はありません。

バージョン採番ポリシー

このドキュメントでは、Kubernetes バージョンと区別するために、GKE 接続クラスタのバージョンをプラットフォーム バージョンとして表記しています。GKE 接続クラスタは、GKE と同じバージョン採番規則を使用します(例: 1.21.5-gke.1)。クラスタを接続または更新する場合は、プラットフォーム バージョンのマイナー バージョンが、クラスタの Kubernetes バージョンと同じか 1 つ下のものを選択する必要があります。たとえば、Kubernetes v1.22.* を実行するクラスタは、GKE 接続クラスタ プラットフォーム バージョン 1.22.* または 1.21.* に接続できます。

これにより、GKE 接続クラスタをアップグレードする前に、クラスタを次のマイナー バージョンにアップグレードできます。

Workload Identity が有効になっていることを確認する

GKE 接続クラスタ(前の世代)の既存のクラスタでは、現在の世代の GKE 接続クラスタに移行する前に、Workload Identity を有効にする必要があります。

Workload Identity が有効になっているかどうかを確認するには、次のコマンドを実行して、Workload Identity フィールドの出力を確認します。

gcloud container hub memberships describe MEMBERSHIP_NAME

Workload Identity が有効になっていない場合は、メンバーシップを更新して有効にする必要があります。

  1. 次のコマンドで、クラスタの OIDC 発行者 URL を取得します。

    aws eks describe-cluster \
    --region AWS_REGION \
    --name CLUSTER_NAME \
    --query "cluster.identity.oidc.issuer" \
    --output text
    

    このコマンドの出力が、OIDC 発行者の URL になります。後で使用するために、この値を保存しておきます。

  2. メンバーシップを更新します。

    gcloud container fleet memberships register MEMBERSHIP_NAME \
    --context=KUBECONFIG_CONTEXT \
    --kubeconfig=KUBECONFIG_PATH \
    --enable-workload-identity \
    --public-issuer-url=OIDC_URL
    

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

    • MEMBERSHIP_NAME: クラスタのメンバーシップ名
    • KUBECONFIG_CONTEXT: EKS クラスタにアクセスするための kubeconfig のコンテキスト
    • KUBECONFIG_PATH: kubeconfig ファイルのパス
    • OIDC_URL: 前に取得した OIDC URL

クラスタを移行する

GKE 接続クラスタ(前の世代)から GKE 接続クラスタにクラスタを移行するには:

  1. クラスタの kubeconfig コンテキストを抽出し、KUBECONFIG_CONTEXT 環境変数に保存します。

    KUBECONFIG_CONTEXT=$(kubectl config current-context)
    
  2. 次のコマンドを実行して、クラスタを現在の世代の GKE 接続クラスタに移行します。このコマンドは、クラスタ構成に関連する詳細情報を抽出して、Google フリート管理でクラスタを登録し、ライフサイクル エージェントなどの必要なソフトウェアをクラスタにインストールまたはアップグレードします。

    gcloud container attached clusters import \
      --location=GOOGLE_CLOUD_REGION \
      --fleet-membership=FLEET_MEMBERSHIP \
      --platform-version=PLATFORM_VERSION \
      --distribution=CLUSTER_DISTRIBUTION \
      --context=KUBECONFIG_CONTEXT \
      [--kubeconfig=KUBECONFIG_PATH]
    

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

    • GOOGLE_CLOUD_REGION: クラスタが管理されている Google Cloud のロケーション
    • FLEET_MEMBERSHIP: 登録済みクラスタの完全修飾メンバーシップ指定子(以下を参照)
    • PLATFORM_VERSION: 移行先の GKE 接続クラスタのバージョン(例: v1.22.0-gke.1)
    • CLUSTER_DISTRIBUTION: クラスタタイプ。AWS の Elastic Kubernetes Service の場合は eks、Azure Kubernetes Service の場合は aks、その他のディストリビューションの場合は generic
    • KUBECONFIG_CONTEXT: クラスタに接続する kubeconfig のコンテキストの名前
    • KUBECONFIG_PATH: kubeconfig ファイルの場所。指定しない場合、デフォルトは ~/.kube/config です。

    メンバーシップ指定子は、接続クラスタを一意に識別する文字列であり、形式は projects/PROJECT_NUMBER/locations/global/memberships/MEMBERSHIP_ID です。ここで

    • PROJECT_NUMBER はフリートホスト プロジェクト番号です。クラスタが現在属しているプロジェクトと同じプロジェクト番号を指定する必要があります。

    • MEMBERSHIP_ID: これは既存のクラスタのフリート メンバーシップ ID である必要があります。GKE 接続クラスタは、この値をクラスタ名として使用します。