Série de webinaires: Jeux d’outils GitOps sur Kubernetes avec CircleCI et Argo CD

[.Remarque]##

Série de webinaires

Cet article complète unwebinar series on doing CI/CD with Kubernetes. La série explique comment adopter une approche native du cloud pour créer, tester et déployer des applications, couvrant la gestion des versions, les outils natifs du cloud, les maillages de service et les outils CI / CD pouvant être utilisés avec Kubernetes. Il est conçu pour aider les développeurs et les entreprises qui souhaitent intégrer les meilleures pratiques CI / CD avec Kubernetes dans leurs workflows.

Ce didacticiel comprend les concepts et les commandes de la dernière session de la série, GitOps Tool Sets sur Kubernetes avec CircleCI et Argo CD.

[.warning] #Warning: Les procédures de ce didacticiel sont destinées à des fins de démonstration uniquement. Par conséquent, ils ne suivent pas les meilleures pratiques et les mesures de sécurité nécessaires pour un déploiement prêt pour la production.
#

introduction

L'utilisation de Kubernetes pour déployer votre application peut fournir des avantages infrastructurels significatifs, tels que la mise à l'échelle flexible, la gestion de composants distribués et le contrôle de différentes versions de votre application. Cependant, le contrôle accru s'accompagne d'une complexité accrue qui peut rendre les systèmes coopératifs de développement de code, de contrôle de version, de journalisation des modifications, de déploiement coopératif et de restauration automatisés particulièrement difficiles à gérer manuellement. Pour tenir compte de ces difficultés, les ingénieurs DevOps ont développé plusieurs méthodes d'automatisation Kubernetes CI / CD, dont le système d'outillage et les meilleures pratiques appeléGitOps. GitOps, comme proposé parWeaveworks dans un2017 blog post, utiliseGit comme une «source unique de vérité» pour les processus CI / CD, intégrant les changements de code dans un référentiel unique partagé par projet et en utilisant des pull requests pour gérer l'infrastructure et le déploiement.

De nombreux outils utilisent Git comme point focal pour les processus DevOps sur Kubernetes, y comprisGitkube développé parHasura,Flux par Weaveworks etJenkins X, le sujet du second webinar in this series. Dans ce didacticiel, vous exécuterez une démonstration de deux outils supplémentaires que vous pouvez utiliser pour configurer votre propre système GitOps CI / CD basé sur le cloud: L'outil d'intégration continueCircleCI etArgo CD, un déclaratif Outil de livraison continue.

CircleCI utilise les référentielsGitHub ouBitbucket pour organiser le développement d'applications et pour automatiser la création et les tests sur Kubernetes. En s'intégrant au référentiel Git, les projets CircleCI peuvent détecter lorsqu'une modification est apportée au code de l'application et la tester automatiquement, en envoyant des notifications de la modification et des résultats des tests par e-mail ou d'autres outils de communication commeSlack. CircleCI conserve des journaux de toutes ces modifications et résultats des tests, et l'interface basée sur un navigateur permet aux utilisateurs de surveiller les tests en temps réel, de sorte qu'une équipe connaisse toujours le statut de leur projet.

En tant que sous-projet du moteur de gestion de flux de travail Argo pour Kubernetes, Argo CD fournit un outil de livraison continue qui synchronise et déploie automatiquement votre application chaque fois qu'une modification est apportée dans votre référentiel GitHub. En gérant le déploiement et le cycle de vie d'une application, il fournit des solutions pour le contrôle de version, les configurations et les définitions d'application dans les environnements Kubernetes, en organisant des données complexes avec une interface utilisateur facile à comprendre. Il peut gérer plusieurs types de manifestes Kubernetes, y compris les applicationsksonnet, les applicationsKustomize, les graphiquesHelm et les fichiers YAML / json, et prend en charge les notifications de webhook de GitHub, GitLab et Bitbucket.

Dans ce dernier article desCI/CD with Kubernetes series, vous allez essayer ces outils GitOps en:

  • Configuration de déclencheurs de pipeline pour automatiser les tests d’application avec CircleCI et GitHub.

  • Synchroniser et déployer une application à partir d’un référentiel GitHub avec Argo CD.

