ApplicationSet simplifie l'orchestration des applications multi-clusters : à partir d'un modèle et d'un générateur uniques, il crée automatiquement une ou plusieurs applications Argo CD. Cette rubrique explique comment utiliser un ApplicationSet pour créer plusieurs applications.
Utilisez cette approche dans les cas suivants :
Déploiements multi-environnements : Déployez la même application en production et en préproduction avec des configurations spécifiques à chaque environnement.
Modules complémentaires de cluster : Installez des outils partagés (surveillance, journalisation, ingress) sur un parc de clusters.
Déploiements en libre-service : Permettez aux équipes de déployer vers les clusters qu'elles possèdent sans modifier la configuration partagée.
Fonctionnement
Le contrôleur ApplicationSet traite votre manifeste en quatre étapes :
Le générateur produit des paramètres clé-valeur. Avec le générateur List, chaque élément devient un ensemble de paramètres.
Les paramètres sont injectés dans le modèle, une fois par ensemble de paramètres.
Chaque modèle généré devient une ressource Application Argo CD.
Le contrôleur Argo CD détecte les nouvelles ressources Application et gère leur cycle de vie de synchronisation.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
kubectl installé avec un kubeconfig pour l'instance ACK One Fleet cible. Chemin par défaut :
~/.kube/config.
Déployer un ApplicationSet
Cet exemple déploie echo-server sur deux clusters (production et staging). Chaque cluster dispose de son propre sous-répertoire de manifestes pour la configuration spécifique à l'environnement.
Structure du référentiel :
.
├── Dockerfile
├── go.mod
├── go.sum
├── main.go
└── manifests
└── directory
├── production
│ ├── deployment.yaml
│ └── service.yaml
└── staging
├── deployment.yaml
└── service.yaml
Créer le manifeste ApplicationSet
Créez applicationset.yaml avec le contenu suivant.
Le générateur List définit deux ensembles de paramètres, un par cluster. Les variables {{cluster}} et {{url}} sont injectées dans le modèle, ce qui produit deux applications : production-echo-server et staging-echo-server. Chacune pointe vers le sous-répertoire de manifestes de son environnement.
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: echo-server
spec:
generators:
- list:
elements:
- cluster: production
url: https://47.91.XX.XX:6443
- cluster: staging
url: https://47.111.XX.XX:6443
# To add more clusters, append another element here:
# - cluster: <cluster-name>
# url: <cluster-api-server-url>
template:
metadata:
name: '{{cluster}}-echo-server'
spec:
project: default
source:
repoURL: https://code.aliyun.com/shuwei.hsw/echo-server.git
targetRevision: main
path: manifests/directory/{{cluster}}
destination:
server: '{{url}}'
namespace: multi-echo-server
Appliquer l'ApplicationSet
kubectl -n argocd apply -f applicationset.yaml
Vérifier la création des applications
kubectl -n argocd get application
Sortie attendue :
NAME SYNC STATUS HEALTH STATUS
production-echo-server OutOfSync Missing
staging-echo-server OutOfSync Missing
OutOfSync indique que les applications existent mais ne sont pas encore déployées.
Synchroniser les applications
argocd app sync production-echo-server staging-echo-server
Vérifier l'accès
Testez l'accès à chaque environnement une fois la synchronisation terminée.
Cluster Production (echo-server v1.0) :
curl XX.XX.XX.XX:8080/version
Sortie attendue :
"Hello Echo Server v1.0"
Cluster Staging (echo-server v2.0) :
curl XX.XX.XX.XX:8080/version
Sortie attendue :
"Hello Echo Server v2.0"
Remplacez XX.XX.XX.XX par l'adresse IP externe du service echo-server dans chaque cluster.
Étapes suivantes
Argo CD prend en charge d'autres générateurs ApplicationSet (Cluster, Git, Matrix, etc.). Commencez par les générateurs List et Cluster.
Consultez la spécification complète ApplicationSet.