Adopter GitOps pour Kubernetes sur AWS

Le 17 juin 2020 , j’ai eu la chance d’assister à l’ AWS EMEA Summit Online . Les conteneurs étaient un grand thème du sommet, et l’un des sujets les plus populaires à l’ordre du jour était Kubernetes GitOps sur AWS avec Jason Umiker.

Alors, qu’est-ce que GitOps et pourquoi devient-il si important pour les entreprises qui essaient d’exécuter Kubernetes sur AWS?

Qu’est-ce que GitOps?

Les pratiques modernes de développement de logiciels s’articulent autour de trois activités principales : 

  • Gestion du code source à l’aide d’outils comme Git
  • Création et test automatisés d’applications à l’aide d’outils tels que Jenkins ou CodeBuild
  • Déploiement de code automatisé à l’aide d’outils tels que CodeDeploy

Ces activités souvent combinées en tant que pipeline d’intégration continue, permettent de surveiller le dépôt Git de sorte à déclencher automatiquement une génération en réponse aux modifications du code source. 

Prenant l’idée de l’automatisation au niveau supérieur, la pratique du déploiement continu étend le pipeline d’une étape supplémentaire en déployant automatiquement le nouveau code dès qu’il a réussi les étapes de construction et de test. 

Une approche combinée CI / CD gère chaque étape du processus : à partir du moment où un changement de code est engagé jusqu’au déploiement. Cette approche présente un avantage énorme : vos applications fonctionnent dans tous les environnements, que ce soit le développement, l’intégration, la mise en scène ou la production!

GitOps s’appuie sur ces principes éprouvés, en conséquence nous pouvons appliquer la même philosophie pour la gestion des changements d’infrastructure en tant que code. Si l’infrastructure est gérée sous forme de code, pourquoi ne pas le stocker dans un système de contrôle de source comme Git ,et déclencher les mises à jour lorsqu’un changement est engagé ?

Pourquoi utiliser GitOps? 

La migration des charges de travail vers le cloud a considérablement accéléré l’adoption d’Infrastructure as Code comme approche de provisionnement des ressources. Des outils comme CloudFormation et AWS Cloud Development Kit (CDK) vous permettent de codifier puis modéliser et provisionner des ressources cloud à l’aide de langages de programmation familiers tels que JSON et YAML, ainsi que Python, Java et .Net. 

Git est l’outil que de nombreux développeurs utilisent déjà, il est donc logique d’intégrer également les équipes d’exploitation et d’infrastructure afin que tout le monde puisse bénéficier de pratiques de travail cohérentes, rationalisées et efficaces pour la gestion du code.
GitOps, rencontrez Kubernetes

Kubernetes prend en charge une approche déclarative pour créer, mettre à jour et supprimer des objets. Cela signifie que des fichiers de configuration définissent l’état souhaité des objets dans Kubernetes .

Les déploiements, pods et services Kubernetes tels que les équilibreurs de charge sont tous définis comme du code, contrôlé par version et stocké dans un référentiel de code source approprié tel que Git. 

Vous pouvez configurer des outils tels que CodePipeline et Flux CD pour remarquer les changements dans votre référentiel et prendre des mesures pour déclencher des mises à jour de votre infrastructure AWS.

Flux CD est un utilitaire simple qui s’exécute sur votre cluster Kubernetes. Au lieu d’exécuter manuellement des commandes telles que :

kubectl apply -f ./mydeployment.yaml

Chaque fois que vous souhaitez mettre à jour votre application, Flux CD extrait périodiquement les modifications de code de votre référentiel Git et applique les modifications pour vous!

Par défaut, la fréquence de tirage Git est définie sur 5 minutes,

Vous pouvez synchroniser les modifications immédiatement à l’aide de la commande suivante:

fluxctl sync –k8s-fwd-ns flux


5 conseils pour adopter GitOps pour votre charge de travail Kubernetes dans AWS 

Maintenant que nous avons quelques informations générales, passons en revue quelques conseils pour tirer le meilleur parti de GitOps dans votre flux de travail de déploiement Kubernetes.

1. Utilisez Git comme source de vérité

Avec Git, vous pouvez suivre l’historique complet des modifications apportées à votre code. Bien sûr, il faut mettre des commentaires appropriés lors de la validation d’un changement. Cela est une bonne pratique pour référencer un ticket relatif à une demande de fonctionnalité ou à un bogue.


2. Utilisez une branche Git par environnement

Les modifications fusionnées dans la branche peuvent alors déclencher un déploiement dans l’environnement correspondant. Il faut alors envisager que chaque développeur ait sa propre branche pour itérer ses propres modifications indépendamment. Ensuite, il peut fusionner les modifications apportées à un environnement et tester les modifications de tous les autres. Il peut enfin fusionner la branche, lorsqu’il est prêt à être publié en production.


3. Pratiquer une bonne gestion du changement

Premièrement, appliquez la révision par les pairs dans votre mécanisme de demande d’extraction pour chaque modification. Si vous considérez votre environnement de production comme un château, laissez Git être votre pont-levis. Deuxièmement, forcez toutes les modifications via le processus d’examen par les pairs dans Git. Troisièmement, configurez votre pipeline pour réaliser des tests d’intégration des modifications avant qu’elles soient mises en production. Par conséquent, tout cela garanti le bon fonctionnement de votre application dans tous les environnements.


4. Revenir en arrière avec Git

Avec Git, la seule chose que vous devez faire pour inverser un changement est de revenir à un commit précédent! Pour cela, vous utilisez une commande comme git revert HEAD qui annule les dernières modifications et revenir au commit précédent.


5. Automatisez tout

Le but ultime est bien sûr de tout automatiser. En effet, comme ça tout changement dans votre dépôt Git sera détecté et déclenchera une mise à jour de l’environnement correspondant. Par exemple, l’outil Flux CD. : il permet de (i) surveiller tous les référentiels d’images de conteneurs que vous spécifiez; (ii) détecter les nouvelles images; (iii) déclencher les déploiements; (iv) mettre à jour automatiquement la configuration en cours d’exécution souhaitée de votre cluster Kubernetes. Donc, cela garantit essentiellement que l’état de votre cluster Kubernetes correspond à la configuration que vous avez fournie dans Git.

Pour toutes les ressources extérieures à Kubernetes, telles que les bases de données RDS ou les instances EC2, vous pouvez utiliser CodePipeline pour déclencher automatiquement les modifications à appliquer à l’aide de CloudFormation.


Il est temps de s’engager

L’utilisation d’une approche GitOps pour gérer votre infrastructure Kubernetes dans AWS est un choix naturel.

Votre application fonctionne dans tous les environnements. 

Vos équipes de développement et d’exploitation utilisent les mêmes outils.

Vous contrôlez votre environnement et vous comprenez «qui, quoi, pourquoi, quand et qui a approuvé» pour chaque changement. De plus, vous avez la possibilité de revenir à un état antérieur connu et fiable chaque fois que vous en avez besoin!

About Oussama ABAI

One thought on “Adopter GitOps pour Kubernetes sur AWS

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Résoudre : *
24 + 13 =