Ansible: Migrarea configurației 120 VM de la CoreOS la CentOS în 18 luni

Ansible: Migrarea configurației 120 VM de la CoreOS la CentOS în 18 luni

Aceasta este o transcriere a discursului DevopsConf 2019-10-01 и SPbLUG 2019-09-25.

Aceasta este povestea unui proiect care a folosit un sistem de management al configurației scris de sine și de ce mutarea la Ansible a durat 18 luni.

Ziua nr. -ХХХ: Înainte de început

Ansible: Migrarea configurației 120 VM de la CoreOS la CentOS în 18 luni

Inițial, infrastructura a constat din multe gazde separate care rulau Hyper-V. Crearea unei mașini virtuale a necesitat mulți pași: punerea discurilor la locul potrivit, înregistrarea DNS, rezervarea DHCP, punerea configurației VM în depozitul git. Acest proces a fost parțial mecanizat, dar, de exemplu, VM-urile au fost distribuite manual între gazde. Dar, de exemplu, dezvoltatorii ar putea corecta configurația VM în git și o pot aplica prin repornirea VM.

Soluție de gestionare a configurației personalizate

Ansible: Migrarea configurației 120 VM de la CoreOS la CentOS în 18 luni

Ideea originală, bănuiesc, a fost concepută ca IaC: multe mașini virtuale fără stat care își resetează starea la zero când sunt repornite. Ce a fost managementul configurației VM? Schematic pare simplu:

  1. Un MAC static a fost pus în cuie pentru VM.
  2. Un ISO cu CoreOS și un disc de pornire au fost conectate la VM.
  3. CoreOS lansează scriptul de personalizare prin descărcarea acestuia de pe serverul WEB pe baza IP-ului său.
  4. Scriptul descarcă configurația VM prin SCP pe baza adresei IP.
  5. Se lansează panoul de bază al fișierelor unitare systemd și cel al scripturilor bash.

Ansible: Migrarea configurației 120 VM de la CoreOS la CentOS în 18 luni

Această soluție a avut multe probleme evidente:

  1. CoreOS ISO a fost depreciat.
  2. O mulțime de acțiuni automate complexe și magie la migrarea/crearea de VM.
  3. Dificultate cu actualizarea și când este necesară o anumită versiune de software. Și mai distractiv cu modulele kernel.
  4. VM-urile nu au fost astfel obținute fără date, de exemplu. VM-urile au apărut cu un disc cu date suplimentare de utilizator montate.
  5. Cineva strica constant dependențele unității de sistem și CoreOS se bloca la repornire. A fost dificil să înțelegi acest lucru folosind instrumentele disponibile în CoreOS.
  6. Managementul secretelor.
  7. Nu a existat CM. Au existat configurații bash și YML pentru CoreOS.

Pentru a aplica configurația VM, trebuie să o reporniți, dar este posibil să nu repornească. Pare o problemă evidentă, dar nu există discuri persistente - nu există unde să salvezi jurnalele. Ei bine, bine, să încercăm să adăugăm opțiunea de încărcare a nucleului, astfel încât jurnalele să fie trimise. Dar nu, cât de complicat este totul.

Ziua #0: Recunoașteți problema

Ansible: Migrarea configurației 120 VM de la CoreOS la CentOS în 18 luni

Era infrastructura obișnuită de dezvoltare: jenkins, medii de testare, monitorizare, registry. CoreOS a fost conceput pentru a găzdui clustere k8s, de exemplu. problema a fost cum a fost folosit CoreOS. Primul pas a fost alegerea unei stive. Ne-am hotărât pe:

  1. CentOS ca distributie de baza, deoarece Aceasta este cea mai apropiată distribuție de mediile de producție.
  2. ansiblu pentru managementul configurației, deoarece s-a făcut o examinare amplă asupra ei.
  3. Jenkins ca un cadru de automatizare a proceselor existente, deoarece a fost deja utilizat în mod activ pentru procesele de dezvoltare
  4. Hyper-V ca platformă de virtualizare. Există o serie de motive care depășesc domeniul de aplicare al poveștii, dar pe scurt - nu putem folosi norii, trebuie să folosim propriul nostru hardware.

Ziua nr. 30: Fixarea acordurilor existente - Acordurile ca Cod

Ansible: Migrarea configurației 120 VM de la CoreOS la CentOS în 18 luni

Când stiva a fost liberă, au început pregătirile pentru mutare. Fixarea acordurilor existente sub formă de cod (Acordurile ca cod!). Tranziție muncă manuală -> mecanizare -> automatizare.

1. Configurați VM-uri

Ansible: Migrarea configurației 120 VM de la CoreOS la CentOS în 18 luni

Ansible face o treabă grozavă în acest sens. Cu un minim de mișcări ale corpului, puteți prelua controlul asupra configurațiilor VM:

  1. Creați un depozit git.
  2. Am pus lista de VM-uri în inventar, configurații în playbook-uri și roluri.
  3. Înființăm un sclav special Jenkins din care poți rula Ansible.
  4. Creăm un loc de muncă și configurăm Jenkins.

Primul proces este gata. Acordurile sunt fixe.

2. Creați un nou VM

Ansible: Migrarea configurației 120 VM de la CoreOS la CentOS în 18 luni

