Ansible : L'outil indispensable pour les administrateurs SRE
Ma définition
Ansible permet de mettre en application le concept « Don’t Repeat Yourself (DRY) » qui a été popularisé par Andy Hunt et Dave Thomas. Il vise à éviter la répétition dans le code afin d’obtenir un programme ou un script lisible, efficace et surtout maintenable. Ce concept forme le socle de base d’un profil d’administrateur SRE. Un administrateur SRE se doit d’être fiable, efficace et flexible. Pour cela, de nombreuses technologies ont été créées. L’une d’entre elles se nomme « Ansible ». Cette technologie permet de centraliser des configurations ainsi que de les distribuer à un nombre défini de machines. Dans ce cadre, elle répond à une des problématiques les plus chronophages : la répétition d’une même tâche. Par exemple, au sein d’une infrastructure regroupant plusieurs machines, il est nécessaire de configurer manuellement chaque machine avant de les utiliser. Ansible résout cette problématique en fournissant un outil permettant de définir des tâches complexes au sein de plusieurs fichiers de configuration, puis de les appliquer sur un inventaire de machines défini. Ansible est un atout indispensable pour les administrateurs système et les administrateurs SRE.
Mes éléments de preuve
Au cours de mon alternance au sein du Ministère des Armées, j’ai pu automatiser de nombreuses tâches avec des scripts Ansible. J’avais pour mission de gérer un cluster Mesosphere hautement disponible. Un cluster en informatique est un ensemble de plusieurs machines interconnectées (généralement des machines virtuelles). Elles travaillent ensemble pour optimiser la performance, la haute disponibilité et la redondance des applications qu’elles font fonctionner. Quant à Mesosphere, il s’agit simplement d’une suite d’outils permettant de créer et d’administrer intégralement un cluster. Dans ce cadre, de nombreuses tâches m’ont été affectées. J’ai notamment dû migrer l’intégralité des machines virtuelles sur un autre réseau. Une machine virtuelle en informatique est un logiciel qui permet de créer un ordinateur à l’intérieur d’un vrai ordinateur. Grâce à cette notion, il est possible de diviser un ordinateur en plusieurs machines virtuelles pour améliorer la répartition de l’utilisation des ressources ainsi que la sécurité. Étant donné que le travail se fait uniquement hors réseau Internet et qu’il n’y avait pas d’outil disponible en interne afin de migrer les machines virtuelles. L’unique moyen était de créer et de configurer les nouvelles machines virtuelles qui allaient composer le cluster manuellement. La configuration de plusieurs centaines de machines virtuelles qui composaient le cluster m’aurait pris énormément de temps, si j’avais dû le faire manuellement. Dans ce cadre, j’ai opté pour l’utilisation d’Ansible afin de définir une seule fois la configuration des machines virtuelles à configurer. Pour finalement, n’avoir plus qu’à l’exécuter pour qu’il réplique la configuration de manière identique sur l’intégralité des nouvelles machines virtuelles. Grâce à Ansible, j’ai eu à définir la configuration d’une machine virtuelle qu’une fois pour un nombre illimité de machines virtuelles. Un autre avantage est la flexibilité d’Ansible. Il permet de rajouter une couche d’abstraction en ne se limitant pas à un environnement propre. Il peut très bien fonctionner sur un système d’exploitation CentOS ou encore un système d’exploitation Debian. De plus, Ansible utilise le format YAML, le code est par conséquent bien découpé, lisible et maintenable. YAML est un format de données particulièrement adapté pour les fichiers de configuration. Tous ces avantages font d’Ansible le parfait candidat pour la gestion des configurations des machines virtuelles formant le cluster. En plus de cela, il permet d’éviter les erreurs humaines qui ont plus de chances de se produire lors de tâches répétitives. Il permettra à l’avenir de modifier ou d’ajouter facilement des machines virtuelles au sein du cluster. Par exemple, Ansible m’a permis de configurer et d’ajouter une machine virtuelle au sein du cluster en seulement cinq minutes de manière 100% automatique. Contrairement aux 50 minutes que j’aurais dû passer si j’avais dû la configurer manuellement.
Toujours au cours de mon alternance au sein du Ministère des Armées, j’ai dû faire face à des problèmes critiques. À un moment donné, le cluster dont j’avais en partie la charge a rencontré une panne. La gestion de cette panne faisait partie de ma mission. Lors de cette panne, il a perdu la moitié des machines virtuelles qui le composaient en moins d’une seconde. Et quelques minutes plus tard, les machines virtuelles se sont réintégrées au cluster. Par conséquent, j’ai dû déterminer l’origine de la panne. Pour y parvenir, j’ai dû récolter des informations sur l’ensemble des nœuds, puis les comparer. J’ai vérifié si les machines virtuelles avaient redémarré et à quel moment elles ont été rajoutées au cluster, une fois la panne finie. J’ai aussi analysé les logs pour identifier les potentielles erreurs. Pour y parvenir, j’ai utilisé Ansible, ce qui m’a permis de gagner beaucoup de temps, car je n’ai eu qu’à définir une seule fois les actions à faire sur chaque machine virtuelle dans un fichier de configuration au format YAML. Grâce à Ansible, j’ai pu déterminer et prouver que la panne provenait d’un réseau spécifique qui était tombé en panne. J’ai réussi à le déterminer en moins d’une heure. Alors que sans Ansible, ça m’aurait pris beaucoup plus de temps, car j’aurais dû le faire manuellement sur toutes les machines virtuelles où j’aurais dû simuler le comportement d’Ansible avec du Bash, ce qui m’aurait pris au moins une journée.
Finalement, j’ai commencé par me former sur un environnement de test. L’objectif était de ne pas travailler directement sur des infrastructures sensibles du Ministère des Armées pour éviter toute erreur de ma part. Lors de mon stage de fin de bachelor, j’ai eu pour mission d’industrialiser intégralement la création d’un cluster Kubernetes dans un réseau privé et sensible. Il y avait plusieurs intérêts à ce projet. Le premier était de me former de manière à comprendre tous les rouages de cette technologie complexe, la seconde était de pouvoir réutiliser ce projet au sein du Ministère des Armées pour améliorer la souplesse, la haute disponibilité et la sécurité de leur infrastructure. Pour cela, j’ai utilisé la technologie Ansible afin de créer un cluster Kubernetes de manière immuable. Ça m’a permis de gagner beaucoup de temps. Avec Ansible, j’ai pu générer un nombre défini de machines virtuelles, puis les configurer avec Kubernetes pour former un cluster. Il m’a aussi permis de supprimer l’infrastructure Kubernetes mise en place et de la recréer autant de fois que j’en avais besoin. Par conséquent, j’ai pu réitérer de nombreuses fois sans perdre de temps sur la création et la configuration de l’infrastructure pour aller toujours plus loin dans la stabilité du projet. Grâce à cette solution, la création d’un petit cluster de vingt machines prend environ cinq minutes.
Mon autocritique
J’utilise Ansible au quotidien depuis plus de deux ans. J’ai pu me former et m’exercer auprès d’une équipe d’administrateurs SRE senior. Je pense donc arriver à un haut niveau d’expertise. Cette compétence est incontournable pour un profil d’administrateur SRE. Elle est demandée dans toutes les offres d’emploi. La force d’Ansible est de pouvoir gérer un grand nombre d’actions de manière idempotent. C’est-à-dire que peu importe l’environnement, l’action effectuée l’affectera de la même manière, qu’elle soit exécutée une ou plusieurs fois. De plus, Ansible est facilement maintenable et il n’a besoin que de très peu de dépendances pour fonctionner, contrairement à ces concurrents. S’il est utilisé sans outils complémentaires, il ne disposera pas de toutes les fonctionnalités nécessaires pour un Système d’Information en entreprise. Durant mon alternance, je me suis concentré sur les fonctionnalités proposées nativement par Ansible et j’ai pu me rendre compte des fonctionnalités manquantes. Il n’y a pas de gestion d’accès aux configurations par équipe et il n’y a pas non plus de traçabilité sur les actions réalisées avec les scripts Ansible. Par conséquent, il est très coûteux en temps de déterminer qui a exécuté tel ou tel script au sein du Système d’Information d’une entreprise. Heureusement, Red Hat, l’entreprise derrière cette technologie, a développé l’outil « Ansible Tower/AWX » qui répond exactement à ces problématiques. Actuellement, je ne me suis pas encore formé à cet outil. Malgré ces quelques fonctionnalités manquantes nativement, Ansible reste le leader dans sa catégorie et le plus plébiscité par les entreprises. Il est très pratique dans des environnements d’entreprise où un administrateur SRE peut être amené à administrer quelques centaines, voire des milliers de machines. Avec Ansible, il n’aura pas besoin de configurer toutes les machines une à une. L’administrateur SRE n’aura besoin que de définir une fois les configurations dans un projet Ansible et elles s’appliqueront de manière idempotente à toutes les machines désignées. Il est donc important et nécessaire de la maîtriser et de connaître ces limitations pour répondre au mieux aux besoins des entreprises.
Mon évolution dans cette compétence
Je souhaite continuer à m’améliorer en m’autoformant sur la solution Mitogen. Il s’agit d’un plugin d’Ansible qui permet d’améliorer grandement les performances d’Ansible en modifiant son comportement. Le de plusieurs secondes par tâche, répétée sur des centaines, voire des milliers de tâches, peut permettre de gagner de nombreuses heures de travail. Je souhaite aussi réaliser la certification « RHCE (Ingénieur certifié Red Hat) ». Elle me permettrait de travailler de nouvelles compétences en lien avec le métier d’administrateur SRE. Elle me permettrait aussi de renforcer mes connaissances au niveau d’Ansible. Cette certification me permettrait d’appréhender encore plus profondément Ansible tout en me formant auprès de l’entreprise Red Hat, père fondateur de cette technologie. À l’aide de cette certification, je pourrai appréhender la création de modules pour Ansible et je pourrai maitriser l’utilisation de l’outil comme Ansible Tower ouu Semaphore qui rajoutent de nombreuses notions à Ansible notamment sur la partie gestion des droits et sécurité. À l’avenir, je souhaite continuer à me former en réalisant de la veille sur les nouvelles fonctionnalités d’Ansible pour garder un haut niveau d’expertise.