À la fin de ce didacticiel, vous comprendrez comment construire un pipeline CI / CD sur Kubernetes avec un jeu d’outils GitOps.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de:

  • Un serveur Ubuntu 16.04 avec 16 Go de RAM ou plus. Étant donné que ce didacticiel est destiné à des fins de démonstration uniquement, les commandes sont exécutées à partir du compteroot. Note that the unrestrained privileges of this account do not adhere to production-ready best practices and could affect your system. Pour cette raison, il est suggéré de suivre ces étapes dans un environnement de test tel qu'une machine virtuelle ou unDigitalOcean Droplet.

  • UnDocker Hub Account. Pour un aperçu de la mise en route avec Docker Hub, veuillez consulterthese instructions.

  • Un compteGitHub et une connaissance de base de GitHub. Pour une introduction à l'utilisation de GitHub, consultez notre tutoriel surHow To Create a Pull Request on GitHub.

  • Familiarité avec les concepts de Kubernetes. Veuillez vous référer à l'articleAn Introduction to Kubernetes pour plus de détails.

  • Un cluster Kubernetes avec l'outil de ligne de commandekubectl. Ce tutoriel a été testé sur un cluster Kubernetes simulé, mis en place dans un environnement local avecMinikube, un programme qui vous permet d'essayer les outils Kubernetes sur votre propre machine sans avoir à configurer un véritable cluster Kubernetes. Pour créer un cluster Minikube, suivez l'étape 1 du deuxième webinaire de cette série,Kubernetes Package Management with Helm and CI/CD with Jenkins X.

[[step-1 -—- setting-up-your-circleci-workflow]] == Étape 1 - Configuration de votre workflow CircleCI

Dans cette étape, vous allez créer un flux de travail CircleCI standard impliquant trois tâches: tester le code, créer une image et transmettre cette image au Docker Hub. Lors de la phase de test, CircleCI utiliserapytest pour tester le code d'un exemple d'application RSVP. Ensuite, il construira l'image du code de l'application et transmettra l'image à DockerHub.

Tout d'abord, donnez à CircleCI l'accès à votre compte GitHub. Pour ce faire, accédez àhttps://circleci.com/ dans votre navigateur Web préféré:

CircleCI Landing Page

En haut à droite de la page, vous trouverez un boutonSign Up. Cliquez sur ce bouton, puis surSign Up with GitHub sur la page suivante. Le site CircleCI vous demandera vos identifiants GitHub:

Sign In to GitHub CircleCI Page

Si vous entrez votre nom d'utilisateur et votre mot de passe ici, CircleCI sera autorisé à lire votre adresse électronique GitHub, à déployer des clés et à ajouter des points d'ancrage à votre référentiel, à créer une liste de vos référentiels et à ajouter une clé SSH à votre compte GitHub. Ces autorisations sont nécessaires pour que CircleCI puisse surveiller et réagir aux modifications de votre référentiel Git. Si vous souhaitez en savoir plus sur les autorisations demandées avant de donner à CircleCI les informations de votre compte, consultez lesCircleCI documentation.

Une fois que vous avez vérifié ces autorisations, entrez vos informations d'identification GitHub et cliquez surSign In. CircleCI s'intégrera ensuite à votre compte GitHub et redirigera votre navigateur vers la page d'accueil de CircleCI:

Welcome page for CircleCI

Maintenant que vous avez accès à votre tableau de bord CircleCI, ouvrez une autre fenêtre de navigateur et accédez au référentiel GitHub pour ce webinaire,https://github.com/do-community/rsvpapp-webinar4. Si vous êtes invité à vous connecter à GitHub, entrez votre nom d'utilisateur et votre mot de passe. Dans ce référentiel, vous trouverez un exemple d'application RSVP créé par l'équipeCloudYuga. Pour les besoins de ce didacticiel, vous utiliserez cette application pour illustrer un flux de travail GitOps. Forkez ce dépôt à votre compte GitHub en cliquant sur le boutonFork en haut à droite de l'écran.

Lorsque vous avez forké le dépôt, GitHub vous redirigera vershttps://github.com/your_GitHub_username/rsvpapp-webinar4. Sur le côté gauche de l'écran, vous verrez un boutonBranch: master. Cliquez sur ce bouton pour afficher la liste des branches de ce projet. Ici, la branchemaster fait référence à la version officielle actuelle de l'application. D'autre part, la branchedev est un sandbox de développement, où vous pouvez tester les modifications avant de les promouvoir vers la version officielle dans la branchemaster. Sélectionnez la branchedev.