Totul aici nu a fost foarte convenabil. Nu este foarte convenabil să creați VM-uri pe Hyper-V din Linux. Una dintre încercările de mecanizare a acestui proces a fost:

  1. Ansbile se conectează prin WinRM la gazda Windows.
  2. Ansible rulează un script powershell.
  3. Scriptul Powershell creează o nouă VM.
  4. Folosind Hyper-V/ScVMM, atunci când se creează o VM în sistemul de operare invitat, numele de gazdă este configurat.
  5. La actualizarea contractului de închiriere DHCP, VM-ul își trimite numele de gazdă.
  6. Integrarea standard ddns și dhcp pe partea controlerului de domeniu configurează înregistrarea DNS.
  7. Puteți adăuga un VM la inventarul dvs. și îl puteți configura cu Ansible.

3.Creați șablonul VM

Ansible: Migrarea configurației 120 VM de la CoreOS la CentOS în 18 luni

Nu au inventat nimic aici - au luat un ambalator.

  1. Adăugați configurația packer, kickstart în depozitul git.
  2. Crearea unui sclav special Jenkins cu hyper-v și Packer.
  3. Creăm un loc de muncă și configurăm Jenkins.

Cum funcționează acest link:

  1. Packer creează un VM gol și preia ISO.
  2. VM pornește, Packer introduce comanda în bootloader pentru a utiliza fișierul nostru kickstart de pe o dischetă sau http.
  3. Anaconda este lansat cu configurația noastră și configurarea inițială a sistemului de operare este făcută.
  4. Packer așteaptă ca VM-ul să devină disponibil.
  5. Packer în interiorul VM rulează ansible în modul local.
  6. Ansible folosește exact aceleași roluri pe care le lucrează la pasul #1.
  7. Packer exportă șablonul VM.

Ziua #75: Refactorizează acordul fără a se rupe = Test ansible + Testkitchen

Ansible: Migrarea configurației 120 VM de la CoreOS la CentOS în 18 luni

Capturarea convențiilor în cod poate să nu fie suficientă. La urma urmei, dacă în dedesubturile procesului vrei să schimbi ceva, poți rupe ceva. Prin urmare, în cazul infrastructurii, apare chiar testarea acestei infrastructuri. Pentru a sincroniza cunoștințele în cadrul echipei, am început să testăm rolurile Ansible. Nu voi intra în profunzime pentru că... există un articol care descrie evenimentele din acel moment Testează-mă dacă poți sau programatorii YML visează să testeze Ansible?(spoiler aceasta nu a fost versiunea finală și mai târziu totul a devenit mai complicat Cum să începeți să testați Ansible, refactorizați proiectul într-un an și nu înnebuniți).

Ziua #130: Poate că CentOS+ansible nu este necesar? poate shift deschis?

Trebuie să înțelegem că procesul de introducere a infrastructurii nu a fost singurul și au existat subproiecte secundare. De exemplu, a venit o solicitare de lansare a aplicației noastre în shift deschis și acest lucru a dus la cercetare pentru mai mult de o săptămână Lansăm aplicația în Openshift și comparăm instrumentele existente care a încetinit procesul de mișcare. Rezultatul s-a dovedit că openshift nu acoperă toate nevoile; aveți nevoie de hardware real sau cel puțin de capacitatea de a juca cu nucleul.

Ziua #170: Openshift nu este potrivit, să riscăm cu Windows Azure Pack?

Ansible: Migrarea configurației 120 VM de la CoreOS la CentOS în 18 luni

Hyper-V nu este foarte prietenos, SCVMM nu o face cu mult mai bună. Dar există un astfel de lucru precum Windows Azure Pack, care este un supliment pentru SCVMM și imită Azure. Dar, în realitate, produsul pare abandonat: documentația are legături rupte și este foarte rară. Dar, ca parte a studiului opțiunilor pentru simplificarea vieții cloud-ului nostru, au analizat și ei.

Ziua #250: Pachetul Windows Azure nu este foarte bun. Rămânem pe SCVMM

Ansible: Migrarea configurației 120 VM de la CoreOS la CentOS în 18 luni

Windows Azure Pack părea promițător, dar s-a decis să nu aducă WAP cu complexitățile sale în sistem de dragul funcțiilor inutile și a rămas cu SCVMM.

Ziua #360: Mâncarea elefantului bucată cu bucată

Ansible: Migrarea configurației 120 VM de la CoreOS la CentOS în 18 luni

Doar un an mai târziu, platforma pentru mutare a fost gata și procesul de mutare a început. În acest scop a fost instalat S.M.A.R.T. sarcină. Am verificat toate VM-urile și am început să descoperim configurația una câte una, să o descriem în Ansible și să o acoperim cu teste.

Ziua #450: Ce fel de sistem ai primit?

Ansible: Migrarea configurației 120 VM de la CoreOS la CentOS în 18 luni

Procesul în sine nu este interesant. Este de rutină, se poate observa că majoritatea configurațiilor au fost relativ simple sau izomorfe și conform principiului Pareto, 80% din configurațiile VM au necesitat 20% din timp. După același principiu, 80% din timp a fost petrecut pregătind mutarea și doar 20% mișcarea în sine.

Ziua #540: Finala

Ansible: Migrarea configurației 120 VM de la CoreOS la CentOS în 18 luni

Ce s-a întâmplat în 18 luni?

  1. Acordurile au devenit un cod.
  2. Muncă manuală -> Mecanizare -> Automatizare.

Sursa: www.habr.com

Adauga un comentariu