Ajouter un cluster downstream dans argocd cd
Ajouter un Cluster downstream dans argocd
- Cluster downstream
- Créer un cluster
- ajout de cluster par argocd cli
- ajout de cluster par secret
Cluster downstream
Les clusters downstream représentent les clusters Kubernetes cibles où ArgoCD déploiera les applications.
- Ajout de cluster par argocd CLI
L'ajout d'un cluster via CLI d'ArgoCD est une méthode qui permet d'intégrer un nouveau cluster downstream à argocd.
-
- Prérequis:
- Il faut créer le cluster downstream
- Avoir accès l'api argocd
- Installer argocd cli
- L'api server du cluster downstream doit être accessible depuis le réseau argocd
- Prérequis:
-
- Les commandes à executer pour ajouter le cluster downstream
# connxion à l'api argocd
argocd login argocd_server_host_name
# Syntaxe de base
argocd cluster add CONTEXT_NAME --name CLUSTER_NAME
# Exemple avec un contexte spécifique
argocd cluster add kubernetes-prod-cluster --name kubernetes-prod-cluster
Lors de l'ajout d'un cluster, ArgoCD effectue plusieurs opérations importantes :
-
- Création d'un Service Account argocd-manager dans l'espace de noms kube-system
- Attribution des permissions nécessaires via un ClusterRole et un ClusterRoleBinding
- Récupération du token d'accès pour l'authentification
- Enregistrement du cluster dans la base de données d'ArgoCD
Pour personnaliser davantage, vous pouvez utiliser des options additionnelles :
-
- --namespace : Spécifier les namespaces que vous souhaitez gérer
- --service-account : Utiliser un Service Account existant
- --kubeconfig : Spécifier un fichier kubeconfig alternatif
- --insecure : Ignorer la vérification TLS (non recommandé en production)
- Exemple d'integration
- Créer un cluster rke2 single node
Créer une vm(2vCPU, 3GiB de RAM), puis executer les commabdes suivantes.
sudo su
# server node
curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="server" INSTALL_RKE2_VERSION="v1.32.2+rke2r1" sh -
systemctl enable rke2-server.service
sudo mkdir -p /etc/rancher/rke2
sudo tee /etc/rancher/rke2/config.yaml << EOF
disable:
- rke2-ingress-nginx
EOF
systemctl start rke2-server.service
systemctl status rke2-server.service
Recuperer le kubeconfig
cat /etc/rancher/rke2/rke2.yaml
Copier coller le contenu en local dans ~/.kube/rke2-downstream-dev.yaml
Editer le fichier avec vim ou vscode pour remplacer:
-
- L'ip 127.0.0.1 par l'ip de la vm. dans mon cas je remplace 127.0.0.1 par 10.10.10.69
- default par le nom du cluster rke2-downstream-dev. pas obligatoire mais utilie pour se retouver si on a beaucoup de contexts

-
- Switch sur le context du cluster rke2-downstream-dev
export KUBECONFIG=~/.kube/rke-downstream-dev.yaml
On peut maintenant installer argocd cli sur le laptop local admin, puis ajouter le cluster à argocd.
-
- Installer argocd cli
ARGOCD_VERSION=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
curl -sSL -o /tmp/argocd-${ARGOCD_VERSION} https://github.com/argoproj/argo-cd/releases/download/${ARGOCD_VERSION}/argocd-linux-amd64
chmod +x /tmp/argocd-${ARGOCD_VERSION}
sudo mv /tmp/argocd-${ARGOCD_VERSION} /usr/local/bin/argocd
argocd version --client
-
- Connexion à l'api argocd
- Connexion à l'api argocd
argocd login argocd.techledger.local

-
- Ajouter le cluster rke2-downstream-dev à argocd
argocd cluster add rke2-downstream-dev --name rke2-downstream-dev

Argocd crée automatiquement les ressources suivantes sur le cluster downstream (rke2-downstream-dev):
- ServiceAccount argocd-manager
- ClusterRole argocd-manager-role
- ClusterRoleBinding argocd-manager-role-binding
- Secret pour le bearer token
Le cluster a été bien ajouté dans argocd. On peut vérifier le cluster dans l'ui d'argocd > Settings > clusters
Le cluster rke2-tools-dev est celui sur lequel est installé argocd. La connection status est Unknown parce qu'aucune app n'est encore déployée.

