Ansible : Migration d'une configuration de 120 VM de CoreOS vers CentOS en 18 mois

Ansible : Migration d'une configuration de 120 VM de CoreOS vers CentOS en 18 mois

Ceci est une transcription du discours DevopsConf 2019-10-01 и SPbLUG 2019-09-25.

C'est l'histoire d'un projet qui utilisait un système de gestion de configuration auto-écrit et pourquoi le passage à Ansible a pris 18 mois.

Jour n° -ХХХ : Avant le début

Ansible : Migration d'une configuration de 120 VM de CoreOS vers CentOS en 18 mois

Initialement, l'infrastructure se composait de nombreux hôtes distincts exécutant Hyper-V. La création d'une machine virtuelle a nécessité de nombreuses étapes : placer les disques au bon endroit, enregistrer le DNS, réserver le DHCP, mettre la configuration de la VM dans le référentiel git. Ce processus était partiellement mécanisé, mais par exemple, les machines virtuelles étaient distribuées manuellement entre les hôtes. Mais, par exemple, les développeurs pourraient corriger la configuration de la VM dans git et l'appliquer en redémarrant la VM.

Solution de gestion de configuration personnalisée

Ansible : Migration d'une configuration de 120 VM de CoreOS vers CentOS en 18 mois

L'idée originale, je suppose, a été conçue comme IaC : de nombreuses machines virtuelles sans état qui réinitialisent leur état à zéro lors du redémarrage. Qu’est-ce que la gestion de la configuration des VM ? Schématiquement, cela semble simple :

  1. Un MAC statique a été défini pour la VM.
  2. Un ISO avec CoreOS et un disque de démarrage étaient connectés à la VM.
  3. CoreOS lance le script de personnalisation en le téléchargeant depuis le serveur WEB en fonction de son IP.
  4. Le script télécharge la configuration de la VM via SCP en fonction de l'adresse IP.
  5. Le chausson des fichiers unitaires systemd et le chausson des scripts bash sont lancés.

Ansible : Migration d'une configuration de 120 VM de CoreOS vers CentOS en 18 mois

Cette solution présentait de nombreux problèmes évidents :

  1. CoreOS ISO est obsolète.
  2. Beaucoup d'actions automatisées complexes et de magie lors de la migration/création de VM.
  3. Difficulté avec la mise à jour et lorsqu'une certaine version du logiciel est nécessaire. Encore plus amusant avec les modules du noyau.
  4. Les machines virtuelles n'ont pas été obtenues sans données, c'est-à-dire Les machines virtuelles sont apparues avec un disque avec des données utilisateur supplémentaires montées.
  5. Quelqu'un était constamment en train de bousiller les dépendances de l'unité systemd et CoreOS se bloquait au redémarrage. Il était difficile de détecter cela en utilisant les outils disponibles dans CoreOS.
  6. Gestion des secrets.
  7. Il n'y avait pas de CM. Il y avait des configurations bash et YML pour CoreOS.

Pour appliquer la configuration de la VM, vous devez la redémarrer, mais il se peut qu'elle ne redémarre pas. Cela semble être un problème évident, mais il n'y a pas de disques persistants - il n'y a nulle part où enregistrer les journaux. Bon, ok, essayons d'ajouter l'option de chargement du noyau pour que les logs soient envoyés. Mais non, comme tout cela est compliqué.

Jour n°0 : Reconnaître le problème

Ansible : Migration d'une configuration de 120 VM de CoreOS vers CentOS en 18 mois

Il s'agissait de l'infrastructure de développement habituelle : jenkins, environnements de test, surveillance, registre. CoreOS a été conçu pour héberger des clusters k8s, c'est-à-dire le problème était de savoir comment CoreOS était utilisé. La première étape consistait à choisir une pile. Nous avons opté pour :

  1. CentOS comme distribution de base, car Il s'agit de la distribution la plus proche des environnements de production.
  2. Ansible pour la gestion de la configuration, car il y a eu un examen approfondi à ce sujet.
  3. Jenkins comme cadre d'automatisation des processus existants, car il a déjà été activement utilisé pour les processus de développement
  4. Hyper-V en tant que plateforme de virtualisation. Il existe un certain nombre de raisons qui dépassent le cadre de l'histoire, mais en bref : nous ne pouvons pas utiliser les nuages, nous devons utiliser notre propre matériel.

Jour n°30 : Réparer les accords existants - Les accords comme code

Ansible : Migration d'une configuration de 120 VM de CoreOS vers CentOS en 18 mois

Une fois la pile dégagée, les préparatifs du déplacement commencèrent. Fixation des accords existants sous forme de code (Accords comme code!). Transition travail manuel -> mécanisation -> automatisation.

1. Configurer les machines virtuelles

Ansible : Migration d'une configuration de 120 VM de CoreOS vers CentOS en 18 mois

Ansible fait un excellent travail à cet égard. Avec un minimum de mouvements corporels, vous pouvez prendre le contrôle des configurations des VM :

  1. Créez un référentiel git.
  2. Nous mettons la liste des VM en inventaire, les configurations dans les playbooks et les rôles.
  3. Nous mettons en place un esclave Jenkins spécial à partir duquel vous pouvez exécuter Ansible.
  4. Nous créons un travail et configurons Jenkins.

Le premier processus est prêt. Les accords sont fixes.

2. Créer une nouvelle VM

Ansible : Migration d'une configuration de 120 VM de CoreOS vers CentOS en 18 mois

