Ansible: Migrering av 120 VM-konfigurationer från CoreOS till CentOS på 18 månader

Ansible: Migrering av 120 VM-konfigurationer från CoreOS till CentOS på 18 månader

Detta är en utskrift av talet DevopsConf 2019-10-01 и SPbLUG 2019-09-25.

Det här är historien om ett projekt som använde ett självskrivet konfigurationshanteringssystem och varför flytten till Ansible tog 18 månader.

Dag nr. -ХХХ: Före början

Ansible: Migrering av 120 VM-konfigurationer från CoreOS till CentOS på 18 månader

Inledningsvis bestod infrastrukturen av många separata värdar som körde Hyper-V. Att skapa en virtuell maskin krävde många steg: att sätta diskarna på rätt plats, registrera DNS, reservera DHCP, sätta VM-konfigurationen i git-förvaret. Denna process var delvis mekaniserad, men till exempel distribuerades virtuella datorer mellan värdar för hand. Men till exempel kan utvecklare korrigera den virtuella datorns konfiguration i git och tillämpa den genom att starta om den virtuella datorn.

Custom Configuration Management Solution

Ansible: Migrering av 120 VM-konfigurationer från CoreOS till CentOS på 18 månader

Den ursprungliga idén, misstänker jag, var tänkt som IaC: många tillståndslösa virtuella datorer som återställer sitt tillstånd till noll när de startas om. Vad var VM-konfigurationshantering? Schematiskt ser det enkelt ut:

  1. En statisk MAC spikades fast för den virtuella datorn.
  2. En ISO med CoreOS och en startskiva kopplades till den virtuella datorn.
  3. CoreOS startar anpassningsskriptet genom att ladda ner det från WEB-servern baserat på dess IP.
  4. Skriptet laddar ner VM-konfigurationen via SCP baserat på IP-adressen.
  5. Fotduken för systemd-enhetsfiler och fotduken för bash-skript lanseras.

Ansible: Migrering av 120 VM-konfigurationer från CoreOS till CentOS på 18 månader

Denna lösning hade många uppenbara problem:

  1. CoreOS ISO har fasats ut.
  2. Många komplexa automatiserade åtgärder och magi när du migrerar/skapar virtuella datorer.
  3. Svårigheter med att uppdatera och när en viss version av programvaran behövs. Ännu roligare med kärnmoduler.
  4. VM:er erhölls inte så utan data, dvs. VM:er dök upp med en disk med ytterligare användardata monterad.
  5. Någon skruvade ständigt på systemd-enhetsberoendena och CoreOS skulle frysa vid omstart. Det var svårt att fånga detta med de tillgängliga verktygen i CoreOS.
  6. Hemlighetshantering.
  7. Det fanns ingen CM. Det fanns bash- och YML-konfigurationer för CoreOS.

För att tillämpa VM-konfigurationen måste du starta om den, men den kanske inte startas om. Det verkar som ett uppenbart problem, men det finns inga beständiga diskar - det finns ingenstans att spara loggar. Nåväl, ok, låt oss försöka lägga till kärnladdningsalternativet så att loggarna skickas. Men nej, vad komplicerat det hela är.

Dag #0: Inse problemet

Ansible: Migrering av 120 VM-konfigurationer från CoreOS till CentOS på 18 månader

Det var den vanliga utvecklingsinfrastrukturen: jenkins, testmiljöer, övervakning, register. CoreOS designades för att vara värd för k8s-kluster, dvs. problemet var hur CoreOS användes. Det första steget var att välja en stack. Vi bestämde oss för:

  1. CentOS som en basfördelning, eftersom Detta är den närmaste distributionen till produktionsmiljöer.
  2. Ansible för konfigurationshantering, eftersom det gjordes en omfattande granskning av det.
  3. Jenkins som ett ramverk för att automatisera befintliga processer, eftersom den har redan använts aktivt för utvecklingsprocesser
  4. Hyper-V som en virtualiseringsplattform. Det finns ett antal anledningar som går utanför berättelsens ram, men kort sagt – vi kan inte använda molnen, vi måste använda vår egen hårdvara.

Dag nr 30: Fastställande av befintliga avtal - Avtal som kod

Ansible: Migrering av 120 VM-konfigurationer från CoreOS till CentOS på 18 månader

När traven var klar började förberedelserna för flytten. Fixa befintliga avtal i form av kod (Avtal som kod!). Övergång manuellt arbete -> mekanisering -> automation.

1. Konfigurera virtuella datorer

Ansible: Migrering av 120 VM-konfigurationer från CoreOS till CentOS på 18 månader

Ansible gör ett bra jobb med detta. Med ett minimum av kroppsrörelser kan du ta kontroll över VM-konfigurationer:

  1. Skapa ett git-förråd.
  2. Vi lägger listan över virtuella datorer i inventering, konfigurationer i spelböcker och roller.
  3. Vi håller på att skapa en speciell jenkins-slav från vilken du kan köra Ansible.
  4. Vi skapar ett jobb och konfigurerar Jenkins.

Den första processen är klar. Avtalen är fasta.

2. Skapa ny virtuell dator

Ansible: Migrering av 120 VM-konfigurationer från CoreOS till CentOS på 18 månader