Maintenant que vous vous trouvez dans la section développement de ce référentiel de démonstration, vous pouvez commencer à configurer un pipeline. CircleCI requiert un fichier de configuration YAML dans le référentiel décrivant les étapes à suivre pour tester votre application. Le référentiel que vous avez créé a déjà ce fichier à.circleci/config.yml; pour vous entraîner à configurer CircleCI, supprimez ce fichier et créez le vôtre.

Pour créer ce fichier de configuration, cliquez sur le boutonCreate new file et créez un fichier nommé.circleci/config.yml:

GitHub Create a new file Page

Une fois ce fichier ouvert dans GitHub, vous pouvez configurer le flux de travail pour CircleCI. Pour en savoir plus sur le contenu de ce fichier, vous allez ajouter les sections pièce par pièce. Tout d'abord, ajoutez ce qui suit:

circleci/config.yml
version: 2
jobs:
  test:
    machine:
      image: circleci/classic:201808-01
      docker_layer_caching: true
    working_directory: ~/repo

. . .

Dans le code précédent,version fait référence à la version de CircleCI que vous utiliserez. jobs:test: signifie que vous configurez un test pour votre application etmachine:image: indique où CircleCI effectuera le test, dans ce cas une machine virtuelle basée sur l'image decircleci/classic:201808-01.

Ensuite, ajoutez les étapes à suivre par CircleCI pendant le test:

circleci/config.yml
. . .
    steps:
      - checkout
      - run:
          name: install dependencies
          command: |
            sudo rm /var/lib/dpkg/lock
            sudo dpkg --configure -a
            sudo apt-get install software-properties-common
            sudo add-apt-repository ppa:fkrull/deadsnakes
            sudo apt-get update
            sleep 5
            sudo rm /var/lib/dpkg/lock
            sudo dpkg --configure -a
            sudo apt-get install python3.5
            sleep 5
            python -m pip install -r requirements.txt

      # run tests!
      # this example uses Django's built-in test-runner
      # other common Python testing frameworks include pytest and nose
      # https://pytest.org
      # https://nose.readthedocs.io

      - run:
          name: run tests
          command: |
            python -m pytest tests/test_rsvpapp.py

. . .

Les étapes du test sont répertoriées aprèssteps:, en commençant par- checkout, ce qui va extraire le code source de votre projet et le copier dans l'espace de la tâche. Ensuite, l'étape- run: name: install dependencies exécute les commandes répertoriées pour installer les dépendances requises pour le test. Dans ce cas, vous utiliserez le test-runner intégré deDjango Web framework’s et l'outil de testpytest. Une fois que CircleCI a téléchargé ces dépendances, l'étape-run: name: run tests demandera à CircleCI d'exécuter les tests sur votre application.

Une fois le travailtest terminé, ajoutez le contenu suivant pour décrire le travailbuild:

circleci/config.yml
. . .
  build:

    machine:
      image: circleci/classic:201808-01
      docker_layer_caching: true
    working_directory: ~/repo

    steps:
      - checkout
      - run:
          name: build image
          command: |
            docker build -t $DOCKERHUB_USERNAME/rsvpapp:$CIRCLE_SHA1 .

  push:
    machine:
      image: circleci/classic:201808-01
      docker_layer_caching: true
    working_directory: ~/repo
    steps:
      - checkout
      - run:
          name: Push image
          command: |
            docker build -t $DOCKERHUB_USERNAME/rsvpapp:$CIRCLE_SHA1 .
            echo $DOCKERHUB_PASSWORD | docker login --username $DOCKERHUB_USERNAME --password-stdin
            docker push $DOCKERHUB_USERNAME/rsvpapp:$CIRCLE_SHA1

. . .

Comme précédemment,machine:image: signifie que CircleCI construira l'application dans une machine virtuelle basée sur l'image spécifiée. Soussteps:, vous retrouverez- checkout, suivi de- run: name: build image. Cela signifie que CircleCi construira un conteneur Docker à partir de l'imagersvpapp dans votre référentiel Docker Hub. Vous définirez la variable d'environnement$DOCKERHUB_USERNAME dans l'interface CircleCI, que le didacticiel couvrira une fois ce fichier YAML terminé.