Ici, tout n’était pas très pratique. Il n'est pas très pratique de créer des VM sur Hyper-V depuis Linux. L'une des tentatives visant à mécaniser ce processus a été :

  1. Ansbile se connecte via WinRM à l'hôte Windows.
  2. Ansible exécute un script PowerShell.
  3. Le script Powershell crée une nouvelle VM.
  4. À l'aide d'Hyper-V/ScVMM, lors de la création d'une VM dans le système d'exploitation invité, le nom d'hôte est configuré.
  5. Lors de la mise à jour du bail DHCP, la VM envoie son nom d'hôte.
  6. L'intégration DDNS et DHCP standard du côté du contrôleur de domaine configure l'enregistrement DNS.
  7. Vous pouvez ajouter une VM à votre inventaire et la configurer avec Ansible.

3.Créer un modèle de VM

Ansible : Migration d'une configuration de 120 VM de CoreOS vers CentOS en 18 mois

Ici, ils n'ont rien inventé - ils ont pris un emballeur.

  1. Ajoutez le packer, la configuration kickstart au référentiel git.
  2. Mise en place d'un esclave Jenkins spécial avec Hyper-V et Packer.
  3. Nous créons un travail et configurons Jenkins.

Comment fonctionne ce lien :

  1. Packer crée une VM vide et récupère l'ISO.
  2. La VM démarre, Packer entre la commande dans le chargeur de démarrage pour utiliser notre fichier kickstart à partir d'une disquette ou http.
  3. Anaconda est lancé avec notre configuration et la configuration initiale du système d'exploitation est effectuée.
  4. Packer attend que la VM soit disponible.
  5. Packer à l'intérieur de la VM exécute ansible en mode local.
  6. Ansible utilise exactement les mêmes rôles qu'à l'étape 1.
  7. Packer exporte le modèle de VM.

Jour #75 : Refactoriser l'accord sans rompre = Test ansible + Testkitchen

Ansible : Migration d'une configuration de 120 VM de CoreOS vers CentOS en 18 mois

Capturer les conventions dans le code peut ne pas suffire. Après tout, si dans les tenants et les aboutissants du processus vous souhaitez changer quelque chose, vous pouvez casser quelque chose. Par conséquent, dans le cas de l’infrastructure, des tests sur cette même infrastructure apparaissent. Pour synchroniser les connaissances au sein de l'équipe, nous avons commencé à tester les rôles Ansible. Je n'entrerai pas dans les détails parce que... il y a un article décrivant les événements à ce moment-là Testez-moi si vous le pouvez ou les programmeurs YML rêvent-ils de tester Ansible ?(spoiler ce n'était pas la version finale et après tout est devenu plus compliqué Comment commencer à tester Ansible, refactoriser le projet en un an et ne pas devenir fou).

Jour #130 : Peut-être que CentOS+ansible n'est pas nécessaire ? peut-être openshift ?

Nous devons comprendre que le processus d'introduction des infrastructures n'était pas le seul et qu'il y avait des sous-projets parallèles. Par exemple, une demande est arrivée pour lancer notre application en openshift et cela a donné lieu à des recherches de plus d'une semaine Nous lançons l'application dans Openshift et comparons les outils existants ce qui a ralenti le processus de déménagement. Le résultat s'est avéré qu'openshift ne couvre pas tous les besoins : il faut du vrai matériel, ou au moins la possibilité de jouer avec le noyau.

Jour #170 : Openshift ne convient pas, tentons notre chance avec Windows Azure Pack ?

Ansible : Migration d'une configuration de 120 VM de CoreOS vers CentOS en 18 mois

Hyper-V n'est pas très convivial, SCVMM ne l'améliore pas beaucoup. Mais il existe Windows Azure Pack, qui est un module complémentaire à SCVMM et imite Azure. Mais en réalité, le produit semble abandonné : la documentation comporte des liens rompus et est très clairsemée. Mais dans le cadre de l’étude des options permettant de simplifier la vie de notre cloud, ils l’ont également examiné.

Jour #250 : Pack Windows Azure pas très bon. Nous restons sur SCVMM

Ansible : Migration d'une configuration de 120 VM de CoreOS vers CentOS en 18 mois

Windows Azure Pack semblait prometteur, mais il a été décidé de ne pas introduire le WAP et ses complexités dans le système au profit de fonctionnalités inutiles et de rester avec SCVMM.

Jour #360 : Manger l'éléphant morceau par morceau

Ansible : Migration d'une configuration de 120 VM de CoreOS vers CentOS en 18 mois

Seulement un an plus tard, la plateforme de déménagement était prête et le processus de déménagement commençait. A cet effet, une tâche SMART a été définie. Nous avons vérifié toutes les machines virtuelles et commencé à comprendre la configuration une par une, à la décrire dans Ansible et à la couvrir de tests.

Jour #450 : Quel type de système avez-vous obtenu ?

Ansible : Migration d'une configuration de 120 VM de CoreOS vers CentOS en 18 mois

Le processus en lui-même n'est pas intéressant. C'est routine, on peut constater que la plupart des configurations étaient relativement simples ou isomorphes et selon le principe de Pareto, 80% des configurations de VM nécessitaient 20% du temps. Selon le même principe, 80 % du temps a été consacré à la préparation du déménagement et seulement 20 % au déménagement lui-même.

Jour #540 : Finale

Ansible : Migration d'une configuration de 120 VM de CoreOS vers CentOS en 18 mois

Que s'est-il passé en 18 mois ?

  1. Les accords sont devenus un code.
  2. Travail manuel -> Mécanisation -> Automation.

Source: habr.com

Ajouter un commentaire