Fleet Management Tools in Kubernetes
A plain-English guide to running many clusters as one: what a fleet is, how tools create, configure, roll out, govern, connect and observe clusters, and how to choose and adopt them step by step.
Imagine a delivery company with one van. The owner knows every scratch on it, fills the tank personally and remembers when the oil was last changed. Now the company grows to five hundred vans across twelve cities. Memory no longer works. Without a system for naming, servicing, updating and watching every vehicle, some will break down unnoticed, some will run old parts and nobody will know which is which. A fleet of Kubernetes clusters is that growing company, and fleet management tools are the system that keeps every van on the road.
This guide teaches fleet management from the ground up. You need no experience with multiple clusters. Every new word is explained when it first appears and every big idea comes with an everyday comparison. We walk through why organizations end up with many clusters, what becomes hard, the main families of tools, how rollouts, policy, access, secrets, networking, traffic, observability, cost and recovery work across a fleet, and how to choose, adopt and operate these tools safely. Tool names and features change quickly, so check current documentation before you commit.
1What Is a Fleet of Clusters?
A fleet is simply a group of Kubernetes clusters that you want to manage together, as one thing instead of many separate things.
A Kubernetes cluster is a group of machines that run your applications under the control of Kubernetes. When a company is young, it usually has one cluster, and the team knows every corner of it. As the company grows, one cluster becomes two, then five, then fifty. There might be one for testing and one for production, clusters in different countries, clusters for different business units and clusters at far away shops or factories. Each new cluster seems reasonable on the day it is created. Together they become a fleet, and a fleet behaves very differently from a single cluster.
The trouble is that every cluster needs the same chores. Each one must be created, upgraded, secured, monitored, backed up and eventually retired. Each one needs the same company rules and the same shared tools installed. Doing these chores by hand for one cluster is fine. Doing them by hand for fifty clusters is slow, error-prone and impossible to keep consistent. Fleet management tools exist to turn those chores into something automatic and repeatable.
A taxi company with one car can have the owner fill the tank, change the oil and check the tires personally. A company with five hundred cars needs a depot with schedules, mechanics, a fuel system and a dashboard showing every vehicle. Fleet management tools are the depot for your clusters.
One view
See every cluster, its version, its health and what runs on it from a single place.
One source of truth
Describe the desired setup once and have it applied everywhere it belongs.
One set of rules
Apply security and compliance rules to all clusters consistently and prove they are applied.
One way to change
Upgrade, roll out and recover using the same repeatable process on every cluster.
Fleet management is about replacing individual care with a system. The goal is that adding the fiftieth cluster costs almost no more effort than adding the second.
2Why Organizations End Up with Many Clusters
Nobody plans to manage fifty clusters. They arrive one sensible decision at a time.
Understanding why fleets form helps you design for them. Each reason below is valid on its own, and most organizations have several of them at once. Once you accept that many clusters are normal, the question changes from “how do we avoid this?” to “how do we manage this well?”
| Reason | What Drives It | Typical Result |
|---|---|---|
| Environment separation | Keep development, testing and production apart | At least three clusters per product or team |
| Geography and latency | Serve users near where they live | Clusters in several regions or countries |
| Data residency and regulation | Laws that say data must stay in a country | One cluster per regulated region |
| Blast radius | Limit how many applications one failure can hurt | Many smaller clusters instead of one giant one |
| Team and business unit boundaries | Independent ownership, budgets and schedules | Clusters per department or customer |
| Scale limits | A single cluster has practical size limits | Workloads split across several clusters |
| Edge and branch locations | Run software in shops, factories, vehicles or cell towers | Hundreds or thousands of tiny clusters |
| Multi-cloud and hybrid | Avoid dependence on one provider, or use on-premises machines | Clusters in different environments with different tools |
| Disaster recovery | Be able to run elsewhere if a region fails | Paired clusters in separate failure domains |
A restaurant chain opens a new branch for each neighborhood because customers do not want to travel across the city for lunch. Nobody calls this a mistake. But the head office now needs menus, suppliers, training and inspections that work across every branch. Clusters multiply for similar sensible reasons, and so does the need for a head office.
Clusters created casually, with no owner and no plan, become sprawl. Old clusters nobody remembers keep running, keep costing money and keep falling out of date. A fleet plan includes how clusters are retired, not only how they are created.
3What Gets Hard When You Have Many Clusters
Problems that were invisible with one cluster become daily pain with many.
With a single cluster, a skilled team knows its history and its quirks. With many clusters, quirks multiply. One cluster has an older version. Another has a tool installed by hand last year. A third was changed during an emergency and nobody wrote down how. The clusters slowly drift apart until no two are the same, and nobody can say with confidence what is running where.
Configuration drift
Clusters that began identical slowly differ because of manual changes, forgotten fixes and one-off experiments.
Version sprawl
Kubernetes releases come often. Staying on supported versions across dozens of clusters needs a disciplined, repeatable upgrade process.
Inconsistent security
A rule applied to nine clusters and forgotten on the tenth is exactly where an attacker will look.
Poor visibility
Without a shared view, simple questions such as which clusters run a vulnerable version take days to answer.
Duplicated effort
Every team solves the same problems again, in slightly different ways, wasting skilled time.
Hidden cost
Idle clusters, over-sized machines and forgotten test environments quietly drain budgets.
Imagine a school district where every school sets its own safety rules, buys its own books and writes its own timetable. Each school might do well, but the district cannot answer basic questions such as how many fire extinguishers were inspected this year. A district office with shared standards fixes that.
A good fleet setup lets you answer, within minutes, three questions: what exactly is running on every cluster, is it what we intended, and can we change it safely everywhere?
4Vocabulary of Fleet Management
A handful of words appear in every tool’s documentation. Learn them once and the tools become easier to compare.
Fleet
The set of clusters managed together, often grouped by labels such as region, environment or owner.
Management cluster or hub
The central cluster that hosts the fleet tools, stores the desired state and coordinates the other clusters.
Member, spoke or workload cluster
A cluster managed by the hub, where the real applications run.
Desired state
A written description of how things should be, stored somewhere reliable, usually in version control.
Drift
The difference between the desired state and what is actually running.
Propagation
Spreading a resource or application from the hub to chosen member clusters.
Placement
The rules that decide which clusters should receive which workloads.
Override
A small per-cluster change applied on top of a shared definition, such as a different replica count in one region.
Reconciliation
The constant process of comparing desired and actual state and fixing differences.
Rollout wave
A group of clusters updated together, so risky changes reach the least important clusters first.
Think of a head office that mails the same rulebook to every branch. The rulebook is the desired state. A branch that has crossed out a page has drifted. The sorting rules for which branches get which book are placement, and a sticky note added for one branch only is an override.
Every tool uses its own names. One calls the hub a management cluster, another calls it a hub, another a control plane. When reading documentation, translate each name into the ideas above and the tools quickly look similar.
5The Layers of Fleet Management
No single tool does everything. Fleet management is a stack of layers, and each layer has its own family of tools.
Beginners often search for the one tool that manages a fleet. In practice, the work divides into layers. Some tools create and upgrade the clusters themselves. Others deliver applications and configuration to them. Others enforce rules, connect their networks, collect their metrics and watch their cost. Understanding the layers lets you pick the right tool for each job and avoid expecting one tool to do the work of five.
flowchart TD
A["Fleet inventory and identity: which clusters exist, who owns them"]
B["Cluster lifecycle: create, upgrade, scale, retire"]
C["Delivery: applications and configuration to every cluster"]
D["Policy and security: rules applied and proven everywhere"]
E["Networking: services and traffic across clusters"]
F["Observability and cost: one view of health and spending"]
G["Backup and recovery: restore and fail over between clusters"]
A --> B
B --> C
C --> D
D --> E
E --> F
F --> G
| Layer | Question It Answers | Typical Tool Families |
|---|---|---|
| Inventory and identity | What clusters do we have and who owns them? | Cluster registries, labels, management consoles |
| Cluster lifecycle | How are clusters built and upgraded consistently? | Declarative cluster provisioning, cloud provider fleet services |
| Delivery | How does the same application reach many clusters? | GitOps controllers, multi-cluster workload propagation |
| Policy and security | How do we enforce rules everywhere? | Policy engines, identity and access tools, secret managers |
| Networking | How do services in different clusters talk? | Cluster mesh tools, service meshes, global load balancers |
| Observability and cost | Is everything healthy and what does it cost? | Metrics, logs and traces platforms, cost tools |
| Backup and recovery | Can we restore or fail over? | Backup tools, replicated storage, traffic failover |
A hospital needs doctors, nurses, pharmacists, cleaners and administrators. No single person does every job. Fleet management is similar: each layer has specialists, and the art lies in making them work together.
Products that claim to do every layer often do some layers well and others poorly. Evaluate each layer separately and be willing to mix tools where one is clearly stronger.
6Cluster Lifecycle: Creating and Upgrading Clusters Consistently
Before anything can be managed, clusters must be created, and created the same way every time.
The first layer of fleet management is the lifecycle of the clusters themselves. Building a cluster by clicking through a cloud console or running a long sequence of commands produces a unique snowflake that nobody can reproduce. Fleet teams instead describe clusters as data: how many machines, which Kubernetes version, which network, which add-ons. A tool reads that description and builds the cluster to match. If a cluster is damaged, the same description can build a replacement.
Describe the cluster
Write down size, version, region, network and required add-ons in a standard template.
Build it automatically
A tool reads the description and creates machines, networks and the Kubernetes control components.
Install the baseline
The standard bundle of add-ons, policies and monitoring agents is applied before any team uses the cluster.
Register it in the fleet
The new cluster receives labels and joins the inventory so the delivery and policy layers can find it.
Upgrade by changing the description
To move to a newer version, change the version in the description, and the tool performs a controlled rolling upgrade.
Retire cleanly
When a cluster is no longer needed, the tool removes it along with its machines and records, so nothing lingers.
A bakery that bakes each loaf from memory produces slightly different bread every day. A bakery that follows a written recipe and uses a standard oven produces the same loaf in every branch. Describing clusters as data is the written recipe.
The healthiest attitude is that any cluster can be rebuilt from its description in a short time. Clusters you are afraid to rebuild are clusters you do not truly control.
7Cluster API: Kubernetes Managing Kubernetes
Cluster API uses the same declarative style as Kubernetes itself, but the things it manages are other clusters.
Cluster API is a project from the Kubernetes community, developed by a special interest group that focuses on cluster lifecycle. Its big idea is elegant. Instead of inventing a separate system for building clusters, it reuses Kubernetes. A small cluster, called the management cluster, runs controllers that understand new resource types such as Cluster, Machine and control plane definitions. You write a resource that says “I want a cluster with three control machines and five worker machines at this version”, and the controllers create the real thing in a cloud or a data center.
flowchart LR
A["Engineer or pipeline writes cluster description"] --> B["Management cluster with Cluster API controllers"]
B --> C["Infrastructure provider for a cloud or data center"]
C --> D["Workload cluster 1"]
C --> E["Workload cluster 2"]
C --> F["Workload cluster 3"]
Management cluster
The cluster that runs the controllers. Everything about the fleet’s clusters is stored here as resources.
Infrastructure providers
Plug-ins that know how to create machines and networks in a particular environment, such as a public cloud or a virtualization platform.
Machine groups
Descriptions of sets of worker machines that behave a bit like Deployments, so scaling and rolling replacement work the same way.
Cluster templates
Reusable cluster definitions so that many clusters can be stamped from one approved pattern.
A construction company keeps standard house plans in the head office. When a customer orders a house, the site team reads the plan and builds it. If the plan changes, newly built houses follow the new plan. The management cluster holds the plans, and the providers are the site teams.
Strengths and cautions
Advantages
- Same declarative style and tooling you already use for applications
- Works across many environments through providers
- Upgrades and scaling are controlled, rolling operations
- Cluster definitions can live in version control
Disadvantages / Trade-offs
- The management cluster becomes critical and must be protected
- Learning curve for the several resource types involved
- Provider maturity varies between environments
- Does not by itself deliver applications or policies
If the management cluster is lost without a backup, you lose the record of how your clusters were meant to look. Keep it small, tightly secured, backed up and rebuildable from version control.
8Cloud Provider Fleet Services and Managed Options
Cloud providers and platform vendors package fleet features into managed products, which can save a lot of work.
If most of your clusters run in a single public cloud, the provider’s own fleet features may be the shortest path. Major providers offer ways to group clusters, orchestrate upgrades across them, share configuration and see them in one console. There are also vendor platforms that manage clusters across many clouds and on-premises environments, and products that attach clusters running anywhere to a central management service. The exact names and features change often, so always check the provider’s current documentation before deciding.
| Option Type | What It Usually Offers | Good When | Watch Out For |
|---|---|---|---|
| Provider fleet features for managed clusters | Grouping, update sequencing, shared configuration and policy, central dashboards | Most clusters are in one provider | Lock-in and uneven support for clusters elsewhere |
| Services that attach outside clusters | A central view and some policy and delivery for clusters running anywhere | Hybrid environments with on-premises clusters | Feature gaps compared with native clusters |
| Vendor management platforms | Cluster creation, access control, catalogs and delivery across many environments | Teams that want an integrated product with support | License cost and product-specific ways of working |
| Open source building blocks | Flexible lifecycle, delivery and placement tools you assemble yourself | You want control and avoid lock-in | You operate the pieces yourself |
You can cook dinner from raw ingredients, buy a meal kit or order from a restaurant. The kit and the restaurant save time but give you less control over the final dish. Managed fleet services are the kit and the restaurant. Open source tools are the raw ingredients.
Before adopting a managed service, ask how hard it would be to leave. Keeping your definitions in open formats and version control makes switching tools a smaller project.
9Push Versus Pull: Two Ways to Reach Many Clusters
Every delivery tool must choose between pushing changes out from the center and letting each cluster pull them in.
There are two basic shapes for delivering configuration to a fleet. In the push model, the central hub holds credentials to every member cluster and applies changes to them directly. In the pull model, each member cluster runs a small agent that reaches out to a trusted source, such as a Git repository or the hub, and applies what it finds. Both work, and each has strengths and weaknesses that matter a great deal at scale and in sensitive networks.
flowchart LR
subgraph PUSH["Push model"]
H1["Hub with credentials"] --> M1["Member cluster A"]
H1 --> M2["Member cluster B"]
end
subgraph PULL["Pull model"]
G["Git or hub source"] --> A1["Agent in cluster C"]
G --> A2["Agent in cluster D"]
end
| Question | Push Model | Pull Model |
|---|---|---|
| Where do credentials live? | The hub holds access to every cluster | Each cluster holds only a read credential for the source |
| Network direction | Hub must reach every cluster | Clusters only need outbound access |
| Behind firewalls or at the edge | Harder | Easier |
| Scaling | The hub does the work for all clusters | Work is spread across clusters |
| Immediate feedback | Simple to see results at the center | Needs status to be reported back |
| Blast radius of hub compromise | Large, since the hub can touch everything | Smaller, since clusters choose what to apply |
A head office can phone every branch and read out the new instructions, which is push. Or it can post the instructions on a notice board that each branch checks every morning, which is pull. The phone approach is fast but needs a line to every branch. The notice board works even for branches in remote places.
Many fleets use pull for edge and sensitive clusters, and push or hub-managed delivery for clusters inside a trusted network. Choose per group of clusters, not once for everything.
10GitOps for Fleets: The Foundation of Delivery
Most fleet delivery tools are built on one idea: Git holds the truth, and software makes reality match it.
GitOps means that the desired state of your systems is stored in a version control repository. Software running in or near the cluster continuously compares the repository with the cluster and corrects any difference. Every change is a reviewed commit, every commit has an author and a time, and rolling back means reverting a commit. For one cluster this is neat. For a fleet it is transformative, because one repository can describe every cluster, and the same review process protects them all.
Change is proposed in Git
An engineer edits the desired state and opens a review, instead of touching clusters directly.
Review and automated checks
Teammates and automated checks examine the change, including policy checks and tests.
Merge records the decision
The merged commit becomes the new desired state, with a permanent history.
Controllers reconcile
Delivery controllers notice the change and apply it to the matching clusters in the order you defined.
Drift is corrected
If anyone changes a cluster by hand, the controller notices and either reports or restores the declared state.
Think of a shared recipe book that every branch kitchen must follow. A cook who wants to change the recipe proposes the edit, the head chef reviews it, and after approval every kitchen updates. If a branch cook secretly adds extra salt, the weekly inspector notices and corrects it.
How repositories are organized for fleets
Shared base plus per-cluster folders
A common base holds what every cluster needs. Small folders per cluster or per group add differences.
Per-environment branches or folders
Development, staging and production each have their own area, so promotion is an explicit act.
Separate repositories by ownership
The platform team owns a repository of shared add-ons. Application teams own their own repositories.
Generated definitions
Templates and generators build per-cluster definitions from a short list of cluster properties.
Copying the full definition into a separate folder for every cluster brings drift back into Git itself. Keep one shared base and make cluster folders small.
11Argo CD and ApplicationSets
Argo CD is one of the most widely used GitOps tools, and its generator feature turns one template into many cluster deployments.
Argo CD is a GitOps delivery tool and a graduated project of the Cloud Native Computing Foundation. It watches Git repositories and applies what it finds to clusters. A single Argo CD installation can be told about many clusters by registering them, which makes it a natural hub in a push-style fleet design. Its friendly web interface shows every application, its health and whether it matches Git, which is a big help for people who are new to GitOps.
For fleets, the key feature is the ApplicationSet. Instead of writing one application definition for every cluster, you write a single template and a generator. The generator produces a list of targets, and the template is filled in once for each target. When a new cluster is registered and carries the right labels, the generator notices, and the applications appear on the new cluster automatically.
flowchart LR
A["One ApplicationSet template"] --> B["Generator finds clusters by label"]
B --> C["Application for cluster 1"]
B --> D["Application for cluster 2"]
B --> E["Application for cluster 3"]
C --> F["Cluster 1 matches Git"]
D --> G["Cluster 2 matches Git"]
E --> H["Cluster 3 matches Git"]
Cluster generator
Creates an application for every registered cluster that matches a label selector, such as all production clusters in a region.
List generator
Uses an explicit list of targets and values, useful for small, hand-picked sets.
Git generator
Reads folders or files in a repository and makes one application per folder or per file entry.
Matrix and merge combinations
Combine generators, for example every application folder multiplied by every matching cluster.
A printing press does not need a separate plate for every copy of a newspaper. One plate makes thousands of copies, and the delivery list decides which neighborhood gets each bundle. The template is the plate, and the generator is the delivery list.
Things to plan for
Advantages
- Excellent visibility through a rich interface
- Flexible generators for many fleet layouts
- Strong community and wide ecosystem
- Clear health and sync status per application
Disadvantages / Trade-offs
- A central hub with credentials for many clusters is a sensitive target
- A single hub must be sized and made highly available for large fleets
- Network access from the hub to each cluster is required in the classic design
- Agent-based and sharded designs exist but add moving parts, so check current options
A generator that matches too many clusters can roll a change out much more widely than intended. Use careful selectors, review changes to generators as seriously as changes to applications, and use progressive rollout features where available.
12Flux: Pull-Based GitOps in Every Cluster
Flux takes the pull approach: every cluster runs its own small set of controllers that read from Git.
Flux is another graduated Cloud Native Computing Foundation project for GitOps. Its design is a set of focused controllers that run inside each cluster. One controller fetches sources such as Git repositories or container registries that hold configuration. Others apply plain configuration, render package-style templates and watch for new image versions. Because each cluster reaches out for its own configuration, the central point does not need credentials to every cluster, and clusters behind firewalls or at the edge are easy to include.
Source controller
Fetches repositories and artifacts and makes them available inside the cluster.
Configuration controller
Applies the configuration found in a source and keeps the cluster matching it, including removing things deleted from Git.
Package controller
Installs and upgrades packaged applications in the common chart format.
Notification and image controllers
Send alerts to chat tools and optionally update Git when new image versions appear.
Instead of a head office phoning every branch, each branch manager checks the shared notice board every few minutes and updates their own shop. No phone line to every branch is needed, and a branch with poor connections catches up whenever it can.
Fleet layouts with Flux
For fleets, the common pattern is a repository with a shared base for add-ons and applications, and a small set of folders describing each cluster or group of clusters. Each cluster is bootstrapped once to point at its own folder. Flux also has a feature for managing remote clusters from one place, using stored access, for teams that prefer a hub-style design, so the choice of push or pull is flexible.
| Question | Argo CD Style | Flux Style |
|---|---|---|
| Where do controllers run? | Usually in a central hub | Usually in every cluster |
| Main interface | Rich web interface | Command line and resources, with optional dashboards from other projects |
| Fan-out to many clusters | ApplicationSet generators | Repository structure and per-cluster bootstrap |
| Credential model | Hub stores access to clusters | Each cluster holds only a read credential for sources |
| Good fit | Teams that want visibility and central control | Teams that want decentralization, edge and strong isolation |
Choosing between these two is rarely a mistake. The more important decisions are your repository layout, your promotion process and your rollout order. Pick one, learn it deeply and invest in the layout.
13Rancher Fleet: GitOps Built for Very Large Numbers
Some tools are designed from the start for thousands of clusters, and Fleet from the Rancher ecosystem is one of them.
Fleet is a GitOps engine that comes from the Rancher project, now stewarded by SUSE. It is designed for managing very large numbers of clusters, including small ones at the edge. A central manager reads Git repositories and turns their contents into bundles. A small agent in each downstream cluster pulls the bundles meant for it and applies them. Clusters are organized into groups using labels, and bundles are targeted at groups, so adding a cluster with the right label is enough to give it the standard setup.
Register repositories
Tell the central manager which Git repositories and folders hold configuration.
Group the clusters
Labels or cluster groups describe which clusters belong together, for example all store clusters in one country.
Target the bundles
Each folder is turned into a bundle with rules about which groups should receive it and what to customize per group.
Agents apply and report
Agents in each cluster apply the bundles and report status back, so the manager shows an overall picture.
A retail chain with thousands of tiny kiosks cannot send an engineer to each one. Instead, each kiosk has a small receiver that fetches the latest menu from head office on its own. Fleet is that receiver and the head office catalog.
Where it shines
Retail stores, factories, vehicles and branch offices where there are many small clusters, unreliable connections and a need for the same baseline everywhere, with small differences per site.
Fleet can be used inside the Rancher management product or as a separate component. Check the current documentation for supported deployment modes before planning.
14Workload Propagation: Karmada and Open Cluster Management
GitOps tools copy files to clusters. Propagation tools go further and treat the whole fleet as one place to run workloads.
There is a second family of fleet tools that thinks differently. Instead of syncing a repository to each cluster, they let you create an ordinary Kubernetes resource once in a central control plane and then use policies to spread it to member clusters. The tool takes care of where it runs, can adjust it for each cluster, can collect status from all of them and can move work between clusters when one fails. This feels like using one big virtual cluster made out of many real ones.
Karmada is a well-known example. According to news reports in September 2026, it reached graduated status in the Cloud Native Computing Foundation, the highest maturity level. It keeps ordinary Kubernetes manifests unchanged and adds two main policy resources: a propagation policy that decides which clusters get a workload, and an override policy that adjusts the workload per cluster, region or provider. Open Cluster Management is another community project built around a hub and spokes. It uses an agent in each managed cluster, work resources that carry manifests to a cluster and placement resources that choose which clusters should receive them.
flowchart TD
A["User creates a normal workload on the control plane"] --> B["Propagation policy chooses clusters"]
B --> C["Override policy adjusts per cluster"]
C --> D["Workload runs in cluster in region A"]
C --> E["Workload runs in cluster in region B"]
C --> F["Workload runs in cluster at the edge"]
D --> G["Status collected back to control plane"]
E --> G
F --> G
| Idea | GitOps Delivery Tools | Propagation Tools |
|---|---|---|
| Starting point | Files in Git | Resources created on a central control plane |
| Main strength | Audit trail, review process, drift correction | Placement, failover and fleet-wide scheduling |
| Status view | Per application sync status | Aggregated status across clusters |
| Failover between clusters | Usually not built in | Often a built-in capability |
| Can be combined | Yes. Many teams store propagation policies in Git and apply them with a GitOps tool. | |
GitOps is like mailing the same instruction sheet to every branch. Propagation is like a dispatcher who says “put three delivery vans in the north, two in the south, and if the southern depot closes, move its vans north”. The dispatcher thinks about where to place work, not only what to say.
Stateless services are easy to spread. Workloads that depend on local storage, special hardware or specific network addresses need extra thought before they are placed or failed over automatically.
Earlier community efforts at federating Kubernetes were retired. Today’s tools are more modest and flexible, preferring to keep standard resources unchanged. Always check a project’s current maturity and activity before adopting it.
15Placement: Deciding Which Clusters Get Which Workloads
With many clusters, the question of where a workload should run becomes a design decision of its own.
Placement is the set of rules that decide which clusters receive a workload. The simplest rule is “all clusters”. More useful rules look at labels such as environment, region, provider or capability. A workload that needs a graphics processor should only be placed on clusters labeled as having one. A service that must stay in a country should only be placed on clusters in that country. Good placement rules are readable, based on labels and safe by default.
By label
Choose clusters whose labels match, such as environment production and region in Europe.
By capability
Choose clusters that have required hardware or add-ons, such as accelerators or a particular storage type.
By capacity
Prefer clusters with spare resources, using reported available capacity.
By spread
Require that replicas land in several regions or providers to avoid a single point of failure.
By priority
Give important workloads first choice when capacity is short. Some tools support priority-based scheduling for this.
By cost
Prefer cheaper clusters or providers for work that is flexible about where it runs.
A logistics company decides which warehouse should ship each order. It considers where the goods are stored, how close the customer is, which warehouse is busy and which is cheapest. Placement rules are the dispatcher’s checklist.
Nearly every placement decision depends on cluster labels. Agree on a small, documented set of label names and values early, and enforce them when clusters are registered.
Problem
Cluster labels invented ad hoc by each team, with different names and meanings.
Why It’s Harmful
Placement rules become unreliable. A rule meant for production clusters may miss some or hit others, and nobody can trust the fleet inventory.
Correct Approach
Define a label standard, validate labels when a cluster is registered and review changes to labels as carefully as code.
16Overrides: Small Differences on a Shared Base
Clusters are never completely identical. Overrides let you keep one shared definition and describe only the differences.
A production cluster in Europe may need more replicas than one in a small region. A cluster in one cloud may need a different storage class than a cluster in another. A cluster in a regulated country may need different logging settings. Writing a complete separate definition for each cluster invites mistakes. A better approach is one shared base definition plus small overrides that change only what must differ.
flowchart LR
A["Shared base definition"] --> B["Override for region A"]
A --> C["Override for region B"]
A --> D["Override for edge sites"]
B --> E["Final definition cluster A"]
C --> F["Final definition cluster B"]
D --> G["Final definition edge sites"]
Keep the base boring
The base contains everything that should be the same everywhere and nothing that is clearly local.
Group by real differences
Create overrides per region, provider, tier or size class rather than per individual cluster wherever possible.
Keep overrides small and explicit
Each override changes a few named settings and explains why in a comment or description.
Review the final result
Use tooling that shows the final rendered definition for a cluster, so people can see the combined effect.
A franchise uses one standard menu and allows each country to change a few items, such as a local sauce. If every country rewrote the whole menu, it would no longer be the same brand. Overrides keep the brand consistent while allowing local taste.
Overrides tend to multiply. When a cluster has dozens of unique overrides, it is no longer part of the fleet in any meaningful way. Track the number of overrides per cluster and treat a growing count as a warning.
17Rolling Out Changes in Waves
The power to change fifty clusters at once is also the power to break fifty clusters at once. Waves make it safe.
The most important fleet safety habit is to never change every cluster at the same moment. Instead, changes move through the fleet in rings. The first ring is a small group of low-risk clusters, such as development or internal ones. If the change behaves well there for some time, it moves to the next ring, and so on until production clusters are updated last. If a problem appears early, the rollout stops while only a few clusters are affected.
flowchart LR
A["Ring 0: lab and test clusters"] --> B["Wait and verify"]
B --> C["Ring 1: internal and low-risk clusters"]
C --> D["Wait and verify"]
D --> E["Ring 2: small share of production"]
E --> F["Wait and verify"]
F --> G["Ring 3: remaining production"]
Kubernetes version upgrades
Move clusters to a new version ring by ring, checking workloads and add-ons at each stage.
Add-on and controller updates
Roll out new versions of shared tools such as ingress, policy engines and monitoring agents carefully.
Application releases
Release a new application version to a few clusters first, then expand.
Policy changes
Introduce a new rule in audit mode on a few clusters before enforcing it everywhere.
A restaurant chain tests a new recipe in one branch for a week before changing all branches. If customers dislike it, only one branch suffers. Rings are that test branch, repeated in stages.
What to check between waves
Signals That Say Continue
- Error rates and latency match the baseline
- No new alerts or restart loops
- Add-ons and nodes report healthy
- The agreed waiting time has passed
Signals That Say Stop
- Rising errors or slower responses
- Failed or stuck rollouts on any cluster
- Unexpected resource pressure after the change
- Support reports from users of the changed clusters
Where tools allow, make the system pause automatically between waves and continue only when health checks pass. People are slow and tired at the worst moments. Automation is not.
18Detecting and Handling Drift
Even with the best tools, someone will eventually change a cluster by hand. A good fleet notices.
Drift is any difference between the desired state in Git and the live state in a cluster. It usually begins innocently. An engineer fixes an urgent problem directly in a cluster, intending to update Git later, and forgets. Over time, the clusters differ from the plan, and the next automated change may fail or silently undo the fix. Fleet tools can detect drift continuously and respond in different ways.
| Response | What Happens | Best For |
|---|---|---|
| Report only | The tool marks the difference and alerts people but changes nothing | Early adoption and sensitive clusters |
| Auto-correct | The tool restores the declared state automatically | Mature setups with confidence in Git as truth |
| Block changes | Policy prevents manual edits to managed resources | High security or regulated clusters |
| Adopt the change | People review the difference and copy it into Git | Cases where the manual fix was actually correct |
A museum has a written plan for where each painting hangs. A guard who finds a painting moved can report it, put it back, lock the room or decide the new position is better and update the plan. Which response is right depends on the museum and the painting.
Emergency access without chaos
Banning all manual changes is unrealistic, because real emergencies demand speed. A sensible approach is a documented break-glass process. Engineers may change a cluster directly in an emergency, the access is logged and time-limited, and the fix must be copied into Git within an agreed time, after which drift detection is clean again. This keeps both speed and discipline.
If a tool quietly reverts changes, a recurring manual fix may be undone every few minutes while someone wonders why the problem keeps returning. Alert on drift events even when they are corrected automatically.
19Policy at Fleet Scale
Rules written once should protect every cluster, and you should be able to prove it.
Security and compliance rules are only as strong as their weakest cluster. Policy engines for Kubernetes, such as Kyverno and Gatekeeper, let you write rules such as “no privileged containers” or “all images must come from approved registries”. In a fleet, those policies are delivered like any other configuration: stored in Git, distributed by your delivery tools and installed on each cluster. Reports from each cluster flow back, so the center can see which clusters comply.
Write policies once in a central repository
The security team owns the shared rules, with reviews and tests.
Distribute by group
Delivery tools install the engine and the policies on every cluster that matches, with stricter sets for production.
Start in audit mode
New rules report violations first, giving teams time to fix them before enforcement.
Collect results centrally
Policy reports from every cluster feed a fleet dashboard showing which clusters and teams are compliant.
Enforce in waves
Move rules from audit to enforce ring by ring, with announcements and a clear exception process.
A national food safety law is only meaningful if every restaurant is inspected and the results are collected. Writing the law is the policy. Visiting every restaurant and recording results is the fleet-wide reporting.
A policy engine on every cluster must itself be upgraded, monitored and kept consistent. Include it in your baseline bundle and your ring-based rollouts.
20Identity, Access and Security Across the Fleet
Who may do what, on which cluster, is much harder to answer when there are fifty clusters.
Every cluster has its own access rules, called role-based access control. Maintaining them by hand across many clusters leads to people with leftover access, inconsistent roles and slow removal when someone leaves. Fleet security therefore starts with connecting every cluster to one identity system, so that a person logs in with their company account and receives roles based on group membership. Removing someone from a group removes access everywhere.
Single sign-on
Use the company identity provider for all clusters so accounts and groups are managed in one place.
Standard roles
Define a small set of roles, such as viewer, developer and administrator, and deliver them to every cluster as configuration.
Short-lived access
Grant elevated permissions for limited time windows with approvals and logs.
Hub protection
Treat the management cluster and any fleet credentials as the most sensitive assets, with strict access and monitoring.
An office building with fifty doors is safer when every employee has one badge that is switched on or off centrally, instead of fifty separate keys that must be collected when someone resigns.
Problem
Shared administrator credentials, passed around by chat, used on every cluster.
Why It’s Harmful
Nobody knows who did what, access cannot be removed for one person and a single leak exposes the whole fleet.
Correct Approach
Use individual identities through single sign-on, short-lived elevated access and audit logs shipped to a central place.
In push-style designs, whoever controls the hub controls every member cluster. Lock it down, separate who may change fleet configuration from who may log in to it and monitor every action.
21Secrets Across Many Clusters
GitOps wants everything in Git, but passwords and keys must never sit in Git as plain text.
A fleet needs secrets such as database passwords, access tokens and certificates, and every cluster may need a different set. The tension is clear: the whole fleet idea is to keep desired state in Git, yet secrets cannot be stored openly there. Several patterns solve this, and choosing among them is one of the most important fleet design decisions.
Encrypted secrets in Git
Secrets are encrypted before being committed. Only a key held by the cluster or a trusted system can decrypt them.
External secret store
Secrets live in a dedicated vault. A controller in each cluster fetches the ones that cluster is allowed to see and creates Kubernetes secrets from them.
Workload identity
Applications prove who they are with short-lived identity and fetch secrets directly, so no long-lived password is stored in the cluster at all.
Hub-distributed secrets
A central tool distributes secrets to member clusters. Simple, but it concentrates risk at the hub.
A hotel does not write guest room codes on the public notice board. It keeps them in a safe at the front desk and gives each guest only their own code. An external secret store is that safe, and each cluster is a guest who receives only what it needs.
Rotation matters more than storage
Where secrets are stored is only half the question. The other half is how quickly you can change them. When a secret leaks, you must replace it everywhere it is used, fast. Fleets that fetch secrets from a central store can rotate them in one place. Fleets with secrets baked into each cluster face a slow, manual scramble.
A secret committed in clear text stays in Git history forever, even after deletion. Use automated scanning in your repositories to catch accidents early, and treat any exposed secret as compromised.
22Multi-Cluster Networking and Service Discovery
By default, clusters are islands. Fleet networking builds bridges when services in different clusters must talk.
Inside one cluster, pods find each other easily. Between clusters, there is no such automatic discovery. If a service in one cluster needs to call a service in another, you must decide how. Some fleets keep clusters fully independent and expose shared services through ordinary public or private addresses. Others connect cluster networks so that pods can reach each other directly and a service can be discovered across clusters as if it were local.
flowchart LR
subgraph C1["Cluster 1"]
A["Client pod"]
S1["Service backends"]
end
subgraph C2["Cluster 2"]
S2["Service backends"]
end
A --> S1
A -- "cross-cluster link" --> S2
| Approach | How It Works | Good For | Watch Out For |
|---|---|---|---|
| Independent clusters with public or private endpoints | Services are exposed through normal load balancers and DNS names | Simple, loosely coupled setups | Manual discovery, more public exposure |
| Standard multi-cluster service API | A community standard lets a service be exported from one cluster and imported by others | Portable discovery across tools that support it | Depends on a compatible network layer |
| Cluster mesh in the network plugin | The network plugin connects clusters and shares services directly | High performance, low overhead | Requires compatible networking in every cluster |
| Service mesh across clusters | A service mesh links proxies in several clusters with shared identity and routing rules | Rich traffic control and security between clusters | More complexity and operational cost |
| Tunnel-style connectors | Secure tunnels link otherwise separate cluster networks | Connecting different environments | Address overlaps, throughput limits |
Villages on separate islands can trade by ship, by bridge or by a shared telephone exchange. Each approach has a cost and a speed. Cross-cluster networking is the choice between ships, bridges and telephones.
Connecting clusters whose internal address ranges overlap is painful. Allocate unique address ranges for every cluster from the start, even if you do not plan to connect them yet.
The more deeply clusters depend on each other’s networks, the more a failure in one can spread to others. Connect clusters only for services that truly need it.
23Global Traffic and Failover
When the same application runs in several clusters, something must decide where each user’s request goes.
If an application runs in clusters in three regions, users need to be sent to the best one. That decision happens above the clusters, using global load balancing, geographic DNS or an edge network. The system checks the health of each region and sends users to the nearest healthy one. If a whole region fails, traffic shifts to the others. This is the user-facing half of multi-cluster resilience, and it needs to be tested as carefully as the cluster half.
flowchart TD
U["Users"] --> G["Global traffic layer with health checks"]
G --> R1["Cluster in region 1"]
G --> R2["Cluster in region 2"]
G --> R3["Cluster in region 3"]
R2 -. "region fails" .-> X["Marked unhealthy, traffic moves to others"]
Active-active
All regions serve users at the same time. Best use of capacity and fastest failover, but data must be shared or replicated carefully.
Active-passive
One region serves and another waits ready. Simpler for data, but the standby costs money and must be proven to work.
Regional pinning
Users of each country are always served from one region for legal or latency reasons.
Weighted and gradual shifts
Send a controlled share of traffic to a cluster, useful for new clusters and safe migrations.
A taxi dispatcher sends each customer to the nearest available car. If a depot floods, the dispatcher stops sending cars from it. The traffic layer is the dispatcher, and health checks are the radio calls reporting which depots are open.
Moving traffic is easy. Moving data is not. Before relying on multi-region failover, be clear about where state lives, how fast it replicates and how much loss you can accept.
24Fleet-Wide Observability
You need to see every cluster at once, without jumping between fifty separate dashboards.
Each cluster produces metrics, logs and traces. If each cluster keeps its own data in its own tools, understanding the fleet means opening dozens of screens. Fleet observability gathers data into shared places. A common design keeps a small collector in each cluster that forwards data to a central platform, or keeps data locally and lets a central query layer search across all clusters. Both approaches aim at the same result: one dashboard where you can compare clusters side by side.
flowchart LR
A["Cluster 1 collectors"] --> D["Central metrics store"]
B["Cluster 2 collectors"] --> D
C["Cluster 3 collectors"] --> D
A --> E["Central log store"]
B --> E
C --> E
D --> F["Fleet dashboards and alerts"]
E --> F
| Design | How It Works | Strength | Trade-off |
|---|---|---|---|
| Forward everything to a central store | Collectors in each cluster send data to one platform | One place to query and alert | Network cost and a central system that must scale |
| Keep data local, query globally | Each cluster stores its own data and a query layer fans out searches | Less data movement | Slower queries and dependence on every cluster being reachable |
| Hybrid with summaries | Detailed data stays local and key summaries go to the center | Good balance of cost and visibility | Detail needs a second step to reach |
A chain of shops can send every receipt to head office, or keep receipts in each shop and send daily totals. Sending everything gives complete answers at high cost. Sending totals is cheap but needs a trip to the shop for detail.
Labels make fleet data useful
Every metric and log line should carry the name of the cluster, its region, its environment and its owner. Without these labels, data from many clusters becomes a muddle. With them, you can ask fleet questions such as which clusters in Europe have the highest error rate, or which clusters have restarted pods in the last hour.
The management cluster, delivery controllers and cluster provisioning components are critical. Give them their own alerts, such as sync failures, stuck cluster upgrades and unreachable member clusters.
25Cost Visibility and Fleet Efficiency
A fleet can hide a lot of waste. Seeing cost by cluster, team and workload is the first step to reducing it.
Every cluster has a baseline cost before any application runs: control plane fees, base machines, load balancers, monitoring and storage. Multiply that by fifty clusters and the baseline is substantial. On top of that, over-sized machines, idle test clusters and forgotten experiments quietly add up. Fleet cost management starts with allocation: tagging every resource so you know which team or product owns each cluster, then measuring how much of the paid capacity is actually used.
Consolidate
Merge small, underused clusters where isolation requirements allow, since each cluster has fixed overhead.
Right-size
Match machine sizes and counts to real usage rather than guesses.
Schedule non-production
Turn development and test clusters down at night and on weekends.
Expire temporary clusters
Give short-lived clusters an owner and an end date, and remove them automatically.
Use discounted capacity wisely
Run flexible workloads on cheaper interruptible machines and keep critical ones on stable capacity.
Show cost to owners
People manage what they can see. Send each team a regular cost report for their clusters.
A company with many small offices pays rent, electricity and internet for each one, even if only three people work in some of them. Combining offices and switching off empty rooms cuts cost without reducing anyone’s work.
Consolidation lowers overhead but enlarges the blast radius of a failure. The right balance depends on your isolation, compliance and reliability needs, so cost is one input to the decision, not the only one.
26Backup and Disaster Recovery for a Fleet
A fleet gives you more places to run, which only helps if you can actually recover into them.
Disaster recovery in a fleet has several layers. First, you must be able to rebuild a cluster from its description, which declarative lifecycle tools provide. Second, you must be able to restore its applications and configuration, which GitOps provides. Third, you must be able to restore its data, which needs backups and replication. Many teams have the first two and forget the third, which is where the real loss occurs.
Rebuild the cluster
Create a replacement cluster from its stored definition in a healthy region.
Reapply configuration
Let the delivery tools install the baseline add-ons, policies and applications from Git.
Restore data
Restore volumes and databases from backups or promote replicas, according to the recovery plan.
Shift traffic
Gradually send users to the recovered cluster and watch health closely.
Review and improve
Record how long each step took and fix whatever was slow or missing.
If a shop burns down, you need the building plan to rebuild, the shelf layout to restock and the sales ledger to know who owes what. A fleet’s cluster definitions, Git configuration and data backups are the plan, the layout and the ledger.
A recovery plan that has never been rehearsed is only a hope. Schedule regular drills where you actually rebuild a non-critical cluster from scratch and measure how long it takes.
Remember to protect the management cluster and the secrets that unlock the rest of the fleet. They are the starting point for every recovery.
27Fleet Topologies: How to Arrange Hubs and Members
The way you connect management clusters to member clusters shapes your reliability, security and scale.
flowchart TD
subgraph T1["Single hub"]
H1["Hub"] --> A1["Members"]
end
subgraph T2["Regional hubs"]
H2["Global control"] --> R1["Regional hub 1"]
H2 --> R2["Regional hub 2"]
R1 --> A2["Members in region 1"]
R2 --> A3["Members in region 2"]
end
subgraph T3["Peer clusters with no hub"]
P1["Cluster"] --- P2["Cluster"]
P2 --- P3["Cluster"]
end
| Topology | Strengths | Weaknesses | Good For |
|---|---|---|---|
| Single hub | Simple, one place to look | Single point of failure and large blast radius | Small and medium fleets |
| Regional hubs | Better scale and fault isolation, closer to members | More hubs to operate and keep consistent | Large, geographically spread fleets |
| Hub per environment | Strict separation of production from non-production | Changes must be promoted between hubs | Regulated organizations |
| Hub-less, pull-based clusters | No central dependency, each cluster is self-reliant | Harder to get a single view and to coordinate waves | Edge fleets, highly sensitive clusters |
A company can have one head office, regional offices that report to a head office, separate offices for different business lines, or fully independent branches that follow the same rulebook. Each structure trades simplicity for resilience and independence.
Begin with one hub and add regional or environment hubs when scale or isolation demands it. Moving from one hub to several is easier if your desired state is already in Git and your clusters are labeled consistently.
28Protecting the Management Plane
The hub is the most powerful and most dangerous part of a fleet. Treat it that way.
The management plane holds the desired state, credentials or agents for every cluster, and the power to change them all. Losing it means losing control. Compromising it means an attacker controls everything. Yet teams often treat the management cluster casually, running it with the same care as a test cluster. A mature fleet protects it more carefully than any other cluster.
Highly available
Run several replicas across failure zones, with backups and tested restore, so a single failure cannot halt fleet operations.
Minimal workload
Run only fleet tools on the hub. Application workloads on the same cluster expand the attack surface.
Strict access
Limit who can log in, require strong authentication and keep detailed audit logs.
Graceful degradation
Design members so they keep serving users, with their last known configuration, even if the hub is unreachable.
The control tower of an airport is guarded, duplicated and supported by backup power. If the tower fails, planes in the air must still be able to land safely using fallback procedures. The hub deserves the same treatment, and members need their own fallback.
Problem
Running the fleet hub and ordinary applications together on one general-purpose cluster.
Why It’s Harmful
An application incident can take down fleet management, and a compromised application becomes a path to every member cluster.
Correct Approach
Keep the hub dedicated, small and tightly controlled, separate from application clusters.
Deliberately make the hub unavailable in a test environment and confirm that members keep running, that you can still recover and that alerts fire. Many fleets discover hidden hub dependencies only during real outages.
29Edge and Disconnected Fleets
Clusters in shops, factories and vehicles live in conditions that cloud data centers never face.
An edge fleet may contain hundreds or thousands of small clusters, sometimes a single machine each, in places with weak or intermittent connectivity. Nobody is there to fix them physically. Power cuts happen. Connections drop for hours. The management design must assume that a cluster is often unreachable and must still behave sensibly, and that every operation must be safe to repeat.
Pull, never push
Edge clusters reach out to fetch their configuration, because inbound connections to remote sites are often blocked.
Work offline
Local applications keep working with their last known configuration when the connection to the center is lost.
Update safely
Updates must be able to roll back automatically if the new version fails, because no engineer is on site.
Report in small messages
Status travels in compact form, and the center tolerates stale information from sites that are temporarily offline.
Provision without touching
New devices should find their configuration on first power-on, so installers need little technical skill.
A ship at sea cannot call a mechanic. It carries spare parts, manuals and a captain who can keep going alone, then reports to the port when it arrives. Edge clusters must be built like ships.
Example: A national retail chain
A retailer runs a small cluster in each of two thousand stores. Each cluster pulls its baseline from Git, runs checkout helpers locally and reports health in short messages. A new store opens, its cluster boots, joins the right group by label and installs everything automatically within minutes.
At the edge, every extra component costs memory and attention on thousands of devices. Choose lightweight Kubernetes distributions and keep the agent set minimal.
30Multi-Tenancy: Clusters, Namespaces or Virtual Clusters?
Many fleets exist only because of isolation. There are cheaper ways to isolate than a new cluster.
When teams need to be kept apart, the instinctive answer is one cluster per team. That gives strong isolation but costs overhead and adds to the fleet. There are two lighter options. Namespaces divide one cluster into logical sections with quotas and access rules. Virtual clusters create a lightweight, separate Kubernetes control plane for each tenant inside a shared host cluster, which feels like a private cluster at much lower cost. Choosing among the three is a trade between isolation strength and cost.
| Option | Isolation | Cost and Overhead | Best For |
|---|---|---|---|
| Namespace per tenant | Logical, shared control plane and nodes | Lowest | Trusted teams in one organization |
| Virtual cluster per tenant | Separate control plane, shared nodes | Low to moderate | Teams that need admin-like freedom, short-lived environments, test clusters |
| Dedicated node pools | Separate machines with shared control plane | Moderate | Noisy or sensitive workloads in a trusted setting |
| Cluster per tenant | Strongest, fully separate | Highest | Regulated data, hostile tenants, different versions or regions |
Housing choices range from a shared dormitory room, to a private room in a shared house, to a separate apartment in the same building, to a detached house. Each gives more privacy at more cost. Pick the lightest option that meets the privacy you truly need.
Ask for each new cluster request: what isolation does this need that a namespace or virtual cluster cannot provide? Often the honest answer saves thousands of dollars and hours of operations.
Where tenants do not trust each other, such as customers running their own code, shared nodes are risky. Use dedicated machines or separate clusters for those cases.
31Comparing the Tools Side by Side
Each fleet tool grew from a different need, so each one is strongest at a different job.
No single product covers every fleet task. Some tools are excellent at delivering applications, some at creating and upgrading clusters, some at spreading one object to many clusters, and some at enforcing rules. The table below compares the families discussed in this guide. Treat it as a map of strengths, not a ranking, because the best choice depends on your size, your team and your existing habits.
| Tool Family | Main Job | Delivery Style | Best For | Watch Out For |
|---|---|---|---|---|
| Argo CD with ApplicationSets | Deliver applications from Git to many clusters | Hub watches Git and applies to members | Teams wanting a visual interface and flexible generators | Hub holds credentials to every member; hub sizing at large scale |
| Flux | Deliver applications and configuration from Git | Controllers inside each member pull from Git | Teams preferring pull, composable controllers and no central credentials | Less central visibility unless you add reporting |
| Rancher Fleet | Deliver bundles to very large or edge fleets | Agents in members pull bundles from the hub | Thousands of clusters, edge sites, mixed environments | Fewer community add-ons than the two above |
| Karmada | Propagate native objects and spread workloads across clusters | Hub control plane pushes to members | Teams wanting one API that feels like a single big cluster | Another control plane to run and protect |
| Open Cluster Management | Hub and spoke management with placement decisions | Agents in members pull work from the hub | Organizations needing strong placement and governance | Concepts take time to learn |
| Cluster API | Create, upgrade and delete clusters as objects | Management cluster reconciles infrastructure | Teams that build many clusters themselves | Provider differences; management cluster is critical |
| Cloud provider fleet services | Group managed clusters with shared features | Provider-hosted | Teams already committed to one cloud | Lock-in and differing feature sets |
| Policy engines | Enforce and audit rules in every cluster | Admission checks in each member | Every fleet, regardless of other choices | Rolling out strict rules too fast |
A construction site needs a surveyor, a crane operator, a delivery driver and a safety inspector. Nobody asks which of them is best, because they do different jobs. Fleet tools are the same: cluster builders, application deliverers, propagators and inspectors work together.
Many tools overlap at the edges. Both Argo CD and Flux can deliver applications, and both Karmada and Open Cluster Management can spread objects. Pick one per job and avoid running two tools that fight over the same objects.
32How to Choose: A Decision Guide
Choose by answering a few honest questions about your size, your people and your risks.
Picking a tool because it is popular is a common way to end up with a platform nobody wants to run. A better way is to start from your own situation. The questions below lead you toward a sensible starting point, and you can always change later because the desired state lives in Git rather than inside the tool.
How many clusters do you have?
A handful can be served by any GitOps tool. Hundreds favor pull-based designs. Thousands, especially at the edge, favor tools built for that scale.
Who builds the clusters?
If you build them yourself, look at Cluster API. If a cloud provider builds them, use that provider’s fleet features for the cluster layer.
Do you need workloads to move between clusters?
If a workload must be spread, failed over or scheduled by capacity, look at propagation tools. If you only need the same thing installed everywhere, GitOps is enough.
How strict is your network?
If members cannot accept inbound connections, choose pull. If the hub can reach every member safely, push is acceptable.
How much do people need to see?
If many teams want a friendly dashboard, favor tools with a strong interface. If your platform team prefers plain objects and alerts, composable controllers fit well.
What skills do you already have?
A tool your team already understands will be safer in its first year than a better tool nobody knows.
Choosing a vehicle depends on whether you carry two people or twenty, drive in a city or on mountain tracks, and whether you have a mechanic nearby. Choosing a fleet tool depends on the same kind of honest questions about your own roads.
Example: A mid-sized company decides
A company with twenty clusters across two clouds builds them with a managed service, wants one visual dashboard for application teams, and does not need to move workloads between clusters. They choose a GitOps tool with generators for delivery, a policy engine for rules, and the cloud services for cluster creation. They skip propagation tools entirely, and nobody misses them.
33The Migration Path: From One Cluster to a Fleet
Nobody builds a fleet in a day. A staged path keeps risk low and lets the team learn as the fleet grows.
Most fleets begin as a single cluster that gradually became several. The goal is to add structure step by step, proving each step before taking the next. The path below works for most organizations, whether they are starting fresh or tidying an untidy collection of clusters.
Take inventory
List every cluster, who owns it, which version it runs, what lives on it and how it was built. Many teams discover clusters they had forgotten.
Name and label
Give every cluster a consistent name and labels for environment, region, owner and purpose. Labels are what every later tool will use to choose targets.
Put the shared baseline in Git
Capture the things every cluster should have, such as policies, monitoring agents and access rules, in a repository. Start by describing what already exists.
Adopt a delivery tool on a low-risk cluster
Pick a development cluster, let the tool take over the baseline, and watch for surprises. Fix the repository until the tool reports no drift.
Expand in rings
Move through development, then testing, then a small production ring, then the rest. Each ring waits until the previous one is healthy.
Automate cluster creation
Once delivery is trusted, make new clusters come from templates. A new cluster should join the fleet and receive the baseline without manual steps.
Add policy, observability and cost views
Layer the fleet-wide rules, the combined dashboards and the cost reports on top of the stable base. These are easier once everything is labeled and consistent.
Practice failure
Rehearse losing a member, losing the hub and rebuilding a cluster from nothing. Update the runbooks with what you learn.
A village becomes a town first by naming its streets, then by laying shared water pipes, and only later by building a town hall. Doing it in that order means nobody has to dig up a road twice.
Teams that jump straight to tools often find unlabeled, unowned clusters that cannot be managed safely. The inventory step feels dull but prevents the worst surprises.
34Day-Two Operations and Runbooks
Setting up a fleet is the easy part. Living with it every day is where the real work lives.
Once the fleet exists, the platform team’s life is made of repeating tasks: upgrading versions, rotating certificates, onboarding new teams, retiring old clusters and answering alerts. Good fleets turn each of these into a written, rehearsed routine called a runbook. A runbook is simply a clear list of steps that anyone on the team can follow, even at three in the morning.
| Routine | How Often | What a Good Runbook Covers |
|---|---|---|
| Kubernetes version upgrade | Several times a year | Which ring goes first, what to check between rings, how long to wait and how to roll back |
| Certificate and credential rotation | On a schedule | Who triggers it, how success is verified and what to do when a member misses it |
| Onboarding a new team | As needed | Namespace creation, access rules, quotas, policies and a first deployment |
| Adding a cluster | As needed | Template use, labels, joining the hub and confirming the baseline arrived |
| Retiring a cluster | As needed | Draining workloads, moving data, removing from the hub, deleting cloud resources and cost checks |
| Responding to a drift alert | When it fires | How to find who changed what, whether to revert or adopt and how to prevent repeats |
| Hub recovery | Rare, but rehearsed | Restoring from backup, reconnecting members and confirming that nothing was lost |
An airline flies thousands of planes safely not because pilots are heroes but because every routine, from pre-flight checks to engine servicing, is written down and practiced. Runbooks are the checklists of a fleet.
Keep the runbooks alive
A runbook that is never used goes stale. Schedule regular rehearsals where a person who did not write the runbook follows it exactly. Every confusing line gets fixed. Store runbooks next to the fleet configuration so that changes to one prompt changes to the other.
When a runbook step is always the same, turn it into automation. Keep the human for decisions and judgment, and give the routine to the machine.
35Compliance and Audit Evidence
Regulated organizations must prove that every cluster follows the rules. A fleet can produce that proof almost automatically.
Auditors ask simple questions: who can access production, which versions are running, were changes approved, and are the rules enforced everywhere? In a hand-built collection of clusters, answering takes weeks of screenshots. In a well-run fleet, the answers are already recorded, because the desired state is in Git, every change is a reviewed commit and the policy engine keeps reports.
Change history
Git shows who proposed each change, who approved it and when it reached each ring.
Policy reports
Policy engines list every object that passes or fails each rule, in every cluster.
Access records
Identity systems show who held which role, and for how long, in every cluster.
Version inventory
A combined view proves that no cluster is running an unsupported version.
A restaurant that logs every fridge temperature automatically passes health inspections easily. A restaurant relying on memory scrambles for days. Fleet evidence is the automatic temperature log.
Audit records are only useful if they cannot be quietly changed. Send logs and reports to storage that the cluster administrators cannot edit.
36Useful Design Patterns
A few proven shapes appear again and again in healthy fleets. Learning them saves you from reinventing them.
Base plus overlay
Keep one shared base and describe each environment or region as a small set of differences. Most files are written once.
Ring-based rollout
Send every change to a small canary group, then wider groups, with automatic pauses on failure.
Cattle, not pets
Treat clusters as replaceable. When one misbehaves, rebuild it from templates rather than nursing it.
Labels as the control surface
Choose targets by labels rather than names, so adding a cluster with the right labels automatically gives it the right content.
Separate platform from applications
Keep the things that make clusters work apart from the things that run on top, with different owners and different change speeds.
Hub as a small, guarded core
Keep the hub lean, backed up and locked down. It does coordination only, never customer workloads.
A franchise restaurant chain uses one master menu, local tweaks for each country, openings in a few test cities before nationwide launches, and a small head office that keeps standards. Every pattern above has a match in that arrangement.
37Anti-Patterns to Avoid
Many fleet failures repeat the same few mistakes. Recognize them early and avoid the pain.
Each cluster is slightly different because people changed things by hand. Nothing can be rolled out safely because nobody knows what each cluster really contains. Fix it by describing every cluster in Git and reporting drift.
A change goes to every cluster in the same minute. When it is wrong, it is wrong everywhere. Use rings and pauses.
The team installs every attractive tool, and three of them manage the same objects. They fight, and nobody understands the result. Choose one tool per job.
Clusters exist with no named owner. They are never upgraded and become security risks. Require an owner label on every cluster and report those without one.
Backups exist but have never been restored. When the hub fails, the team discovers the backups are incomplete. Rehearse recovery regularly.
These mistakes resemble a bus company where every bus has different parts, all buses get new tires on the same morning, three mechanics fight over one engine, some buses have no driver assigned and the spare-parts room has never been checked. It could run for a while, but it would not run well.
38Best Practices Checklist
If you remember only a short list, remember these habits.
Do These
- Describe all clusters and their contents in Git.
- Label every cluster with environment, region, owner and purpose.
- Roll changes out in rings with automatic pauses.
- Run a policy engine in audit mode first, then enforce.
- Back up the hub and rehearse restoring it.
- Give each cluster its own limited credentials.
- Watch version age and drift on a fleet dashboard.
Avoid These
- Hand-editing production clusters.
- Sharing one powerful credential everywhere.
- Putting customer workloads on the hub.
- Copying whole files per cluster instead of using overlays.
- Upgrading every cluster on the same day.
- Keeping clusters nobody owns.
- Adding tools without removing old ones.
Good habits in a kitchen, such as labeling food, cleaning as you go and checking the fridge, prevent most disasters long before any dramatic emergency. Fleet hygiene works the same way.
39Troubleshooting Common Problems
When something goes wrong in a fleet, the same few causes explain most cases. Check them in order.
| Symptom | Likely Cause | First Thing to Check |
|---|---|---|
| A change reached some clusters but not others | Labels do not match the selection rule, or a member lost contact with the hub | The labels on the missing clusters and the connection status of the agent |
| A cluster keeps reverting to its old state | Two tools are managing the same object | Which controllers own the object, and whether both are active |
| The delivery tool shows drift that never clears | Another controller or person keeps changing a field | Which field differs and who last wrote it |
| New cluster never receives the baseline | It has not been registered, or it lacks the required labels | Registration status and label set |
| Hub is slow or runs out of memory | Too many clusters or objects for its size | Resource use of the hub controllers and the number of managed objects |
| Cross-cluster calls fail | Network paths, certificates or service exports are missing | Connectivity between clusters and the export status of the service |
| A policy blocks a valid deployment | The rule is too strict or lacks an exception | The policy report and the exact message returned |
| Upgrade stalls on a ring | A health check is failing, or a pause rule has fired | The health signal named in the rollout rule |
When a bus does not arrive at one stop, you first check whether the route lists the stop, then whether the radio still works, and then whether the road is blocked. Fleet troubleshooting follows the same order: selection, connection, then the destination itself.
Pick one cluster that works and one that does not, and compare their labels, versions and agent health. The difference is usually obvious.
40Real-World Stories from Industry
The shape of fleets differs by industry, but the lessons are surprisingly similar.
Retail: thousands of stores
A retailer runs a small cluster inside each store for checkout and inventory tools. A pull-based tool lets each store fetch updates when its network allows. Rollouts begin at a few pilot stores, then spread in waves overnight, avoiding busy shopping hours.
Finance: strict separation
A bank keeps separate clusters for each business unit and each regulatory region. A policy engine enforces the same security rules everywhere, and automatic reports give auditors evidence without a scramble.
Software company: a global service
A software company runs the same service in many regions for speed and resilience. Global traffic routing sends users to the nearest healthy region, and a failed region is drained within minutes while engineers investigate.
Telecom and manufacturing: edge sites
Companies with equipment at remote sites run tiny clusters that may lose connectivity for hours. Local agents keep applying the last known state and report back when the link returns.
Different delivery companies, such as a parcel carrier, a food courier and a freight shipper, face different roads and customers but all rely on route planning, tracking and consistent vehicles. Industries differ in detail but share fleet fundamentals.
41Frequently Asked Questions
Quick answers to questions beginners ask most often.
You do not need a heavy platform, but a GitOps tool and consistent labels pay off even at three. They are the habits that make growth painless.
It is simpler to manage but riskier, because one failure or one bad upgrade affects everything. Many organizations choose several clusters for isolation, regions and legal reasons.
Pull is usually safer and scales better because members need no inbound access and hold their own credentials. Push is simpler to picture and fine when the network is open and the fleet small.
Yes, if each handles a different job, such as one for creating clusters, one for delivering applications and one for policy. Avoid two tools managing the same objects.
In well-designed fleets, members keep running their workloads with the last known state. You lose the ability to make fleet-wide changes until the hub returns, which is why backups and recovery rehearsals matter.
Keep secret values in a dedicated secret store and let each cluster fetch what it needs, or store them encrypted in Git. Never place plain values in repositories.
By upgrading one ring at a time, starting with development, checking health between rings and keeping a way back. Never upgrade the whole fleet on one day.
A fleet is about managing clusters: creating, configuring and governing them. Multi-cluster networking is about letting applications in different clusters talk to each other. You can have one without the other.
Label everything with owner and purpose, report cost per cluster and team, remove idle clusters and share common services instead of duplicating them.
Only if you want to create and upgrade clusters as Kubernetes objects. If your cloud provider’s managed service already does that well, you may not need it.
Offer templates for clusters and namespaces, enforce rules with policy, and give teams limited access to only what they own.
List your clusters, give each a name, an owner and labels, and start describing the shared baseline in Git. Everything else builds on that.
42Summary and Key Takeaways
Managing many clusters is a discipline of describing, placing, rolling out and watching.
A fleet is a group of clusters managed as one. Its tools fall into layers: creating clusters, delivering content, propagating objects, enforcing rules, connecting networks and observing everything. Choose one tool per job, describe everything in Git, use labels to choose targets, roll out in rings and protect the small hub that coordinates it all. Do these things and the number of clusters stops mattering to the people running them.
Key Takeaways
- A fleet exists to give many clusters one consistent, reviewable and recoverable way of working.
- Store desired state in Git, and let tools reconcile each cluster toward it while reporting drift.
- Prefer pull-based delivery for large, remote or locked-down fleets, and push for small, open ones.
- Use labels and generators so new clusters receive the right content automatically.
- Roll out every change in rings with automatic pauses, never to all clusters at once.
- Enforce fleet-wide rules with a policy engine, starting in audit mode.
- Protect, back up and rehearse recovery of the management hub, because it is the fleet’s most valuable target.