Ansible: Migrering av 120 VM-konfigurasjoner fra CoreOS til CentOS på 18 måneder

Ansible: Migrering av 120 VM-konfigurasjoner fra CoreOS til CentOS på 18 måneder

Dette er en utskrift av talen DevopsConf 2019-10-01 и SPbLUG 2019-09-25.

Dette er historien om et prosjekt som brukte et selvskrevet konfigurasjonsstyringssystem og hvorfor overgangen til Ansible tok 18 måneder.

Dag nr. -ХХХ: Før begynnelsen

Ansible: Migrering av 120 VM-konfigurasjoner fra CoreOS til CentOS på 18 måneder

Opprinnelig besto infrastrukturen av mange separate verter som kjørte Hyper-V. Å lage en virtuell maskin krevde mange trinn: å sette diskene på riktig sted, registrere DNS, reservere DHCP, sette VM-konfigurasjonen i git-depotet. Denne prosessen var delvis mekanisert, men for eksempel ble VM-er fordelt mellom verter for hånd. Men for eksempel kan utviklere korrigere VM-konfigurasjonen i git og bruke den ved å starte VM-en på nytt.

Custom Configuration Management Solution

Ansible: Migrering av 120 VM-konfigurasjoner fra CoreOS til CentOS på 18 måneder

Den opprinnelige ideen, mistenker jeg, ble unnfanget som IaC: mange statsløse VM-er som tilbakestiller tilstanden til null når de starter på nytt. Hva var VM-konfigurasjonsadministrasjon? Skjematisk ser det enkelt ut:

  1. En statisk MAC ble spikret ned for VM.
  2. En ISO med CoreOS og en oppstartsdisk ble koblet til VM.
  3. CoreOS lanserer tilpasningsskriptet ved å laste det ned fra WEB-serveren basert på IP-adressen.
  4. Skriptet laster ned VM-konfigurasjonen via SCP basert på IP-adressen.
  5. Fotduken til systemd-enhetsfiler og fotduken til bash-skript lanseres.

Ansible: Migrering av 120 VM-konfigurasjoner fra CoreOS til CentOS på 18 måneder

Denne løsningen hadde mange åpenbare problemer:

  1. CoreOS ISO har blitt avviklet.
  2. Mange komplekse automatiserte handlinger og magi ved migrering/oppretting av VM-er.
  3. Vanskeligheter med å oppdatere og når en viss versjon av programvare er nødvendig. Enda morsommere med kjernemoduler.
  4. VM-er ble ikke slik innhentet uten data, dvs. VM-er dukket opp med en disk med ekstra brukerdata montert.
  5. Noen skrudde stadig opp systemd-enhetsavhengighetene, og CoreOS ville fryse ved omstart. Det var vanskelig å fange dette ved å bruke de tilgjengelige verktøyene i CoreOS.
  6. Hemmelighetsbehandling.
  7. Det var ingen CM. Det var bash- og YML-konfigurasjoner for CoreOS.

For å bruke VM-konfigurasjonen må du starte den på nytt, men den starter kanskje ikke på nytt. Det virker som et åpenbart problem, men det er ingen vedvarende disker - det er ingen steder å lagre logger. Vel, ok, la oss prøve å legge til kjernelastingsalternativet slik at loggene sendes. Men nei, så komplisert det hele er.

Dag #0: Gjenkjenne problemet

Ansible: Migrering av 120 VM-konfigurasjoner fra CoreOS til CentOS på 18 måneder

Det var den vanlige utviklingsinfrastrukturen: jenkins, testmiljøer, overvåking, register. CoreOS ble designet for å være vert for k8s-klynger, dvs. problemet var hvordan CoreOS ble brukt. Det første trinnet var å velge en stabel. Vi bestemte oss for:

  1. CentOS som en basisfordeling, fordi Dette er den nærmeste distribusjonen til produksjonsmiljøer.
  2. Ansible for konfigurasjonsadministrasjon, fordi det var omfattende undersøkelser av det.
  3. Jenkins som et rammeverk for å automatisere eksisterende prosesser, fordi den har allerede blitt aktivt brukt i utviklingsprosesser
  4. Hyper-V som en virtualiseringsplattform. Det er en rekke årsaker som går utenfor historiens omfang, men kort sagt – vi kan ikke bruke skyene, vi må bruke vår egen maskinvare.

Dag nr. 30: Fastsetting av eksisterende avtaler - Avtaler som Kode

Ansible: Migrering av 120 VM-konfigurasjoner fra CoreOS til CentOS på 18 måneder

Da stabelen var klar, begynte forberedelsene til flyttingen. Retting av eksisterende avtaler i form av kode (Avtaler som kode!). Overgang manuelt arbeid -> mekanisering -> automasjon.

1. Konfigurer VM-er

Ansible: Migrering av 120 VM-konfigurasjoner fra CoreOS til CentOS på 18 måneder

Ansible gjør en god jobb med dette. Med et minimum av kroppsbevegelser kan du ta kontroll over VM-konfigurasjoner:

  1. Lag et git-depot.
  2. Vi legger listen over virtuelle maskiner i inventar, konfigurasjoner i spillebøker og roller.
  3. Vi setter opp en spesiell jenkins-slave som du kan kjøre Ansible fra.
  4. Vi oppretter en jobb og konfigurerer Jenkins.

Den første prosessen er klar. Avtalene ligger fast.

2. Opprett ny VM

Ansible: Migrering av 120 VM-konfigurasjoner fra CoreOS til CentOS på 18 måneder