-
- Deploiement d'une app de test. app-test.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nginx-test # le nom qu'on donne au crd
namespace: argocd # toujours deployer cet abjet dans le namesapce ou argocd est déployé
spec:
project: default # cette argo app sera dans le argo poject default
source:
chart: nginx # le nom du chart telque definit dans le chart bitnami
repoURL: registry-1.docker.io/bitnamicharts # le repo du chart bitnami
targetRevision: 20.0.0 # la version du chart nginx
helm:
valuesObject:
service:
type: ClusterIP
destination:
name: rke2-downstream-dev # cluster downstream destination
namespace: nginx-test # namesapce ou l'application gnixnsera deployée
syncPolicy:
automated:
prune: true # Supprime les ressources qui ne sont plus dans Git
selfHeal: true # Rectifie les déviations
allowEmpty: false # Empêche la suppression de toutes les ressources
syncOptions:
- CreateNamespace=true # Argocd crée automatiquement le namespace
-
- Appliquer le fichier sur le cluster argocd
kubectl apply -f test/app-test.yaml
Dans l'ui d'argocd > Settings > clusters

Dans l'ui d'argocd > Application

Argocd a créé le namespace et a déployé l'application nginx sur le cluster downstream (rke2-downstream-dev).

- Ajout de cluster via secret kubernetes
L'ajout d'un cluster via un Secret Kubernetes offre une approche déclarative, particulièrement utile pour l'automatisation et le GitOps.
Pour ajouter un cluster via un Secret, créez un Secret sur le cluster argocd avec le label argocd.argoproj.io/secret-type: cluster :
Cette méthode présente plusieurs avantages :
-
- Intégration parfaite avec les outils IaC comme terraform
- Possibilité d'automatiser complètement l'ajout de clusters via des pipelines CI/CD
- Gestion cohérente des clusters dans une approche IaC ou GitOps
apiVersion: v1
stringData:
name: rke2-downstream-dev
server: https://10.10.10.159:6443
config: |
{
"tlsClientConfig": {
"insecure": false,
"caData": "LS0tLS1CRUdJTiBDRV0tLS0K",
"certData": "LS0tLS1CRUdJQE1vcTJnZAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==",
"keyData": "LS0tLS1CRUdJTiBFQyBQUklWQVRFBLRVktLS0tLQo="
}
}
kind: Secret
metadata:
labels:
argocd.argoproj.io/secret-type: cluster
name: rke2-downstream-dev
namespace: argocd
type: Opaque
Les champs importants du Secret incluent :
-
- name : Nom convivial pour le cluster dans l'interface ArgoCD
- server : URL du serveur Kubernetes API
- config : Configuration de connexion au cluster (caData, certData et keyData sont à recuperer dans le kubeconfig)
-
- Appliquer ce fichier sur le cluster argocd dans le namespace argocd
kubectl apply -f argocd-rke2-downstream-dev-secret.yaml
Le cluster apparait automatique dans l'ui d'argocd > Settinges > Clusters
Comme je l'ai déjà dit, tant qu'une application n'est pas déployée, le status reste Unkwnown

-
- Test de déploiement de l'app nginx.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nginx-test # le nom qu'on donne au crd
namespace: argocd # toujours deployer cet abjet dans le namesapce ou argocd est déployé
spec:
project: default # cette argo app sera dans le argo poject default
source:
chart: nginx # le nom du chart telque definit dans le chart bitnami
repoURL: registry-1.docker.io/bitnamicharts # le repo du chart bitnami
targetRevision: 20.0.0 # la version du chart nginx
helm:
valuesObject:
service:
type: ClusterIP
destination:
name: rke2-downstream-dev # cluster downstream destination
namespace: nginx-test # namesapce ou l'application gnixnsera deployée
syncPolicy:
automated:
prune: true # Supprime les ressources qui ne sont plus dans Git
selfHeal: true # Rectifie les déviations
allowEmpty: false # Empêche la suppression de toutes les ressources
syncOptions:
- CreateNamespace=true # Argocd crée automatiquement le namespace
-
- Appliquer le fichier sur le cluster argocd
kubectl apply -f test/app-test.yaml
Le status du cluster est passé a Successful

L'application nginx a été bien déployé sur le cluster donwstream rke2-downstream-dev.

Plus de détails dans la documentation
Commentaires
Aucun commentaire pour le moment.