Fil de coupe: migration de Puppet Enterprise vers Ansible Tower. Partie 2

Le National Environmental Satellite Information Service (NESDIS) a réduit ses coûts de gestion de la configuration de Red Hat Enterprise Linux (RHEL) de 35% en passant de Puppet Enterprise à Ansible Tower. Dans cette vidéo de la catégorie «comment nous l'avons fait», l'ingénieur système Michael Rau justifie la mise en œuvre de cette migration, partage des conseils utiles et l'expérience acquise lors de la transition d'un SCM à l'autre.

De cette vidéo, vous apprendrez:

  • Comment justifier la gestion de la faisabilité de passer de Puppet Enterprise à Ansible Tower;
  • quelles stratégies utiliser pour une transition en douceur;
  • conseils pour transcoder les manifestes PE dans Ansible Playbook;
  • Meilleures pratiques pour l'installation d'Ansible Tower.



Fil de coupe: migration de Puppet Enterprise vers Ansible Tower. Partie 1



J'ai des balises pour le déploiement initial qui s'exécutent toutes. J'ai des balises qui vérifient les changements dans 20% de l'infrastructure qui se produisent dans 80% du temps de travail. Une situation similaire avec des rôles. Il existe un code de maintenance, un second qui organise le déploiement et un troisième qui lance le matériel, disons, une fois par jour. Le rôle vérifie les modifications apportées à tous les équipements à déployer et des vérifications sont effectuées toutes les deux heures pour les équipements susceptibles d'être modifiés. Cela s'applique au pare-feu, à certaines tâches administratives, etc.

Utilisez les bonnes habitudes que vous avez acquises lors de l'écriture de code pour Puppet, car elles seront utiles pour Ansible. Par exemple, une chose telle que l'idempotence est une propriété d'un objet ou d'une opération lors de la nouvelle application de l'opération à l'objet pour donner le même résultat que le premier. Dans notre cas, cela signifie que lorsque vous exécutez à nouveau le même script Playbook, rien ne change et le système vous indique que rien n'a changé. Si les modifications sont validées, cela signifie que quelque chose ne va pas avec votre code. Autrement dit, l'idempotence vous aidera à détecter quand quelque chose ne va pas lors du démarrage des mêmes opérations de routine.
Utilisez des faits et des schémas, évitez les données codées en dur. Ansible vous permet de le faire avec des scripts, en manipulant de manière flexible un ensemble de données et en saisissant les modifications à la volée. Il n'y a rien de tel dans Puppet, vous devez placer toutes les données importantes à l'intérieur du code source. Par conséquent, utilisez des rôles, cela facilitera grandement votre tâche.

Utilisez des gestionnaires d'événements provoqués par un changement de configuration. La bonne chose est que les gestionnaires peuvent travailler avec des séquences protégées. Documentez tout ce que vous faites. Je déteste quand je tombe sur un code que j'ai écrit il y a six mois, sans rien documenter à ce moment-là, et je ne me souviens pas pourquoi je l'ai écrit du tout. Par conséquent, toute tâche doit avoir une description. Chaque rôle et script que vous écrivez doivent avoir leur propre fichier Lisez-moi, qui enregistrera comment les utiliser et ce qu'ils font. Croyez-moi, plus tard cela vous sera très utile.



Vous devez profiter des nouvelles libertés offertes par Ansible. Vous pouvez affecter le même fichier plusieurs fois si nécessaire. Par exemple, si vous devez modifier plusieurs paramètres du fichier sshd_config dans un script contenant des paramètres importants pour d'autres scripts, vous pouvez le faire. Puppet ne le permet pas.
Avec Ansible, vous obtenez une exécution de programme prévisible. Ils fonctionnent exactement comme vous attendez d'eux, et vous n'avez pas besoin de surveiller les erreurs d'exécution de code. Si vous travaillez avec EXEC, sachez que les gestionnaires Ansible sont plus intelligents que les gestionnaires Puppet. Utilisez des astuces Ansible comme ma fonction de délégation préférée. Par exemple, vous avez démarré un playbook pour le serveur A, mais une partie des étapes de ce script doit être effectuée indépendamment sur le serveur B. J'ai utilisé la fonction de délégation pour migrer de la marionnette vers Ansible. Avec cette fonction, vous pouvez configurer l'exécution de la tâche sur un hôte différent, et non sur celui qui a été configuré à l'aide de la clé delegate_to. Le module sera toujours exécuté une fois pour chaque machine, mais au lieu de travailler sur la machine cible, il fonctionnera sur un hôte délégué,de plus, tous les faits disponibles seront applicables à l'hôte actuel. Cela réduira considérablement la quantité de paramètres système manuels.

