GCP ACE: Introduction to GKE at Scale — Multi-Cluster and Fleets
Everything in this series so far assumed one cluster. At real scale, that assumption breaks down fast — different regions, different environments (dev/staging/prod), different teams, sometimes different cloud providers entirely. This article opens GKE’s answer to “now I have many clusters, not one”: Fleets.
Why multi-cluster, in the first place
A single cluster is a single blast radius, a single upgrade domain, and often a single region. Organizations end up with multiple clusters for reasons that have nothing to do with choice:
- Isolation: separate clusters per environment (dev/staging/prod) or per team, so one team’s mistake or noisy workload doesn’t take down another’s.
- Geography: clusters close to users in different regions, for latency and data residency.
- Blast radius: a control plane failure or a bad rollout stays contained to one cluster.
- Regulatory/compliance boundaries: some workloads legally can’t share infrastructure with others.
The problem multi-cluster management then creates: you now have N clusters, each with its own RBAC, its own config, its own view of the world — and keeping them consistent by hand doesn’t scale past a handful.
What a GKE Fleet is
A fleet is Google Cloud’s logical grouping of clusters (and other “fleet-aware” resources) so you can apply consistent policy and use multi-cluster features across all of them at once, instead of one cluster at a time.
Key facts about fleets:
- A fleet lives inside a Google Cloud project, called the fleet host project.
- A project can have at most one fleet. You don’t nest or layer fleets within a project.
- Fleet membership is exclusive — a cluster can belong to exactly one fleet at a time. This gives every cluster a single source of truth for fleet-level governance; it can’t simultaneously answer to two different fleets’ policies.
- Today, only Kubernetes clusters can be fleet members (not arbitrary other resources).
Creating a fleet and registering clusters
# Create a fleet explicitly (optional — see below)
gcloud container fleet create --display-name=my-fleet --project=FLEET_HOST_PROJECT_ID
You can skip this entirely: registering your first cluster in a project with no existing fleet creates one automatically.
GKE on Google Cloud does not auto-register — joining a fleet is a deliberate, explicit step, unlike GKE on AWS/Azure (created through the GKE Multi-Cloud API) or on-prem Google Distributed Cloud clusters, which register automatically at creation. You can make that step part of cluster creation by adding --enable-fleet:
gcloud container clusters create-auto CLUSTER_NAME --enable-fleet # Autopilot
gcloud container clusters create CLUSTER_NAME --enable-fleet # Standard
Or register a cluster that already exists:
# Register to the fleet in the cluster's own project
gcloud container clusters update CLUSTER_NAME --enable-fleet
# Register as a lightweight membership (lower overhead, fewer features)
gcloud container clusters update CLUSTER_NAME --enable-fleet --membership-type=LIGHTWEIGHT
# Register to a fleet hosted in a different project (needs cross-project IAM set up first)
gcloud container clusters update CLUSTER_NAME --fleet-project=PROJECT_ID_OR_NUMBER
# Convert a lightweight membership to a regular one
gcloud container clusters update CLUSTER_NAME --unset-membership-type
The cluster name becomes its membership name in the fleet, so two clusters with the same name can’t join the same fleet.
gcloud container fleet memberships list --project=PROJECT_ID
gcloud container fleet memberships describe MEMBERSHIP_NAME --project=PROJECT_ID
The exam-relevant detail here: GKE on Google Cloud clusters must be explicitly registered. Don’t assume a freshly created GKE cluster is automatically part of any fleet — it isn’t, unless you created it with --enable-fleet or registered it afterwards.
Sameness — what makes multi-cluster features possible
Fleet features work by treating identically-named objects across different clusters as the same logical thing. This is called sameness, and it comes in three flavors:
| Type | What it means |
|---|---|
| Namespace sameness | A namespace with the same name on different clusters is treated as one logical namespace across the fleet — namespace ownership needs to be consistent across clusters that share it. |
| Service sameness | A Service with the same namespace + name on different clusters is treated as the same service — their endpoints can be merged. This underlies Cloud Service Mesh and Multi Cluster Ingress. |
| Identity sameness | A (namespace, service account) pair is treated as a single identity across the fleet. Fleet Workload Identity Federation lets a workload use one common identity for external resources regardless of which cluster it’s running on; Cloud Service Mesh can authorize a workload once, fleet-wide. |
Not every fleet feature requires sameness — Config Sync and Policy Controller (covered in a later article) can use it, for example to target a namespace across clusters, but don’t depend on it. But features like Multi Cluster Ingress and fleet Workload Identity Federation always assume it’s true. If two clusters have a namespace called payments doing completely unrelated things, and you turn on a sameness-dependent feature, you’ve just merged them conceptually — which is exactly the kind of mistake the exam likes to test.
Trust — the boundary sameness actually depends on
Sameness only makes sense between clusters that trust each other. Google’s own framing: clusters provide blast-radius, availability, and “noisy neighbor” protection between workloads — but they are not a strong isolation boundary for governance. An administrator with access to one cluster in a fleet can, through sameness features, affect services running on other member clusters.
The practical rule: clusters you don’t fully trust should live in their own, separate fleet — not as members of a fleet alongside clusters you do trust. If you still need specific services to talk across that trust boundary, you authorize those individual services explicitly, rather than putting everything in one fleet and hoping RBAC alone contains the blast radius.
Exam Takeaways
- A fleet groups clusters (and other fleet-aware resources) inside one fleet host project, for consistent multi-cluster policy and features.
- A project has at most one fleet; a cluster belongs to exactly one fleet at a time (exclusive membership).
- GKE on Google Cloud clusters require explicit registration (
--enable-fleetonclusters create/create-auto, orclusters update --enable-fleetlater) — they do not auto-register, unlike GKE on AWS/Azure or on-prem. - Registering a project’s first cluster with no existing fleet creates one automatically — you don’t have to run
fleet createfirst. - Sameness has three types: namespace, service, and identity — know which multi-cluster features (Multi Cluster Ingress, fleet Workload Identity Federation) require it versus which don’t (Config Sync, Policy Controller).
- Clusters are not a strong governance isolation boundary — trust between fleet members has to be real, or they belong in separate fleets.
--membership-type=LIGHTWEIGHTregisters a cluster with less overhead but fewer fleet features available.