Advanced Cluster Management

Git path: charts/all/acm-hub-spoke/

What problem does it solve?

Running GitOps on three clusters with Argo CD alone means three independent control planes, manual cluster registration, and no fleet-wide policy. ACM gives you a single inventory of hub + spokes, dynamic Placement (which clusters get which workloads), and ManifestWork for hub-initiated changes — without opening VPNs or sharing kubeconfigs in Git.

In this pattern ACM is not optional decoration: it drives PULL GitOps via VP managedClusterGroups, creates PlacementDecisions that feed the fleet-spoke-push ApplicationSet, and runs ManagedClusterAction jobs (Skupper token sync, ACS init bundles, fleet domain patching).

Why ACM and not only Argo ApplicationSet?

Capability Argo ApplicationSet alone ACM + ApplicationSet (this pattern)
Cluster inventory Manual Secret per cluster ManagedCluster auto-import
Dynamic cluster selection Static list or cluster generator Placement + PlacementDecision (label region: east\|west)
Policy / compliance Not built-in Policy + PolicyReport across fleet
Hub → spoke actions Limited to Git-synced apps ManifestWork, ManagedClusterAction, addons
Spoke-local GitOps Separate bootstrap per cluster VP clustergroup on each spoke via managedClusterGroups

ApplicationSet (fleet-spoke-push) handles PUSH — a narrow set of operator charts pushed from the hub. managedClusterGroups handle PULL — Industrial Edge, mesh, observability — where each spoke’s local Argo CD reconciles its own charts/region/east|west/values.yaml. ACM is the glue that knows which clusters exist and which strategy applies where.

Red Hat Advanced Cluster Management for Kubernetes (ACM) provides fleet-wide visibility and lifecycle for OpenShift and Kubernetes clusters. In this repository it anchors hub-spoke registration, policy placement, and integration with OpenShift GitOps via GitOpsCluster and related APIs.

ACM Fleet Management

ACM Fleet Management — east and west managed clusters registered on the hub.

Role in this solution

  • Inventory managed clusters and apply governance policies consistently.
  • Drive which spokes receive Industrial Edge and platform components through placement rules.
  • Coordinate secrets and addons required for klusterlet agents on spokes.

Notable APIs / CRDs (overview)

Typical objects you will encounter:

  • MultiClusterHub — hub installation status.
  • ManagedCluster, ManagedClusterSet — membership grouping.
  • Placement, PlacementDecision — dynamic cluster selection.
  • GitOpsCluster — binds placement results to Argo CD managed clusters.

Install specifics live in the acm-operator and acm-hub-spoke component charts in components/.

Operator discovery

ACM controllers reconcile ManagedCluster, ManagedClusterSet, Placement, PlacementDecision, ManifestWork, and GitOpsCluster APIs directly against etcd — Deployments do not carry ACM annotations for fleet enrollment.

Imported spokes inherit ManagedCluster metadata (labels.annotations), ManagedClusterSet bindings, and feature-addon statuses driven by ManagedClusterAddon controllers — inspect hub namespaces open-cluster-management*, openshift-gitops, and cluster-scope managedcluster objects (oc get managedcluster) rather than hunting workload namespaces.

Documentation