Les données de votre bibliothèque Puppet Hiera peuvent être utilisées comme des faits Ansible, qui sont des informations sur les nœuds connectés. Faits - c'est ce que le module Gather facts collecte pendant l'exécution: la quantité d'espace disque, la version et le type de système d'exploitation, le nom d'hôte, la quantité de mémoire disponible, l'architecture du processeur, les adresses IP, les interfaces réseau et leur état. Je ne veux pas dire des informations de service cachées au fond des données - utilisez simplement les scripts de votre équipement pour former des groupes et des nœuds variables. Mon script matériel indique au système les sites physiques qu'il contient. Plus tard, j'utilise des rôles, par exemple, l'un des rôles contient des informations sur l'infrastructure pour chaque site physique, telles que les ressources NTP, les serveurs DNS, les adresses IP des équipements modulaires, les scanners Nessus, etc.Collectez les variables communes en un seul rôle si vous les placez à plusieurs endroits et placez-les sur l'hôte en tant que fichier /etc/ansible/facts.d/.

Ainsi, nous considérerons réellement le processus de migration. Je le répète - pour moi, cela a pris beaucoup de temps, mais vous pouvez le réduire. Tout d'abord, vous devez acheter et déployer la tour. Il s'agit d'un processus très compréhensible, il suffit de suivre la documentation d'installation.



Après avoir installé Tower, vous aurez immédiatement accès à l'interface Web. Ensuite, vous devez installer un script d'inventaire et créer une liste d'équipements. Vous pouvez copier et coller des scripts existants dans la tour.

Ensuite, définissez les autorisations Git et les autorisations en donnant à Tower un accès direct au référentiel Git où vous stockez les playbooks. Ainsi, vous permettrez à Tower de recevoir instantanément des informations des scripts sur les modifications et de les mettre en œuvre immédiatement. Vous n'avez rien à dire à Tower, il vérifiera simplement l'état du système et exécutera la dernière version de la configuration.

Installez un compte Tower standard pour SSH sur vos hôtes. J'utilise l'accès à distance, donc j'utilise le compte standard et le programme d'administration système SUDO pour définir les privilèges. Bien sûr, Tower a un mot de passe, vous ne risquez donc pas la sécurité en utilisant le mot de passe SUDO.

Configurez l'authentification Tower en fonction de la structure d'accès de votre organisation. Décidez de l'accès pour les départements, les équipes, la répartition de l'accès aux rôles, gérez les autorisations spéciales. C'est une tâche très volumineuse, selon la taille de votre organisation, mais rappelez-vous que du point de vue de l'administration de la Tour, grâce à la configuration flexible des accès, cela peut grandement vous simplifier la vie.

Maintenant que le référentiel Git est déployé, installez et configurez des modèles de travail pour les playbooks. Testez les performances de tout ce que vous faites avec Tower. Après avoir vérifié que vos scripts sont en parfait état, vous pouvez procéder à la migration de l'hôte. Utilisez Ansible pour supprimer l'agent Puppet et «nettoyer» le nœud du serveur Puppet à l'aide d'un script spécial. C'est très simple.



J'ai créé un groupe appelé Tower, l'ai ajouté au script Ansible et l'ai envoyé à tous les hôtes. Après cela, ce playbook a arrêté les services Puppet, désinstallé tous les packages Puppet Enterprise et effacé les répertoires. Il a également supprimé les utilisateurs de Puppet - puisque nous supprimons PE, nous supprimons également les utilisateurs PE.

Nous voyons la fonction de délégation en action. Maintenant, je peux aller dans le Puppet Master et utiliser les commandes 2-3 pour effacer le registre, puis prendre une capture d'écran montrant que ce SCM a été supprimé. Il servira de preuve documentaire que nous n'utilisons plus de PE.

Voyons maintenant ce qui devrait recevoir une attention maximale - mes erreurs qui devraient être évitées. Cela est principalement lié à la dépendance des scénarios les uns par rapport aux autres. Il est possible que les variables d'un playbook dépendent des variables d'un autre playbook. N'oubliez pas que vous pouvez insérer des exigences dans chaque scénario qui permettent l'utilisation d'un scénario ou d'un rôle différent. J'ai créé des rôles pour les variables de tous nos sites, et chacun de ces rôles contenait de nombreuses variables. Par conséquent, j'ai utilisé le fichier requirements.yml pour centraliser les variables communes. Il vous permet d'installer plusieurs collections de contenu Ansible avec une seule équipe.



Si nous modifions la passerelle ou le serveur NTP par défaut, ces modifications seront immédiatement répercutées dans tous les éléments de l'infrastructure.

Évitez d'utiliser des rôles et des scripts massifs et volumineux. Les scénarios et rôles courts pour des tâches spécifiques sont plus efficaces et fiables, plus faciles à gérer et à suivre.

