Argo CD#

Demo

Démonstration de Argo CD par Julien.

Installation#

Dans un terminal, exécutez le code suivant :

helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
helm install argocd argo/argo-cd \
  --namespace argocd --create-namespace \
  --set server.ingress.enabled=true \
  --set global.domain=argocd.$(minikube ip).nip.io \
  --set server.ingress.annotations."nginx\.ingress\.kubernetes\.io/force-ssl-redirect"="true" \
  --set server.ingress.annotations."nginx\.ingress\.kubernetes\.io/backend-protocol"="HTTPS"\
  --set configs.params.server.insecure=true

Une fois le helm chart déployé (cela peut prendre quelques minutes), vous pourrez lancer les commandes suivantes :

echo "Vous pouvez accéder à Argo CD ici (vous devez accepter les risques de sécurité..) : https://argocd.$(minikube ip).nip.io"
echo "Login : admin, mot de passe : $(kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d)"

Une fois

Vérification de l’installation#

Vous pouvez commencer par vérifier que les objets sont bien créés :

kubectl -n argocd get all
kubectl -n argocd get ingress

Puis vous rendre à l’adresse http://argocd.<MINIKUBE IP>.nip.io avec votre navigateur (remplacez <MINIKUBE IP> par l’adresse ip de votre cluster)

Namespaces#

Lors de l’installation d’Argo CD, nous avons utilisé l’option --namespace argocd. On indique ici à argocd de s’installer dans le “namespace argocd”, ce n’est pas une fonctionnalité spécifique de argocd, mais une fonctionnalité de kubernetes.

Imaginez un namespace comme un dossier ou un répertoire : il vous permet de regrouper et d’organiser vos objets Kubernetes (pods, services, etc.) de manière logique. C’est utile pour séparer différentes applications ou environnements au sein d’un même cluster. Par défaut, si vous ne précisez rien, vous travaillez dans le namespace default.

Par exemple, maintenant, si vous faites :

kubectl get pods

Vous ne verrez que les pods du namespace default, et pas ceux d’Argo CD !

Commandes utiles pour les namespaces#

Pour lister les pods dans le namespace argocd, vous pouvez utiliser l’option -n (ou --namespace) :

kubectl get pods -n argocd

Vous devriez maintenant voir tous les pods liés à Argo CD.

Pour avoir une vue d’ensemble de tous les pods, quel que soit leur namespace, nous avons déjà vu la commande :

kubectl get pods -A # ou --all-namespaces

Pour lister tous les namespaces existants dans votre cluster :

kubectl get namespaces # ou kubectl get ns

Vous verrez le namespace default (celui utilisé par défaut lorsque vous n’en spécifiez pas), kube-system (pour les composants internes de Kubernetes), et argocd que nous venons de créer.

Créer un pod dans un namespace spécifique#

Créons un nouveau namespace pour y créer une nouvelle application :

kubectl create namespace mon-application

Maintenant, créons un pod ubuntu-app dans ce namespace. Nous pouvons le faire de deux manières :

  1. Via un fichier YAML : en ajoutant le champ namespace dans les métadonnées.

    # ubuntu-app.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: ubuntu-app
      namespace: mon-application
    spec:
      containers:
      - name: ubuntu-app
        image: ubuntu:22.04
        args: ["sleep","infinity"]
    

    Puis appliquez-le après avoir créé le namespace:

    kubectl apply -f ubuntu-app.yaml -n mon-application
    
  2. Via la ligne de commande : en utilisant l’option -n sans nécessairement fournir le namespace dans le manifest yaml.

    kubectl apply -f ubuntu-app.yaml -n mon-application
    

Vérifions que nos pods sont bien dans le namespace mon-application :

kubectl get pods -n mon-application

Et ils n’apparaissent pas dans le namespace default :

kubectl get pods

Récapitulatif des commandes#

Voici les commandes de base pour gérer les namespaces :

Commande

Description

kubectl get namespaces

Liste tous les namespaces du cluster.

kubectl create namespace <nom>

Crée un nouveau namespace.

kubectl delete namespace <nom>

Supprime un namespace et toutes les ressources qu’il contient.

kubectl get all -n <nom>

Liste tous les objets dans un namespace spécifique.

Première application via Argo CD#

Mais revenons à Argo CD ! Dans l’interface argocd, cliquez “New app” puis renseignez les différents champs comme indiqué dans la capture d’écran suivante :

image

Veillez en particulier à :

  • Donner un nom sans majuscule ni underscore (ici : applicationsimple).

  • Cocher la case “auto-create namespace”

  • Utiliser le dépôt : https://gitlab.com/formationk8sjrobert/helmsimple.git

  • Choisir “.” comme “Path”

  • Donner un namespace sans majuscule ni underscore (ici : applicationsimple)

Expérimentations#

  • Accédez vous au service ?

    curl $(minikube ip):32080
    
  • Supprimez le pod via argocd, la commande ci-dessus renvoie-t-elle toujours quelque chose ?

  • Pour “relancer” le pod, cliquez “sync”. Parvenez vous à nouveau à contacter le pod ?

  • Supprimez le service via argocd, la commande ci-dessus renvoie-t-elle toujours quelque chose ?

  • Idem : synchronisez puis vérifiez que vous arrivez à nouveau à contacter le pod.

Retour collectif

Prenons un moment pour échanger collectivement sur ce qu’on a vu jusqu’ici. Pour cela prenez d’abord un temps de réflexion à 2 autour de ces questions :

  • Qu’est-ce qui me semble simple / complexe jusqu’à présent ?

  • Qu’est ce que j’espère que k8s va me permettre de faire ?

  • Où est-ce que je pense que j’aurai du mal ?

  • Qu’est-ce que j’ai compris / ce que j’aimerais clarifier

  • Analogie : compléter la phrase : Un Pod, c’est comme XXX suivi d’une analogie simple et parlante.