Allt här var inte särskilt bekvämt. Det är inte särskilt bekvämt att skapa virtuella datorer på Hyper-V från Linux. Ett av försöken att mekanisera denna process var:

  1. Ansbile ansluter via WinRM till Windows-värden.
  2. Ansible kör ett powershell-skript.
  3. Powershell-skriptet skapar en ny virtuell dator.
  4. Med hjälp av Hyper-V/ScVMM, när du skapar en virtuell dator i gästoperativsystemet, konfigureras värdnamnet.
  5. Vid uppdatering av DHCP-leasingavtalet skickar den virtuella datorn dess värdnamn.
  6. Standard ddns & dhcp-integration på domänkontrollantsidan konfigurerar DNS-posten.
  7. Du kan lägga till en virtuell dator till ditt lager och konfigurera den med Ansible.

3. Skapa VM-mall

Ansible: Migrering av 120 VM-konfigurationer från CoreOS till CentOS på 18 månader

De uppfann ingenting här - de tog en packare.

  1. Lägg till packaren, kickstart config till git-förvaret.
  2. Skapar en speciell jenkinsslav med hyper-v och Packer.
  3. Vi skapar ett jobb och konfigurerar Jenkins.

Hur denna länk fungerar:

  1. Packer skapar en tom virtuell dator och hämtar ISO.
  2. VM:n startar, Packer matar in kommandot i bootloadern för att använda vår kickstart-fil från en diskett eller http.
  3. Anaconda lanseras med vår konfiguration och den initiala OS-konfigurationen är klar.
  4. Packer väntar på att den virtuella datorn ska bli tillgänglig.
  5. Packer inuti den virtuella datorn körs ansible i lokalt läge.
  6. Ansible använder exakt samma roller som den fungerar i steg #1.
  7. Packer exporterar VM-mallen.

Dag #75: Refaktorera avtalet utan att bryta = Test ansible + Testkitchen

Ansible: Migrering av 120 VM-konfigurationer från CoreOS till CentOS på 18 månader

Att fånga konventioner i kod kanske inte räcker. När allt kommer omkring, om du i processens ins och outs vill förändra något, kan du bryta något. Därför, när det gäller infrastruktur, visas testning av just denna infrastruktur. För att synkronisera kunskap inom teamet började vi testa Ansible-roller. Jag går inte in på djupet eftersom... det finns en artikel som beskriver händelserna vid den tidpunkten Testa mig om du kan eller drömmer YML-programmerare om att testa Ansible?(spoiler detta var inte den slutliga versionen och senare blev allt mer komplicerat Hur man börjar testa Ansible, omstrukturera projektet om ett år och inte bli galen).

Dag #130: CentOS+ansible kanske inte behövs? kanske openshift?

Vi måste förstå att processen med att införa infrastruktur inte var den enda och att det fanns sidodelprojekt. Till exempel kom en förfrågan om att lansera vår applikation i openshift och detta resulterade i forskning i mer än en vecka Vi lanserar applikationen i Openshift och jämför befintliga verktyg vilket saktade ner flyttprocessen. Resultatet visade sig att openshift inte täcker alla behov, du behöver riktig hårdvara, eller åtminstone förmågan att spela med kärnan.

Dag #170: Openshift passar inte, låt oss chansa med Windows Azure Pack?

Ansible: Migrering av 120 VM-konfigurationer från CoreOS till CentOS på 18 månader

Hyper-V är inte särskilt vänlig, SCVMM gör det inte mycket bättre. Men det finns något sådant som Windows Azure Pack, som är ett tillägg till SCVMM och härmar Azure. Men i verkligheten ser produkten övergiven ut: dokumentationen har brutna länkar och är väldigt sparsam. Men som en del av studien av alternativ för att förenkla livet för vårt moln, tittade de också på det.

Dag #250: Windows Azure Pack inte särskilt bra. Vi är kvar på SCVMM

Ansible: Migrering av 120 VM-konfigurationer från CoreOS till CentOS på 18 månader

Windows Azure Pack såg lovande ut, men det beslutades att inte ta med WAP med dess komplexitet in i systemet för onödiga funktioner och stannade hos SCVMM.

Dag #360: Att äta elefanten bit för bit

Ansible: Migrering av 120 VM-konfigurationer från CoreOS till CentOS på 18 månader

Bara ett år senare var plattformen för att flytta till klar och flyttprocessen började. För detta ändamål sattes en SMART-uppgift. Vi kollade in alla virtuella datorer och började ta reda på konfigurationen en efter en, beskriva den i Ansible och täcka den med tester.

Dag #450: Vilken typ av system fick du?

Ansible: Migrering av 120 VM-konfigurationer från CoreOS till CentOS på 18 månader

Processen i sig är inte intressant. Det är rutinmässigt, det kan noteras att de flesta av konfigurationerna var relativt enkla eller isomorfa och enligt Pareto-principen krävde 80% av VM-konfigurationerna 20% av tiden. Enligt samma princip ägnades 80 % av tiden åt att förbereda flytten och endast 20 % på själva flytten.

Dag #540: Final

Ansible: Migrering av 120 VM-konfigurationer från CoreOS till CentOS på 18 månader

Vad hände på 18 månader?

  1. Avtalen blev en kod.
  2. Manuellt arbete -> Mekanisering -> Automation.

Källa: will.com

Lägg en kommentar