Faites attention à une dernière chose - lorsque vous lancez Tower et accédez à sa page, vous verrez un affichage de nombreux paramètres en rouge. Cette couleur est une alarme, mais voici le problème. Vous démarrez le processus sur des centaines d'hôtes, et si 99 d'entre eux fonctionnent correctement, et l'un d'eux ne fonctionne pas, Tower signalera un échec du processus. Il placera un marqueur rouge vif sur l'écran illustrant ce travail. Ne paniquez pas, mais essayez de savoir pourquoi ce nœud unique ne fonctionne pas. Lorsque vous regardez l'écran Puppet Master et voyez 99 voyants verts et un rouge, vous pensez que tout est en ordre, le système fonctionne bien. La tour est plus stricte, mais moins informative sur les messages d'erreur. Peut-être que dans les futures versions d'Ansible, cette lacune sera éliminée, mais pour l'instant essayez simplement de déterminer la cause de l'alarme, en vous souvenantqu'une telle alarme ne peut pas porter quoi que ce soit de critique en soi - juste de cette façon, le système signale une défaillance sur un hôte.

Soyez prudent si vous avez des hôtes temporaires qui ne sont pas toujours en ligne. Par exemple, mon système possède plusieurs ordinateurs portables. Nous les administrons à l'aide d'Ansible Tower de la même manière que les hôtes permanents, mais comme il s'agit d'appareils mobiles, ils ne sont pas toujours présents sur le réseau. Si vous utilisez des hôtes temporaires lors de l'exécution de processus standard, mais que la tour ne les détecte pas sur le réseau au démarrage du système, une alarme et un message d'échec de processus apparaissent immédiatement sur son écran. Tower ignore que ces ordinateurs portables sont actuellement éteints. Il n'y a aucun problème avec cela, gardez à l'esprit qu'une telle situation peut provoquer un message d'alarme.

Il existe un bon moyen d'utiliser l'API Tower. Lorsque l'ordinateur portable démarre dans le cadre de la procédure de démarrage standard du système, il utilise l'API pour dire à la tour: "hé, je suis là, y a-t-il du travail pour moi?", Après quoi la tour vérifie maintenant les tâches pour cette machine particulière, car sait qu'elle est en ligne.

Au début, nous avons également rencontré des problèmes: l'exécution d'opérations parallèles. Par défaut, Ansible utilise 5 hôtes parallèles pour effectuer un travail. Par conséquent, le lancement du même travail planifié pour 100 machines prend jusqu'à 20 minutes par hôte en vérifiant les paramètres de la configuration principale. Ainsi, nous commençons d'abord la configuration sur 5 hôtes, puis 5 autres, 5 autres et ainsi de suite. Au début, cette circonstance nous a rendus très nerveux, car le déploiement du système sur 50 hôtes a eu lieu en 2 heures. La solution à ce problème est la suivante.
Il suffit de définir un nombre d'hôtes parallèles sur le serveur Ansible Tower différent de 5. Étant donné que 150 hôtes s'exécutent simultanément, j'ai défini cette valeur sur 25. Après cela, 6 correctifs, par exemple, ont été installés assez rapidement. Si vous le souhaitez, vous pouvez définir ce paramètre sur 50 - tout dépend de la puissance de calcul et de la quantité de RAM dont vous disposez. De cette façon, Tower vous permet de personnaliser l'exécution de processus parallèles en fonction de vos besoins.



Si vous avez des questions sur le sujet du rapport, n'hésitez pas à contacter les contacts indiqués. Vous voyez l'adresse e-mail où vous pouvez envoyer un e-mail décrivant le problème survenu lors du passage de Puppet à Ansible, et j'essaierai de vous répondre dans les plus brefs délais. Je vous remercie de votre participation et vous souhaite une migration réussie!

Un peu de publicité :)


Merci de rester avec nous. Aimez-vous nos articles? Vous voulez voir des matériaux plus intéressants? Soutenez-nous en passant une commande ou en recommandant à vos amis des VPS basés sur le cloud pour les développeurs à partir de 4,99 $ , un analogue unique de serveurs d'entrée de gamme que nous avons inventés pour vous: Toute la vérité sur les VPS (KVM) E5-2697 v3 (6 cœurs) 10 Go DDR4 480 Go SSD 1 Gbit / s à partir de 19 $ ou comment diviser le serveur? (les options sont disponibles avec RAID1 et RAID10, jusqu'à 24 cœurs et jusqu'à 40 Go de DDR4).

Dell R730xd 2 fois moins cher au centre de données Equinix Tier IV à Amsterdam? Nous avons seulement 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV à partir de 199 $ aux Pays-Bas!Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - à partir de 99 $! En savoir plus sur la création d'un bâtiment d'infrastructure. classe c utilisant des serveurs Dell R730xd E5-2650 v4 coûtant 9 000 euros pour un sou?

All Articles