Pourquoi un gestionnaire multi-cluster ?
À mesure que les organisations adoptent Kubernetes à grande échelle, elles se retrouvent à opérer des dizaines, voire des centaines de clusters — production, staging, dev, par région, par équipe. Sans outil centralisé, la gestion devient rapidement ingérable : configurations divergentes, visibilité fragmentée, application manuelle des politiques de sécurité.
Red Hat Advanced Cluster Management (ACM) répond à ce défi en fournissant un plan de contrôle unique pour :
- Observer tous les clusters depuis un seul dashboard
- Appliquer des politiques de configuration et de sécurité sur l’ensemble du parc
- Déployer des applications sur plusieurs clusters via GitOps
- Automatiser le provisionnement de nouveaux clusters (Hive)
Architecture ACM
┌─────────────────────────────────────────────┐
│ Hub Cluster (ACM) │
│ ┌──────────────────────────────────┐ │
│ │ ACM Console + API │ │
│ │ Policy Engine │ │
│ │ Observability (Thanos/Grafana) │ │
│ │ ApplicationSet Controller │ │
│ └──────────────────────────────────┘ │
└──────────┬───────────────┬───────────────────┘
│ │
┌──────▼──────┐ ┌──────▼──────┐
│ Managed │ │ Managed │
│ Cluster A │ │ Cluster B │
│ (prod-paris)│ │ (prod-lyon) │
└─────────────┘ └─────────────┘
Le Hub Cluster héberge ACM. Les Managed Clusters exécutent un agent léger (klusterlet) qui maintient la connexion avec le Hub et applique les configurations reçues.
Installation de l’Operator ACM
# Créer le namespace dédié
oc create namespace open-cluster-management
# Installer l'Operator ACM
cat <<EOF | oc apply -f -
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: advanced-cluster-management
namespace: open-cluster-management
spec:
channel: release-2.11
installPlanApproval: Automatic
name: advanced-cluster-management
source: redhat-operators
sourceNamespace: openshift-marketplace
EOF
# Créer l'instance MultiClusterHub
cat <<EOF | oc apply -f -
apiVersion: operator.open-cluster-management.io/v1
kind: MultiClusterHub
metadata:
name: multiclusterhub
namespace: open-cluster-management
spec:
availabilityConfig: High
enableClusterBackup: true
EOF
Attendre que le Hub soit prêt :
oc wait multiclusterhub multiclusterhub \
-n open-cluster-management \
--for=condition=Complete \
--timeout=600s
Importer un cluster existant
# Créer le ManagedCluster
apiVersion: cluster.open-cluster-management.io/v1
kind: ManagedCluster
metadata:
name: prod-paris
labels:
cloud: bare-metal
region: eu-west-1
environment: production
vendor: OpenShift
spec:
hubAcceptsClient: true
leaseDurationSeconds: 60
# Générer les manifests d'import à appliquer sur le cluster cible
oc get secret prod-paris-import \
-n prod-paris \
-o jsonpath='{.data.crds\.yaml}' | base64 -d | oc apply -f - --kubeconfig=prod-paris.kubeconfig
oc get secret prod-paris-import \
-n prod-paris \
-o jsonpath='{.data.import\.yaml}' | base64 -d | oc apply -f - --kubeconfig=prod-paris.kubeconfig
Policies : gouvernance déclarative
Les Policies ACM permettent d’exprimer l’état souhaité de chaque cluster et d’être alerté (ou de remédier automatiquement) en cas de dérive.
Policy : forcer la version TLS minimale
apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
name: policy-tls-version
namespace: policies
annotations:
policy.open-cluster-management.io/standards: NIST-CSF
policy.open-cluster-management.io/categories: PR.PT Protective Technology
spec:
remediationAction: enforce # ou "inform" pour audit seulement
disabled: false
policy-templates:
- objectDefinition:
apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
name: tls-version-config
spec:
remediationAction: enforce
severity: high
object-templates:
- complianceType: musthave
objectDefinition:
apiVersion: config.openshift.io/v1
kind: APIServer
metadata:
name: cluster
spec:
tlsSecurityProfile:
type: Custom
custom:
ciphers:
- ECDHE-RSA-AES256-GCM-SHA384
- ECDHE-RSA-AES128-GCM-SHA256
minTLSVersion: VersionTLS12
---
# Appliquer la policy à tous les clusters de production
apiVersion: policy.open-cluster-management.io/v1
kind: PlacementBinding
metadata:
name: binding-tls-version
namespace: policies
spec:
placementRef:
name: placement-production
kind: PlacementRule
apiGroup: apps.open-cluster-management.io
subjects:
- name: policy-tls-version
kind: Policy
apiGroup: policy.open-cluster-management.io
---
apiVersion: apps.open-cluster-management.io/v1
kind: PlacementRule
metadata:
name: placement-production
namespace: policies
spec:
clusterSelector:
matchLabels:
environment: production
Policy : namespace obligatoire avec labels
apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
name: policy-namespace-labels
namespace: policies
spec:
remediationAction: enforce
disabled: false
policy-templates:
- objectDefinition:
apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
name: ns-required-labels
spec:
remediationAction: enforce
severity: medium
namespaceSelector:
exclude: ["kube-*", "openshift-*", "open-cluster-*"]
include: ["*"]
object-templates:
- complianceType: musthave
objectDefinition:
apiVersion: v1
kind: Namespace
metadata:
labels:
team: "" # label obligatoire
environment: "" # label obligatoire
Observabilité multi-cluster
ACM inclut un stack d’observabilité basé sur Thanos et Grafana pour centraliser les métriques de tous les clusters.
apiVersion: observability.open-cluster-management.io/v1beta2
kind: MultiClusterObservability
metadata:
name: observability
spec:
enableDownsampling: true
observabilityAddonSpec:
enableMetrics: true
interval: 30 # Scrape toutes les 30s
storageConfig:
metricObjectStorage:
name: thanos-object-storage
key: thanos.yaml
storageClass: longhorn-fast
alertmanagerStorageSize: 1Gi
compactStorageSize: 100Gi
receiveStorageSize: 20Gi
ruleStorageSize: 1Gi
storeStorageSize: 10Gi
Déploiement d’applications multi-cluster avec ApplicationSets
ACM intègre ArgoCD via GitOpsCluster pour déployer des applications sur plusieurs clusters depuis Git.
# Enregistrer les clusters managed dans ArgoCD
apiVersion: apps.open-cluster-management.io/v1beta1
kind: GitOpsCluster
metadata:
name: gitops-cluster
namespace: openshift-gitops
spec:
argoServer:
cluster: local-cluster
argoNamespace: openshift-gitops
placementRef:
kind: Placement
apiVersion: cluster.open-cluster-management.io/v1beta1
name: all-clusters
namespace: openshift-gitops
# ApplicationSet ciblant les clusters par label ACM
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: mon-app-multi-cluster
namespace: openshift-gitops
spec:
generators:
- clusterDecisionResource:
configMapRef: acm-placement
labelSelector:
matchLabels:
cluster.open-cluster-management.io/placement: placement-production
requeueAfterSeconds: 180
template:
metadata:
name: "mon-app-{{name}}"
spec:
project: default
source:
repoURL: https://github.com/mon-org/mon-app.git
targetRevision: main
path: deploy/overlays/production
destination:
server: "{{server}}"
namespace: mon-app
syncPolicy:
automated:
prune: true
selfHeal: true
Conclusion
Red Hat ACM transforme la gestion d’un parc multi-cluster d’une tâche manuelle et risquée en un processus déclaratif, auditable et automatisé. Les Policies permettent d’enforcer la conformité à grande échelle, l’observabilité centralisée donne une vue unifiée du parc, et l’intégration ArgoCD via ApplicationSets complète le tableau pour des déploiements GitOps multi-cluster cohérents.