Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois

Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois

Ceci est la transcription de la présentation à DevopsConf 2019-10-01 et SPbLUG 2019-09-25.

C'est l'histoire d'un projet qui utilisait un systÚme de gestion des configurations fait maison et pourquoi la migration vers Ansible a duré 18 mois.

Jour n° -XXX : Avant le début

Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois

Au départ, l'infrastructure se composait de plusieurs hÎtes autonomes gérés par Hyper-V. Créer une machine virtuelle nécessitait de nombreuses actions : placer les disques au bon endroit, configurer le DNS, réserver le DHCP, placer la configuration de la VM dans un dépÎt git. Ce processus était partiellement automatisé, mais par exemple, les VMs étaient réparties entre les hÎtes manuellement. Cependant, les développeurs pouvaient appliquer une configuration de VM en la modifiant dans git et en redémarrant la VM.

Solution de gestion de configuration personnalisée

Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois

L'idée de départ, je le soupçonne, était conçue comme IaC : de nombreuses VMs sans état, qui réinitialisaient leur état lors du redémarrage. Que représentait la gestion des configurations des VMs ? Cela semblait simple schématiquement :

  1. Pour les VMs, un MAC statique était fixé.
  2. On connectait à la VM un ISO avec CoreOS et un disque de démarrage.
  3. CoreOS exécute un script de personnalisation en le téléchargeant depuis un serveur WEB en fonction de son IP.
  4. Le script récupÚre la configuration de la VM via SCP en se basant sur l'adresse IP.
  5. Une série de fichiers unitaires systemd et une série de scripts bash sont lancés.

Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois

Cette solution avait de nombreux problÚmes évidents :

  1. L'ISO dans CoreOS était obsolÚte.
  2. Nombreux actes et magie difficilement automatissables lors de la migration/création des VMs.
  3. DifficultĂ© de mise Ă  jour lorsque certains logiciels nĂ©cessitent une version donnĂ©e. C’est encore plus amusant avec les modules du noyau.
  4. Les VMs n'étaient pas si dépourvues de données, c'est-à-dire qu'il y avait des VMs avec un disque monté contenant des données utilisateur en supplément.
  5. Quelqu'un avait constamment des problÚmes avec les dépendances des unités systemd et lors du redémarrage, CoreOS se bloquait. Il était difficile de repérer ça avec les outils disponibles dans CoreOS.
  6. Gestion des secrets.
  7. La gestion de configuration était quasiment inexistante. Il y avait des scripts bash et des configurations YML de CoreOS.

Pour appliquer la configuration de la VM, il fallait la redĂ©marrer, mais elle pouvait ne pas redĂ©marrer. Cela semble ĂȘtre un problĂšme Ă©vident, mais il n'y avait pas de disques persistants — les journaux n'avaient nulle part oĂč ĂȘtre enregistrĂ©s. Eh bien, d'accord, essayons d'ajouter des options de dĂ©marrage du noyau pour transmettre les journaux. Mais non, tout cela est si compliquĂ©.

Jour n°0 : Reconnaissance du problÚme

Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois

C'était une infrastructure de développement classique : jenkins, environnements de test, surveillances, registry. CoreOS était conçu pour l'hébergement de clusters k8s, c'est-à-dire que le problÚme était comment CoreOS était utilisé. La premiÚre étape a été de choisir la stack. Nous avons opté pour :

  1. CentOS comme distribution de base, car c'est la distribution la plus proche des environnements de production.
  2. Ansible pour la gestion des configurations, car il y avait une vaste expertise Ă  ce sujet.
  3. Jenkins comme framework d'automatisation des processus existants, car il était déjà utilisé de maniÚre active pour les processus de développement.
  4. Hyper-V comme plateforme de virtualisation. Il y a plusieurs raisons qui vont au-delĂ  de ce rĂ©cit, mais en rĂ©sumĂ© — nous ne pouvons pas utiliser le cloud, nous devons utiliser notre propre matĂ©riel.

Jour n°30 : Formalisation des accords existants — Agreements as Code

Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois

Une fois la stack dĂ©finie, la prĂ©paration Ă  la migration a commencĂ©. Formaliser les accords existants sous forme de code (Agreements as Code!). Migration travail manuel -> mĂ©canisation -> qui permet de tester, dĂ©ployer et livrer de nouvelles fonctionnalitĂ©s aux utilisateurs beaucoup plus rapidement. Par exemple, dans tous nos projets, un pipeline CI est automatiquement créé Ă  chaque commit. Celui-ci construit l'image, la teste, la dĂ©ploie dans divers environnements Kubernetes pour le dĂ©bogage et les vĂ©rifications restantes, et si tout va bien, les modifications atteignent l'utilisateur final. Ce n'est plus une science-fusĂ©e, mais une banalitĂ© pour beaucoup — probablement pour vous Ă©galement, puisque vous lisez cet article..

1. Configurer les VM

Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois

Ansible gĂšre trĂšs bien cette tĂąche. Avec un minimum d'efforts, nous pouvons prendre en charge les configurations des VM :

  1. Créons un dépÎt git.
  2. Nous plaçons la liste des VM dans l'inventaire, les configurations dans des playbooks et des rÎles.
  3. Nous configurons un esclave jenkins spécial à partir duquel nous pourrons exécuter ansible.
  4. Créons un job, configurons Jenkins.