Alt her var ikke veldig praktisk. Det er ikke veldig praktisk å lage VM-er på Hyper-V fra Linux. Et av forsøkene på å mekanisere denne prosessen var:

  1. Ansbile kobler seg til Windows-verten via WinRM.
  2. Ansible kjører et powershell-skript.
  3. Powershell-skriptet oppretter en ny VM.
  4. Ved å bruke Hyper-V/ScVMM, når du oppretter en VM i gjeste-OS, konfigureres vertsnavnet.
  5. Når du oppdaterer DHCP-leieavtalen, sender VM-en vertsnavnet.
  6. Standard ddns- og dhcp-integrasjon på domenekontrollersiden konfigurerer DNS-posten.
  7. Du kan legge til en VM i inventaret ditt og konfigurere det med Ansible.

3. Lag VM-mal

Ansible: Migrering av 120 VM-konfigurasjoner fra CoreOS til CentOS på 18 måneder

De fant ikke opp noe her - de tok en pakker.

  1. Legg til pakkeren, kickstart config til git-depotet.
  2. Setter opp en spesiell jenkins-slave med hyper-v og Packer.
  3. Vi oppretter en jobb og konfigurerer Jenkins.

Slik fungerer denne linken:

  1. Packer oppretter en tom VM og henter ISO.
  2. VM starter opp, Packer legger inn kommandoen i oppstartslasteren for å bruke vår kickstart-fil fra en diskett eller http.
  3. Anaconda lanseres med vår konfigurasjon, og den første OS-konfigurasjonen er ferdig.
  4. Packer venter på at VM-en blir tilgjengelig.
  5. Packer inne i VM kjører ansible i lokal modus.
  6. Ansible bruker nøyaktig de samme rollene som den fungerer i trinn #1.
  7. Packer eksporterer VM-malen.

Dag #75: Refaktorer avtalen uten å bryte = Test ansible + Testkitchen

Ansible: Migrering av 120 VM-konfigurasjoner fra CoreOS til CentOS på 18 måneder

Å fange konvensjoner i kode er kanskje ikke nok. Tross alt, hvis du i inn- og utkanten av prosessen ønsker å endre noe, kan du bryte noe. Derfor, når det gjelder infrastruktur, vises testing av nettopp denne infrastrukturen. For å synkronisere kunnskap i teamet begynte vi å teste Ansible-roller. Jeg vil ikke gå i dybden fordi... det er en artikkel som beskriver hendelsene på det tidspunktet Test meg om du kan eller drømmer YML-programmerere om å teste Ansible?(spoiler dette var ikke den endelige versjonen og senere ble alt mer komplisert Hvordan begynne å teste Ansible, refaktorer prosjektet om et år og ikke bli gal).

Dag #130: Kanskje CentOS+ansible ikke er nødvendig? kanskje openshift?

Vi må forstå at prosessen med å innføre infrastruktur ikke var den eneste, og det var sidedelprosjekter. For eksempel kom en forespørsel om å lansere applikasjonen vår i openshift, og dette resulterte i forskning i mer enn én uke Vi lanserer applikasjonen i Openshift og sammenligner eksisterende verktøy som bremset flytteprosessen. Resultatet viste seg at openshift ikke dekker alle behov; du trenger ekte maskinvare, eller i det minste muligheten til å spille med kjernen.

Dag #170: Openshift er ikke egnet, la oss ta en sjanse med Windows Azure Pack?

Ansible: Migrering av 120 VM-konfigurasjoner fra CoreOS til CentOS på 18 måneder

Hyper-V er ikke veldig vennlig, SCVMM gjør det ikke mye bedre. Men det er noe slikt som Windows Azure Pack, som er et tillegg til SCVMM og etterligner Azure. Men i virkeligheten ser produktet forlatt ut: dokumentasjonen har brutte koblinger og er veldig sparsom. Men som en del av studiet av alternativer for å forenkle livet til skyen vår, så de også på det.

Dag #250: Windows Azure Pack ikke veldig bra. Vi forblir på SCVMM

Ansible: Migrering av 120 VM-konfigurasjoner fra CoreOS til CentOS på 18 måneder

Windows Azure Pack så lovende ut, men det ble besluttet å ikke bringe WAP med dets kompleksitet inn i systemet av hensyn til unødvendige funksjoner og ble med SCVMM.

Dag #360: Å spise elefanten stykke for stykke

Ansible: Migrering av 120 VM-konfigurasjoner fra CoreOS til CentOS på 18 måneder

Bare et år senere var plattformen for å flytte til klar og flytteprosessen startet. For dette formålet ble det satt en SMART-oppgave. Vi sjekket ut alle VM-ene og begynte å finne ut konfigurasjonen én etter én, beskrive den i Ansible og dekke den med tester.

Dag #450: Hva slags system fikk du?

Ansible: Migrering av 120 VM-konfigurasjoner fra CoreOS til CentOS på 18 måneder

Selve prosessen er ikke interessant. Det er rutine, det kan bemerkes at de fleste konfigurasjonene var relativt enkle eller isomorfe og i henhold til Pareto-prinsippet krevde 80 % av VM-konfigurasjonene 20 % av tiden. Etter samme prinsipp ble 80 % av tiden brukt på å forberede flyttingen og bare 20 % på selve flyttingen.

Dag #540: Finale

Ansible: Migrering av 120 VM-konfigurasjoner fra CoreOS til CentOS på 18 måneder

Hva skjedde på 18 måneder?

  1. Avtalene ble en kode.
  2. Manuelt arbeid -> Mekanisering -> Automatisering.

Kilde: www.habr.com

Legg til en kommentar