Une fois la tâchebuild terminée, la tâchepush transmettra l'image résultante à votre compte Docker Hub.

Enfin, ajoutez les lignes suivantes pour déterminer lesworkflows qui coordonnent les travaux que vous avez définis précédemment:

circleci/config.yml
. . .
workflows:
  version: 2
  build-deploy:
    jobs:
      - test:
          context: DOCKERHUB
          filters:
            branches:
              only: dev
      - build:
          context: DOCKERHUB
          requires:
            - test
          filters:
            branches:
              only: dev
      - push:
          context: DOCKERHUB
          requires:
            - build
          filters:
            branches:
              only: dev

Ces lignes garantissent que CircleCI exécute les travauxtest,build etpush dans le bon ordre. context: DOCKERHUB fait référence au contexte dans lequel le test aura lieu. Vous allez créer ce contexte après avoir finalisé ce fichier YAML. La ligneonly: dev empêche le workflow de se déclencher uniquement en cas de modification de la branchedev de votre référentiel et garantit que CircleCI construira et testera le code à partir dedev.

Maintenant que vous avez ajouté tout le code du fichier.circleci/config.yml, son contenu doit être le suivant:

circleci/config.yml
version: 2
jobs:
  test:
    machine:
      image: circleci/classic:201808-01
      docker_layer_caching: true
    working_directory: ~/repo

    steps:
      - checkout
      - run:
          name: install dependencies
          command: |
            sudo rm /var/lib/dpkg/lock
            sudo dpkg --configure -a
            sudo apt-get install software-properties-common
            sudo add-apt-repository ppa:fkrull/deadsnakes
            sudo apt-get update
            sleep 5
            sudo rm /var/lib/dpkg/lock
            sudo dpkg --configure -a
            sudo apt-get install python3.5
            sleep 5
            python -m pip install -r requirements.txt

      # run tests!
      # this example uses Django's built-in test-runner
      # other common Python testing frameworks include pytest and nose
      # https://pytest.org
      # https://nose.readthedocs.io

      - run:
          name: run tests
          command: |
            python -m pytest tests/test_rsvpapp.py

  build:

    machine:
      image: circleci/classic:201808-01
      docker_layer_caching: true
    working_directory: ~/repo

    steps:
      - checkout
      - run:
          name: build image
          command: |
            docker build -t $DOCKERHUB_USERNAME/rsvpapp:$CIRCLE_SHA1 .

  push:
    machine:
      image: circleci/classic:201808-01
      docker_layer_caching: true
    working_directory: ~/repo
    steps:
      - checkout
      - run:
          name: Push image
          command: |
            docker build -t $DOCKERHUB_USERNAME/rsvpapp:$CIRCLE_SHA1 .
            echo $DOCKERHUB_PASSWORD | docker login --username $DOCKERHUB_USERNAME --password-stdin
            docker push $DOCKERHUB_USERNAME/rsvpapp:$CIRCLE_SHA1

workflows:
  version: 2
  build-deploy:
    jobs:
      - test:
          context: DOCKERHUB
          filters:
            branches:
              only: dev
      - build:
          context: DOCKERHUB
          requires:
            - test
          filters:
            branches:
              only: dev
      - push:
          context: DOCKERHUB
          requires:
            - build
          filters:
            branches:
              only: dev

Une fois que vous avez ajouté ce fichier à la branchedev de votre référentiel, retournez au tableau de bord CircleCI.

Ensuite, vous allez créer un contexte CircleCI pour héberger les variables d'environnement nécessaires au flux de travail que vous avez décrit dans le fichier YAML précédent. Sur le côté gauche de l'écran, vous trouverez un boutonSETTINGS. Cliquez dessus, puis sélectionnezContexts sous l'en-têteORGANIZATION. Enfin, cliquez sur le boutonCreate Context sur le côté droit de l'écran:

Create Context Screen for CircleCI

CircleCI vous demandera alors le nom de ce contexte. EntrezDOCKERHUB, puis cliquez surCreate. Une fois que vous avez créé le contexte, sélectionnez le contexteDOCKERHUB et cliquez sur le boutonAdd Environment Variable. Pour le premier, saisissez le nomDOCKERHUB_USERNAME, et dans lesValue saisissez votre nom d'utilisateur Docker Hub.

Add Environment Variable Screen for CircleCI

Ajoutez ensuite une autre variable d'environnement, mais cette fois, nommez-laDOCKERHUB_PASSWORD et remplissez le champValue avec votre mot de passe Docker Hub.

Lorsque vous avez créé les deux variables d'environnement pour votre contexteDOCKERHUB, créez un projet CircleCI pour l'application de test RSVP. Pour ce faire, sélectionnez le boutonADD PROJECTS dans le menu de gauche. Cela donnera une liste de projets GitHub liés à votre compte. Sélectionnezrsvpapp-webinar4 dans la liste et cliquez sur le boutonSet Up Project.

[.note] #Note: Sirsvpapp-webinar4 n'apparaît pas dans la liste, rechargez la page CircleCI. Parfois, cela peut prendre un moment pour que les projets GitHub apparaissent dans l'interface CircleCI.
#

Vous vous retrouverez maintenant sur la pageSet Up Project:

Set Up Project Screen for CircleCI

En haut de l'écran, CircleCI vous demande de créer un fichierconfig.yml. Puisque vous avez déjà fait cela, faites défiler vers le bas pour trouver le boutonStart Building sur le côté droit de la page. En sélectionnant cette option, vous indiquez à CircleCI de commencer à surveiller les modifications apportées à votre application.

Cliquez sur le boutonStart Building. CircleCI vous redirigera vers une page d'avancement / statut de la construction, qui n'a pas encore de version.

Pour tester le déclencheur du pipeline, accédez au référentiel récemment forké àhttps://github.com/your_GitHub_username/rsvpapp-webinar4 et apportez quelques modifications dans la branchedev uniquement. Puisque vous avez ajouté le filtre de brancheonly: dev à votre fichier.circleci/config, CI ne se construira qu'en cas de changement dans la branchedev. Modifiez le code de branche dedevet vous constaterez que CircleCI a déclenché un nouveau flux de travail dans l'interface utilisateur. Cliquez sur le flux de travail en cours et vous trouverez les détails de ce que fait CircleCI:

CircleCI Project Workflow Page

Votre flux de travail CircleCI prenant en charge l'aspect d'intégration continue de votre système GitOps CI / CD, vous pouvez installer et configurer le CD Argo sur votre cluster Kubernetes afin de traiter le déploiement continu.

[[step-2 -—- install-and-configuring-argo-cd-on-your-kubernetes-cluster]] == Étape 2 - Installation et configuration du CD Argo sur votre cluster Kubernetes

Tout comme CircleCI utilise GitHub pour déclencher des tests automatisés sur les modifications du code source, Argo CD connecte votre cluster Kubernetes à votre référentiel GitHub pour écouter les modifications et déployer automatiquement l'application mise à jour. Pour le configurer, vous devez d'abord installer Argo CD dans votre cluster.

Commencez par créer unnamespace nomméargocd:

kubectl create namespace argocd

Au sein de cet espace de noms, Argo CD exécutera tous les services et ressources nécessaires pour créer son flux de travail de déploiement continu.

Ensuite, téléchargez lesArgo CD manifest depuis le référentiel GitHub officiel pour Argo:

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v0.9.2/manifests/install.yaml

Dans cette commande, l'indicateur-n ordonne àkubectl d'appliquer le manifeste à l'espace de nomsargocd, et-f spécifie le nom de fichier pour le manifeste qu'il appliquera, dans ce cas celui téléchargé depuis le référentiel Argo.

En utilisant la commandekubectl get, vous pouvez trouver les pods en cours d’exécution dans l’espace de nomsargocd:

kubectl get pod -n argocd

L'utilisation de cette commande produira un résultat similaire à celui-ci:

NAME                                      READY     STATUS    RESTARTS   AGE
application-controller-6d68475cd4-j4jtj   1/1       Running   0          1m
argocd-repo-server-78f556f55b-tmkvj       1/1       Running   0          1m
argocd-server-78f47bf789-trrbw            1/1       Running   0          1m
dex-server-74dc6c5ff4-fbr5g               1/1       Running   0          1m

Maintenant que le CD Argo est en cours d’exécution sur votre cluster, téléchargez l’outil CLI du CD Argo afin de pouvoir contrôler le programme à partir de votre ligne de commande:

curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/v0.9.2/argocd-linux-amd64

Une fois que vous avez téléchargé le fichier, utilisezchmod pour le rendre exécutable:

chmod +x /usr/local/bin/argocd

Pour trouver le service de CD Argo, exécutez la commandekubectl get dans l'espace de nomsargocd:

kubectl get svc -n argocd argocd-server

Vous obtiendrez une sortie similaire à celle-ci:

OutputNAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
argocd-server   ClusterIP   10.109.189.243           80/TCP,443/TCP   8m

Maintenant, accédez au serveur API de CD Argo. Ce serveur ne disposant pas automatiquement d'une adresse IP externe, vous devez donc d'abord exposer l'API afin de pouvoir y accéder à partir de votre navigateur sur votre poste de travail local. Pour ce faire, utilisezkubectl port-forward pour rediriger le port8080 de votre poste de travail local vers le port TCP80 du serviceargocd-server à partir de la sortie précédente:

kubectl port-forward svc/argocd-server -n argocd 8080:80

La sortie sera:

OutputForwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080

Une fois que vous exécutez la commandeport-forward, votre invite de commande disparaîtra de votre terminal. Pour entrer davantage de commandes pour votre cluster Kubernetes, ouvrez une nouvelle fenêtre de terminal et connectez-vous à votre serveur distant.

Pour terminer la connexion, utilisezssh pour transférer le port8080 depuis votre machine locale. Tout d'abord, ouvrez une fenêtre de terminal supplémentaire et, à partir de votre poste de travail local, entrez la commande suivante, en remplaçantremote_server_IP_address par l'adresse IP du serveur distant sur lequel vous exécutez votre cluster Kubernetes:

ssh -L 8080:localhost:8080 root@remote_server_IP_address

Pour vous assurer que le serveur de CD Argo est exposé à votre poste de travail local, ouvrez un navigateur et accédez à l'URLlocalhost:8080. Vous verrez la page de destination du CD Argo:

Sign In Page for ArgoCD

Maintenant que vous avez installé Argo CD et exposé son serveur sur votre poste de travail local, vous pouvez passer à l'étape suivante, à laquelle vous allez connecter GitHub à votre service de CD Argo.

[[step-3 -—- connection-argo-cd-to-github]] == Étape 3 - Connexion du CD Argo à GitHub

Pour permettre à Argo CD d'écouter GitHub et de synchroniser les déploiements sur votre référentiel, vous devez d'abord connecter Argo CD à GitHub. Pour ce faire, connectez-vous à Argo.

Par défaut, le mot de passe de votre compte CD Argo est le nom du pod du serveur API de CD Argo. Revenez à la fenêtre du terminal qui est connectée à votre serveur distant mais ne gère pas le transfert de port. Récupérez le mot de passe avec la commande suivante:

kubectl get pods -n argocd -l app=argocd-server -o name | cut -d'/' -f 2

Vous obtiendrez le nom du pod exécutant le serveur API Argo:

Outputargocd-server-b686c584b-6ktwf

Entrez la commande suivante pour vous connecter à partir de la CLI:

argocd login localhost:8080

Vous recevrez l'invite suivante:

OutputWARNING: server certificate had error: x509: certificate signed by unknown authority. Proceed insecurely (y/n)?

Pour les besoins de cette démonstration, tapezy pour continuer sans connexion sécurisée. Argo CD vous demandera alors votre nom d'utilisateur et votre mot de passe. Entrezadmin pour le nom d'utilisateur et le nom complet du podargocd-server pour votre mot de passe. Une fois que vous avez entré vos identifiants, vous recevrez le message suivant:

Output'admin' logged in successfully
Context 'localhost:8080' updated

Maintenant que vous êtes connecté, utilisez la commande suivante pour changer votre mot de passe:

argocd account update-password

Argo CD vous demandera votre mot de passe actuel et le mot de passe que vous souhaitez changer. Choisissez un mot de passe sécurisé et entrez-le aux invites. Une fois cela fait, utilisez votre nouveau mot de passe pour vous reconnecter:

argocd relogin

Entrez votre mot de passe à nouveau et vous obtiendrez:

OutputContext 'localhost:8080' updated

Si vous déployiez une application sur un cluster externe au cluster Argo CD, vous devez enregistrer les informations d’identification du cluster d’applications sur Argo CD. Si, comme c'est le cas avec ce didacticiel, Argo CD et votre application sont sur le même cluster, vous utiliserezhttps://kubernetes.default.svc comme serveur API Kubernetes lors de la connexion du CD Argo à votre application.