Le premier processus est prĂȘt. Les accords sont formalisĂ©s.

2. Créer une nouvelle VM

Ansible : Migration de la 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 commode de créer des VM sous Hyper-V depuis Linux. Une des tentatives de mécaniser ce processus a été :

  1. Ansible 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. Avec Hyper-V/ScVMM, lors de la création de la VM, le nom d'hÎte est configuré dans le systÚme d'exploitation invité.
  5. La VM, lors de la mise Ă  jour du bail DHCP, envoie son nom d'hĂŽte.
  6. L'intégration standard ddns & dhcp du cÎté du ContrÎleur de Domaine configure l'enregistrement DNS.
  7. Nous pouvons ajouter la VM Ă  l'inventaire et la configurer avec Ansible.

3. Créer un modÚle de VM

Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois

Ici, nous n'avons rien inventĂ© — nous avons pris packer.

  1. Nous plaçons la configuration de packer, kickstart dans le dépÎt git.
  2. Nous configurons un esclave jenkins spécial avec hyper-v et Packer.
  3. Créons un job, configurons Jenkins.

Comment ce lien fonctionne :

  1. Packer crée une VM vide, y attache l'ISO.
  2. La VM démarre, Packer entre dans le chargeur de démarrage la commande d'utiliser notre fichier kickstart depuis la disquette ou http.
  3. Anaconda se lance avec notre configuration, la mise en place initiale de l'OS se fait.
  4. Packer attend la disponibilité de la VM.
  5. Packer exécute Ansible à l'intérieur de la VM en mode local.
  6. Ansible utilise exactement les mĂȘmes rĂŽles que dans l'Ă©tape n°1.
  7. Packer exporte le modĂšle de VM.

Jour n°75 : Refactorisation des accords sans casser = Test ansible + Testkitchen

Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois

Fixer les accords dans le code peut ĂȘtre insuffisant. En effet, si tu veux changer quelque chose en profondeur dans le processus, tu risques de tout casser. C'est pourquoi, en matiĂšre d'infrastructure, il devient crucial de tester cette mĂȘme infrastructure. Pour synchroniser les connaissances au sein de l'Ă©quipe, nous avons commencĂ© Ă  tester les rĂŽles Ansible. Je ne vais pas entrer dans les dĂ©tails, car il existe un article qui dĂ©crit les Ă©vĂ©nements Ă  ce moment-lĂ . Teste-moi si tu peux ou les programmeurs YML rĂȘvent-ils de tester ansible ?(spoiler, ce n'Ă©tait pas la version finale et tout est devenu plus compliquĂ© par la suite) Comment commencer Ă  tester Ansible, refactoriser un projet en un an et ne pas perdre la raison.).

Jour n°130 : Et si CentOS+ansible n'Ă©tait pas nĂ©cessaire ? Peut-ĂȘtre openshift ?

Il faut comprendre que le processus d'intégration de l'infrastructure n'était pas unique et qu'il y avait des sous-projets connexes. Par exemple, une demande est arrivée pour déployer notre application sur openshift, ce qui a entraßné des recherches durant plus d'une semaine. Nous déployons l'application sur Openshift et comparons les outils existants. Ce qui a retardé le processus de migration. Au final, il s'est avéré qu'openshift ne satisfait pas tous les besoins, il faut du matériel réel, ou au moins la possibilité de jouer avec le noyau.

Jour n°170 : Openshift n'est pas adapté, prenons le risque avec Windows Azure Pack ?

Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois

Hyper-V n'est pas trÚs amical, SCVMM ne l'améliore pas beaucoup. Mais il existe un outil appelé Windows Azure Pack, qui est une surcouche à SCVMM et imite Azure. Cependant, en réalité, le produit semble abandonné : documentation avec des liens cassés et plutÎt succinte. Mais dans le cadre de la recherche de solutions pour simplifier notre cloud, nous avons également examiné cela.

Jour n°250 : Windows Azure Pack n'est pas super. Nous restons sur SCVMM.

Ansible : Migration de la 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 WAP avec ses complications dans le systÚme pour des fonctionnalités inutiles et nous sommes restés avec SCVMM.

Jour n°360 : Nous mangeons l'éléphant morceau par morceau.

Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois

Ce n'est qu'un an plus tard que la plateforme Ă  laquelle migrer a Ă©tĂ© prĂȘte et le processus de migration a commencĂ©. Pour cela, une tĂąche S.M.A.R.T. a Ă©tĂ© dĂ©finie. Nous avons dressĂ© une liste de toutes les VMs et avons commencĂ© Ă  examiner leur configuration une par une, Ă  la dĂ©crire sur Ansible et Ă  la couvrir de tests.

Jour n°450 : Quel systÚme a été obtenu ?

Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois

Le processus lui-mĂȘme n'est pas intĂ©ressant. Il est routinier, on peut noter que la plupart des configurations Ă©taient relativement simples ou isomorphes et selon le principe de Pareto, 80 % des configurations ont nĂ©cessitĂ© 20 % du temps. De la mĂȘme maniĂšre, 80 % du temps a Ă©tĂ© consacrĂ© Ă  la prĂ©paration du dĂ©mĂ©nagement et seulement 20 % au dĂ©mĂ©nagement lui-mĂȘme.

Jour n°540 : La finale

Ansible : Migration de la 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 -> Automatisation.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster