Stay organized with collections
Save and categorize content based on your preferences.
The predecessor version of GKE attached clusters is known as GKE attached clusters
(previous generation). Migrating from the earlier
version of GKE attached clusters to the current generation gives you access to this
functionality, including lifecycle management and Fleet registration. Migration
is a one-way operation: once you have migrated to the current generation of
GKE attached clusters, there is no way to return to GKE attached clusters (previous generation).
Version numbering policy
These documents refer to the GKE attached clusters version as the platform version,
to distinguish it from the Kubernetes version. GKE attached clusters uses the same
version numbering convention as GKE - for example, 1.21.5-gke.1. When attaching
or updating your cluster, you must choose a platform version whose minor version
is the same as or one level below the Kubernetes version of your cluster. For
example, you can attach a cluster running Kubernetes v1.22.* with
GKE attached clusters platform version 1.21.* or 1.22.*.
This lets you upgrade your cluster to the next minor version before upgrading
GKE attached clusters.
Ensure Workload Identity is enabled
Existing clusters from GKE attached clusters (previous generation) must have Workload
Identity enabled before being migrated to the current generation of GKE attached clusters.
To determine whether WI is enabled, run the following command and check
the output for any Workload Identity field:
If Workload Identity is not enabled, the membership must be updated to enable it.
The command to update your cluster's membership varies slightly depending on
whether your cluster has a public or private OIDC issuer. Choose the tab that
applies to your cluster:
Run the following command to migrate your cluster to the current generation
of GKE attached clusters. This command extracts the relevant details of your cluster's
configuration and registers your cluster with Google Fleet Management, and
installs or upgrades any necessary software, such as the lifecycle agent, on
your cluster.
GOOGLE_CLOUD_REGION: the Google Cloud location
from which your cluster is administered
FLEET_MEMBERSHIP: the fully qualified membership designator
of your registered cluster (see below)
PLATFORM_VERSION: the version of GKE attached clusters that you
want to migrate to (example: v1.22.0-gke.1)
CLUSTER_DISTRIBUTION: the cluster type - eks for
AWS's Elastic Kubernetes Service, aks for Azure Kubernetes Service, or
generic for any other distribution
KUBECONFIG_CONTEXT: the name of the context in your
kubeconfig to connect to your cluster with
KUBECONFIG_PATH: the location of your kubeconfig file.
If not specified, the default is ~/.kube/config
The membership designator is a string that uniquely identifies your attached
cluster and has the form
projects/PROJECT_NUMBER/locations/global/memberships/MEMBERSHIP_ID,
where
PROJECT_NUMBER is your Fleet host project number. You must
specify the same project number as one your cluster currently belongs to
MEMBERSHIP_ID: this must be the fleet membership ID of
your existing cluster. GKE attached clusters will use this value as your
cluster name.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-25 UTC."],[],[],null,["# Migrate your CNCF conformant cluster\n\nThe predecessor version of GKE attached clusters is known as GKE attached clusters\n(previous generation). Migrating from the earlier\nversion of GKE attached clusters to the current generation gives you access to this\nfunctionality, including lifecycle management and Fleet registration. Migration\nis a one-way operation: once you have migrated to the current generation of\nGKE attached clusters, there is no way to return to GKE attached clusters (previous generation).\n\nVersion numbering policy\n------------------------\n\nThese documents refer to the GKE attached clusters version as the platform version,\nto distinguish it from the Kubernetes version. GKE attached clusters uses the same\nversion numbering convention as GKE - for example, 1.21.5-gke.1. When attaching\nor updating your cluster, you must choose a platform version whose minor version\nis the same as or one level below the Kubernetes version of your cluster. For\nexample, you can attach a cluster running Kubernetes v1.22.\\* with\nGKE attached clusters platform version 1.21.\\* or 1.22.\\*.\n\nThis lets you upgrade your cluster to the next minor version before upgrading\nGKE attached clusters.\n\nEnsure Workload Identity is enabled\n-----------------------------------\n\nExisting clusters from GKE attached clusters (previous generation) must have Workload\nIdentity enabled before being migrated to the current generation of GKE attached clusters.\n\nTo determine whether WI is enabled, run the following command and check\nthe output for any Workload Identity field: \n\n gcloud container hub memberships describe \u003cvar translate=\"no\"\u003eMEMBERSHIP_NAME\u003c/var\u003e\n\nIf Workload Identity is not enabled, the membership must be updated to enable it.\nThe command to update your cluster's membership varies slightly depending on whether your cluster has a public or private OIDC issuer. Choose the tab that applies to your cluster:\n\n\u003cbr /\u003e\n\n### Private OIDC issuer\n\n gcloud container hub memberships register \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eMEMBERSHIP_NAME\u003c/span\u003e\u003c/var\u003e \\\n --context=\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eKUBECONFIG_CONTEXT\u003c/span\u003e\u003c/var\u003e \\\n --kubeconfig=\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eKUBECONFIG_PATH\u003c/span\u003e\u003c/var\u003e \\\n --enable-workload-identity \\\n --has-private-issuer\n\nReplace:\n\n- \u003cvar translate=\"no\"\u003eMEMBERSHIP_NAME\u003c/var\u003e: the membership name of your cluster\n- \u003cvar translate=\"no\"\u003eKUBECONFIG_CONTEXT\u003c/var\u003e: context in the kubeconfig for accessing the AKS cluster\n- \u003cvar translate=\"no\"\u003eKUBECONFIG_PATH\u003c/var\u003e: path to your kubeconfig file\n\n### Public OIDC issuer\n\n- Retrieve your cluster's OIDC issuer URL. Specific instructions vary by distribution.\n\nThe output of this command will be the URL of your OIDC issuer. Save this value\nfor use later.\n\n- Update the membership:\n\n gcloud container fleet memberships register \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eMEMBERSHIP_NAME\u003c/span\u003e\u003c/var\u003e \\\n --context=\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eKUBECONFIG_CONTEXT\u003c/span\u003e\u003c/var\u003e \\\n --kubeconfig=\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eKUBECONFIG_PATH\u003c/span\u003e\u003c/var\u003e \\\n --enable-workload-identity \\\n --public-issuer-url=\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eOIDC_URL\u003c/span\u003e\u003c/var\u003e\n\nReplace:\n\n- \u003cvar translate=\"no\"\u003eMEMBERSHIP_NAME\u003c/var\u003e: the membership name of your cluster\n- \u003cvar translate=\"no\"\u003eKUBECONFIG_CONTEXT\u003c/var\u003e: context in the kubeconfig for accessing the AKS cluster\n- \u003cvar translate=\"no\"\u003eKUBECONFIG_PATH\u003c/var\u003e: path to your kubeconfig\n- \u003cvar translate=\"no\"\u003eOIDC_URL\u003c/var\u003e: the OIDC URL retrieved earlier\n\nMigrate your cluster\n--------------------\n\nTo migrate your cluster from GKE attached clusters (previous generation) to GKE attached clusters:\n\n1. Extract your cluster's kubeconfig context and store it in the\n KUBECONFIG_CONTEXT environment variable:\n\n KUBECONFIG_CONTEXT=$(kubectl config current-context)\n\n2. Run the following command to migrate your cluster to the current generation\n of GKE attached clusters. This command extracts the relevant details of your cluster's\n configuration and registers your cluster with Google Fleet Management, and\n installs or upgrades any necessary software, such as the lifecycle agent, on\n your cluster.\n\n gcloud container attached clusters import \\\n --location=\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eGOOGLE_CLOUD_REGION\u003c/span\u003e\u003c/var\u003e \\\n --fleet-membership=\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eFLEET_MEMBERSHIP\u003c/span\u003e\u003c/var\u003e \\\n --platform-version=\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003ePLATFORM_VERSION\u003c/span\u003e\u003c/var\u003e \\\n --distribution=\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eCLUSTER_DISTRIBUTION\u003c/span\u003e\u003c/var\u003e \\\n --context=\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eKUBECONFIG_CONTEXT\u003c/span\u003e\u003c/var\u003e \\\n [--kubeconfig=\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eKUBECONFIG_PATH\u003c/span\u003e\u003c/var\u003e]\n\n Replace:\n - \u003cvar translate=\"no\"\u003eGOOGLE_CLOUD_REGION\u003c/var\u003e: the Google Cloud location from which your cluster is administered\n - \u003cvar translate=\"no\"\u003eFLEET_MEMBERSHIP\u003c/var\u003e: the fully qualified membership designator of your registered cluster (see below)\n - \u003cvar translate=\"no\"\u003ePLATFORM_VERSION\u003c/var\u003e: the version of GKE attached clusters that you want to migrate to (example: v1.22.0-gke.1)\n - \u003cvar translate=\"no\"\u003eCLUSTER_DISTRIBUTION\u003c/var\u003e: the cluster type - `eks` for AWS's Elastic Kubernetes Service, `aks` for Azure Kubernetes Service, or `generic` for any other distribution\n - \u003cvar translate=\"no\"\u003eKUBECONFIG_CONTEXT\u003c/var\u003e: the name of the context in your `kubeconfig` to connect to your cluster with\n - \u003cvar translate=\"no\"\u003eKUBECONFIG_PATH\u003c/var\u003e: the location of your `kubeconfig` file. If not specified, the default is `~/.kube/config`\n\n The membership designator is a string that uniquely identifies your attached\n cluster and has the form\n `projects/`\u003cvar translate=\"no\"\u003ePROJECT_NUMBER\u003c/var\u003e`/locations/global/memberships/`\u003cvar translate=\"no\"\u003eMEMBERSHIP_ID\u003c/var\u003e,\n where\n - \u003cvar translate=\"no\"\u003ePROJECT_NUMBER\u003c/var\u003e is your Fleet host project number. You must\n specify the same project number as one your cluster currently belongs to\n\n - \u003cvar translate=\"no\"\u003eMEMBERSHIP_ID\u003c/var\u003e: this must be the fleet membership ID of\n your existing cluster. GKE attached clusters will use this value as your\n cluster name."]]