Pour montrer comment on peut enregistrer un cluster externe, commencez par obtenir une liste de vos contextes Kubernetes:

kubectl config get-contexts

Tu auras:

OutputCURRENT   NAME       CLUSTER    AUTHINFO   NAMESPACE
*         minikube   minikube   minikube

Pour ajouter un cluster, entrez la commande suivante, avec le nom de votre cluster à la place du nom en surbrillance:

argocd cluster add minikube

Dans ce cas, la commande précédente donnerait:

OutputINFO[0000] ServiceAccount "argocd-manager" created
INFO[0000] ClusterRole "argocd-manager-role" created
INFO[0000] ClusterRoleBinding "argocd-manager-role-binding" created, bound "argocd-manager" to "argocd-manager-role"
Cluster 'minikube' added

Maintenant que vous avez configuré vos informations de connexion pour Argo CD et testé l'ajout d'un cluster externe, passez à la page de destination Argo CD et connectez-vous à partir de votre poste de travail local. Argo CD vous dirigera vers la page des applications Argo CD:

Argo CD Applications Screen

De là, cliquez sur l'icôneSettings dans la barre d'outils de gauche, cliquez surRepositories, puis surCONNECT REPO. Argo CD vous présentera trois champs pour vos informations GitHub:

Argo CD Connect Git Repo Page

Dans le champ pourRepository URL, entrezhttps://github.com/your_GitHub_username/rsvpapp-webinar4, puis entrez votre nom d'utilisateur et votre mot de passe GitHub. Une fois que vous avez entré vos informations d'identification, cliquez sur le boutonCONNECT en haut de l'écran.

Une fois que vous avez connecté votre référentiel contenant l'application de démonstration RSVP au CD Argo, choisissez l'icôneApps dans la barre d'outils de gauche, cliquez sur le bouton+ dans le coin supérieur droit de l'écran, et sélectionnezNew Application. Sur la pageSelect Repository, sélectionnez votre référentiel GitHub pour l'application RSVP et cliquez sur Suivant. Puis choisissezCREATE APP FROM DIRECTORY pour accéder à une page qui vous demande de revoir les paramètres de votre application:

Argo CD Review application parameters Page

Le champPath désigne l'emplacement du fichier YAML de votre application dans votre référentiel GitHub. Pour ce projet, tapezk8s. PourApplication Name, saisissezrsvpapp, et pourCluster URL, sélectionnezhttps://kubernetes.default.svc dans le menu déroulant, car Argo CD et votre application sont sur le même cluster Kubernetes. Enfin, entrezdefault pourNamespace.

Une fois que vous avez rempli vos paramètres d'application, cliquez surCREATE en haut de l'écran. Une boîte apparaîtra, représentant votre application:

Argo CD APPLICATIONS Page with rsvpapp

AprèsStatus:, vous verrez que votre application estOutOfSync avec votre référentiel GitHub. Pour déployer votre application telle quelle sur GitHub, cliquez surACTIONS et choisissezSync. Après quelques instants, l'état de votre application passera àSynced, ce qui signifie qu'Argo CD a déployé votre application.

Une fois votre application déployée, cliquez sur votre zone d’application pour trouver un schéma détaillé de votre application:

Argo CD Application Details Page for rsvpapp

Pour rechercher ce déploiement sur votre cluster Kubernetes, revenez dans la fenêtre du terminal de votre serveur distant et entrez:

kubectl get pod

Vous recevrez une sortie avec les pods exécutant votre application:

OutputNAME                      READY     STATUS    RESTARTS   AGE
rsvp-755d87f66b-hgfb5     1/1       Running   0          12m
rsvp-755d87f66b-p2bsh     1/1       Running   0          12m
rsvp-db-54996bf89-gljjz   1/1       Running   0          12m

Ensuite, vérifiez les services:

kubectl get svc

Vous trouverez un service pour l'application RSVP et votre base de données MongoDB, en plus du numéro du port à partir duquel votre application s'exécute, mis en évidence dans les éléments suivants:

NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1               443/TCP        2h
mongodb      ClusterIP   10.102.150.54           27017/TCP      25m
rsvp         NodePort    10.106.91.108           80:31350/TCP   25m

