Aller au contenu principal
Sommaire de la formation

Ajouter un cluster downstream dans argocd cd

coolibra393 vues

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
    • 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

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

Connectez-vous pour rejoindre la discussion.

Aucun commentaire pour le moment.