Pourquoi GitOps sur OpenShift ?
OpenShift est la plateforme Kubernetes de Red Hat, utilisée massivement en entreprise. Coupler OpenShift avec une approche GitOps — où Git est la source de vérité pour l’état du cluster — apporte des bénéfices concrets : traçabilité des changements, rollback fiable, déploiements reproductibles et réduction du drift de configuration.
ArgoCD est aujourd’hui le standard de facto pour le GitOps sur Kubernetes. Red Hat le propose sous le nom OpenShift GitOps, un Operator certifié intégré nativement à OpenShift.
Installation via l’Operator OpenShift GitOps
La méthode recommandée est d’installer ArgoCD via l’OperatorHub d’OpenShift.
# Via la CLI oc — créer la souscription à l'Operator
cat <<EOF | oc apply -f -
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: openshift-gitops-operator
namespace: openshift-operators
spec:
channel: latest
installPlanApproval: Automatic
name: openshift-gitops-operator
source: redhat-operators
sourceNamespace: openshift-marketplace
EOF
Une fois l’Operator installé, une instance ArgoCD est automatiquement créée dans le namespace openshift-gitops. Elle est accessible via la route créée par l’Operator :
oc get route openshift-gitops-server -n openshift-gitops
Pour récupérer le mot de passe admin initial :
oc extract secret/openshift-gitops-cluster \
-n openshift-gitops --to=-
Créer une Application ArgoCD
Une Application ArgoCD décrit ce que l’on veut déployer et depuis quel dépôt Git.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: mon-app
namespace: openshift-gitops
spec:
project: default
source:
repoURL: https://github.com/mon-org/mon-repo.git
targetRevision: main
path: deploy/overlays/production
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
Le champ automated active la synchronisation automatique :
prune: true— supprime les ressources retirées du dépôt GitselfHeal: true— resynchronise si quelqu’un modifie le cluster manuellement
ApplicationSets : gérer plusieurs clusters ou environnements
L’ApplicationSet est un générateur d’Applications ArgoCD. Il évite de dupliquer des manifests pour chaque environnement ou cluster.
Exemple avec le générateur List (multi-environnements)
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: mon-app-envs
namespace: openshift-gitops
spec:
generators:
- list:
elements:
- env: dev
cluster: https://dev-api.cluster.example.com
namespace: mon-app-dev
- env: staging
cluster: https://staging-api.cluster.example.com
namespace: mon-app-staging
- env: production
cluster: https://prod-api.cluster.example.com
namespace: mon-app-prod
template:
metadata:
name: "mon-app-{{env}}"
spec:
project: default
source:
repoURL: https://github.com/mon-org/mon-repo.git
targetRevision: main
path: "deploy/overlays/{{env}}"
destination:
server: "{{cluster}}"
namespace: "{{namespace}}"
syncPolicy:
automated:
prune: true
selfHeal: true
Générateur Git (dossiers comme environnements)
generators:
- git:
repoURL: https://github.com/mon-org/mon-repo.git
revision: main
directories:
- path: deploy/clusters/*
RBAC et intégration SSO OpenShift
ArgoCD s’intègre nativement avec le SSO OpenShift via Dex ou directement avec OpenShift OAuth. Les droits dans ArgoCD sont mappés depuis les groupes OpenShift.
# Dans le ConfigMap argocd-rbac-cm
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-rbac-cm
namespace: openshift-gitops
data:
policy.default: role:readonly
policy.csv: |
# Les membres du groupe openshift-admins sont admins ArgoCD
g, openshift-admins, role:admin
# Les devs peuvent synchroniser leurs apps
g, dev-team, role:developer
p, role:developer, applications, sync, */*, allow
p, role:developer, applications, get, */*, allow
Gestion du drift et notifications
ArgoCD détecte automatiquement le drift (écart entre Git et l’état réel du cluster). Vous pouvez configurer des notifications vers Slack, Teams ou e-mail :
# Installer le contrôleur de notifications ArgoCD
oc apply -n openshift-gitops \
-f https://raw.githubusercontent.com/argoproj-labs/argocd-notifications/release-1.2/manifests/install.yaml
Exemple de notification Slack sur état OutOfSync :
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-notifications-cm
namespace: openshift-gitops
data:
trigger.on-sync-status-unknown: |
- when: app.status.sync.status == 'OutOfSync'
send: [slack-message]
template.slack-message: |
message: |
Application {{.app.metadata.name}} est OutOfSync !
Repo: {{.app.spec.source.repoURL}}
Bonnes pratiques
- Séparer la configuration applicative du code — dépôt Git dédié aux manifests
- Utiliser Kustomize ou Helm comme outil de templating (ArgoCD supporte les deux nativement)
- Activer
syncOptions: ServerSideApply=truepour les objets volumineux (CRDs, etc.) - Définir des AppProjects pour isoler les équipes et restreindre les namespaces/repos autorisés
- Implémenter des health checks custom pour les CRDs OpenShift (Routes, DeploymentConfigs)
# AppProject restrictif pour une équipe
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: equipe-a
namespace: openshift-gitops
spec:
sourceRepos:
- 'https://github.com/mon-org/equipe-a-*'
destinations:
- namespace: 'equipe-a-*'
server: https://kubernetes.default.svc
clusterResourceWhitelist:
- group: ''
kind: Namespace
Conclusion
ArgoCD sur OpenShift offre une expérience GitOps mature et bien intégrée à l’écosystème Red Hat. L’Operator OpenShift GitOps simplifie considérablement le déploiement et la mise à jour d’ArgoCD. Combiné aux ApplicationSets pour le multi-cluster et au RBAC OpenShift, il constitue un socle solide pour des déploiements à grande échelle.