CNCF 準拠のクラスタを接続する

GKE 接続クラスタを使用すると、AWS、Azure など、どこでホストされているかにかかわらず、既存の Kubernetes クラスタを集中管理用の GKE のダッシュボードに取り込むことができます。これには、任意の CNCF 準拠の Kubernetes クラスタを接続する機能もあります。

サポートされている Kubernetes クラスタ

x86 ノードがある Kubernetes 準拠クラスタをフリートに追加し、 Google Cloud コンソールに GKE クラスタとともに表示できます。

Google は、すべての Kubernetes ディストリビューションですべての機能互換性を検証しているわけではありませんが、検出された非互換性はここに記載しています。詳細とトラブルシューティングのサポートについては、GKE クラスタのバージョンとアップグレードのサポートをご覧ください。

前提条件

お使いのクラスタがクラスタ要件を満たしていることを確認します。

クラスタを接続するときは、次の項目を指定する必要があります。

  • サポートされている Google Cloud管理リージョン
  • プラットフォームのバージョン

管理リージョンは、接続したクラスタを管理する Google Cloud リージョンです。サポートされている任意のリージョンを選択できますが、クラスタに地理的に最も近いリージョンを選択することをおすすめします。管理リージョンにユーザーデータは保存されません。

プラットフォームのバージョンは、クラスタにインストールする GKE 接続クラスタのバージョンです。サポートされているすべてのバージョンの一覧を表示するには、次のコマンドを実行します。

gcloud container attached get-server-config  \
  --location=GOOGLE_CLOUD_REGION

GOOGLE_CLOUD_REGION を、クラスタを管理するGoogle Cloud ロケーションの名前に置き換えます。

プラットフォーム バージョンの採番

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

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

クラスタを接続する

CNCF 準拠クラスタを Google Cloudフリート管理に接続するには、次のコマンドを実行します。

  1. 接続するクラスタのエントリが kubeconfig ファイルにあることを確認します。具体的な手順はディストリビューションによって異なります。

  2. 次のコマンドを実行して、クラスタの kubeconfig コンテキストを抽出し、KUBECONFIG_CONTEXT 環境変数に保存します。

    KUBECONFIG_CONTEXT=$(kubectl config current-context)
    
  3. クラスタを登録するコマンドは、クラスタの OIDC 発行者が一般公開であるか限定公開であるかによって若干異なります。実際のクラスタに該当するタブを選択してください。

    限定公開 OIDC 発行者

    gcloud container attached clusters register コマンドを使用して、クラスタを登録します。

    gcloud container attached clusters register CLUSTER_NAME \
      --location=GOOGLE_CLOUD_REGION \
      --fleet-project=PROJECT_NUMBER \
      --platform-version=PLATFORM_VERSION \
      --distribution=generic \
      --context=KUBECONFIG_CONTEXT \
      --has-private-issuer \
      --kubeconfig=KUBECONFIG_PATH
    

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

    • CLUSTER_NAME: クラスタの名前。CLUSTER_NAME は、RFC 1123 ラベル名の標準に準拠している必要があります。
    • GOOGLE_CLOUD_REGION: クラスタを管理する Google Cloud リージョン
    • PROJECT_NUMBER: クラスタの登録先とするフリートホスト プロジェクト
    • PLATFORM_VERSION: クラスタに使用するプラットフォーム バージョン
    • KUBECONFIG_CONTEXT: クラスタにアクセスするための kubeconfig のコンテキスト
    • KUBECONFIG_PATH: kubeconfig のパス

    一般公開 OIDC 発行者

    1. クラスタの OIDC 発行者の URL を取得し、後で使用できるように保存します。具体的な手順はディストリビューションによって異なります。

    2. 次のコマンドを実行して、クラスタの kubeconfig コンテキストを抽出し、KUBECONFIG_CONTEXT 環境変数に保存します。

      KUBECONFIG_CONTEXT=$(kubectl config current-context)
      
    3. gcloud container attached clusters register コマンドを使用して、クラスタを登録します。

      gcloud container attached clusters register CLUSTER_NAME \
        --location=GOOGLE_CLOUD_REGION \
        --fleet-project=PROJECT_NUMBER \
        --platform-version=PLATFORM_VERSION \
        --distribution=generic \
        --issuer-url=ISSUER_URL \
        --context=KUBECONFIG_CONTEXT \
        --kubeconfig=KUBECONFIG_PATH
      

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

      • CLUSTER_NAME: クラスタの名前。CLUSTER_NAME は、RFC 1123 ラベル名の標準に準拠している必要があります。
      • GOOGLE_CLOUD_REGION: クラスタを管理する Google Cloud リージョン
      • PROJECT_NUMBER: クラスタを登録するフリートホスト プロジェクト
      • PLATFORM_VERSION: クラスタに使用する GKE 接続クラスタのバージョン
      • ISSUER_URL: 前に取得した、発行者の URL
      • KUBECONFIG_CONTEXT: 前に抽出した、クラスタにアクセスするための kubeconfig 内のコンテキスト
      • KUBECONFIG_PATH: kubeconfig のパス

Cloud Logging / Cloud Monitoring を認可する

GKE 接続クラスタでシステムログと指標を作成してGoogle Cloudにアップロードするには、認可が必要です。

Kubernetes Workload Identity gke-system/gke-telemetry-agent が Google Cloud Logging にログを書き込み、 Google Cloud Monitoring に指標を書き込むことを認可するには、次のコマンドを実行します。

gcloud projects add-iam-policy-binding GOOGLE_PROJECT_ID \
  --member="serviceAccount:GOOGLE_PROJECT_ID.svc.id.goog[gke-system/gke-telemetry-agent]" \
  --role=roles/gkemulticloud.telemetryWriter

GOOGLE_PROJECT_ID は、クラスタの Google Cloud プロジェクト ID に置き換えます。

この IAM バインディングは、 Google Cloud プロジェクトにあるすべてのクラスタに、ログと指標をアップロードするためのアクセスを許可します。プロジェクトに対して最初のクラスタを作成した後にのみ実行する必要があります。

Google Cloud プロジェクトにクラスタを作成していないと、この IAM バインディングの追加は失敗します。これは、クラスタが作成されるまで、参照する Workload Identity プール(GOOGLE_PROJECT_ID.svc.id.goog)がプロビジョニングされないためです。