Vous pouvez trouver votre application RSVP déployée en accédant àyour_remote_server_IP_address:app_port_number dans votre navigateur, en utilisant le numéro en surbrillance précédent pourapp_port_number:

RSVP Application

Maintenant que vous avez déployé votre application à l'aide d'Argo CD, vous pouvez tester votre système de déploiement continu et l'ajuster pour qu'il se synchronise automatiquement avec GitHub.

[[step-4 -—- testing-your-continu-deployment-setup]] == Étape 4 - Test de votre configuration de déploiement continu

Avec la configuration du CD Argo, testez votre système de déploiement continu en apportant une modification à votre projet et en déclenchant une nouvelle version de votre application.

Dans votre navigateur, accédez àhttps://github.com/your_GitHub_username/rsvpapp-webinar4, cliquez dans la branchemaster et mettez à jour le fichierk8s/rsvp.yaml pour déployer votre application en utilisant l'image créée par CircleCI comme base. Ajoutezdev aprèsimage: nkhare/rsvpapp:, comme indiqué ci-dessous:

rsvpapp-webinar2/k8s/rsvp.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: rsvp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: rsvp
  template:
    metadata:
      labels:
        app: rsvp
    spec:
      containers:
      - name: rsvp-app
        image: nkhare/rsvpapp: dev
        imagePullPolicy: Always
        livenessProbe:
          httpGet:
            path: /
            port: 5000
          periodSeconds: 30
          timeoutSeconds: 1
          initialDelaySeconds: 50
        env:
        - name: MONGODB_HOST
          value: mongodb
        ports:
        - containerPort: 5000
          name: web-port
. . .

Au lieu d'extraire l'image d'origine de Docker Hub, Argo CD utilisera désormais l'imagedev créée dans le système d'intégration continue pour créer l'application.

Validez la modification, puis revenez à l'interface utilisateur ArgoCD. Vous remarquerez que rien n'a encore changé; En effet, vous n'avez pas activé la synchronisation automatique et devez synchroniser l'application manuellement.

Pour synchroniser manuellement l'application, cliquez sur le cercle bleu en haut à droite de l'écran, puis surSync. Un nouveau menu apparaîtra, avec un champ pour nommer votre nouvelle révision et une case à cocher intituléePRUNE:

Synchronization Page for Argo CD

Cochez cette case pour vous assurer que, une fois que Argo CD lancera votre nouvelle application, la version obsolète sera détruite. Cliquez sur la casePRUNE, puis surSYNCHRONIZE en haut de l'écran. Vous verrez les anciens éléments de votre application se dégrader et les nouveaux s'afficher avec votre image CircleCI. Si la nouvelle image incluait des modifications, vous retrouveriez ces nouvelles modifications reflétées dans votre application à l'URLyour_remote_server_IP_address:app_port_number.

Comme mentionné précédemment, Argo CD propose également une option de synchronisation automatique qui intégrera les modifications apportées à votre application à mesure que vous les apportez. Pour l'activer, ouvrez votre terminal pour votre serveur distant et utilisez la commande suivante:

argocd app set rsvpapp --sync-policy automated

Pour vous assurer que les révisions ne sont pas supprimées par inadvertance, la suppression par défaut de la synchronisation automatique a été désactivée. Pour activer l'élagage automatique, ajoutez simplement l'indicateur--auto-prune à la fin de la commande précédente.

Maintenant que vous avez ajouté des fonctionnalités de déploiement continu à votre cluster Kubernetes, vous avez terminé la démonstration du système GitOps CI / CD avec CircleCI et Argo CD.

Conclusion

Dans ce tutoriel, vous avez créé un pipeline avec CircleCI qui déclenche des tests et crée des images mises à jour lorsque vous modifiez le code dans votre référentiel GitHub. Vous avez également utilisé Argo CD pour déployer une application en incorporant automatiquement les modifications intégrées à CircleCI. Vous pouvez maintenant utiliser ces outils pour créer votre propre système GitOps CI / CD utilisant Git comme thème principal.

Si vous souhaitez en savoir plus sur Git, consultez notre série de didacticielsAn Introduction to Open Source. Pour explorer d'autres outils DevOps qui s'intègrent aux référentiels Git, jetez un œil àHow To Install and Configure GitLab on Ubuntu 18.04.

Related