Ansible: Migrering av konfigurationen av 120 VM frÄn CoreOS till CentOS under 18 mÄnader

Ansible: Migrering av konfigurationen av 120 VM frÄn CoreOS till CentOS under 18 mÄnader

Detta Àr en transkription av presentationen pÄ DevopsConf 2019-10-01 och SPbLUG 2019-09-25.

Detta Àr historien om projektet dÀr en skrÀddarsydd konfigurationshanteringssystem anvÀndes och varför flytten till Ansible drog ut pÄ tiden i 18 mÄnader.

Dag № -XXX: Innan starten

Ansible: Migrering av konfigurationen av 120 VM frÄn CoreOS till CentOS under 18 mÄnader

I början bestod infrastrukturen av mÄnga fristÄende vÀrdar som styrdes av Hyper-V. Att skapa en virtuell maskin krÀvde mÄnga steg: placera diskarna pÄ rÀtt plats, ange DNS, reservera DHCP, och lÀgga konfigurationen av VM i git-repositoriet. Denna process var delvis mekaniserad, men exempelvis fördelades VM manuellt mellan vÀrdarna. Men exempelvis kunde utvecklarna, efter att ha justerat VM-konfigurationen i git, tillÀmpa den genom att starta om VM.

Anpassad konfigurationshanteringslösning

Ansible: Migrering av konfigurationen av 120 VM frÄn CoreOS till CentOS under 18 mÄnader

Den ursprungliga idén, misstÀnker jag, var tÀnkt som IaC: mÄnga stateless VMs som ÄterstÀllde sitt tillstÄnd vid omstart. Hur sÄg konfigurationshanteringen av VMs ut? Schematisk ser det enkelt ut:

  1. För VM tilldelades en statisk MAC-adress.
  2. ISO med CoreOS kopplades till VM och en startdisk.
  3. CoreOS kör ett anpassningsskript genom att hÀmta det frÄn webbservern baserat pÄ sin IP.
  4. Skriptet hÀmtar genom SCP konfigurationen av VM baserat pÄ IP-adressen.
  5. En mÀngd systemd-enhetsfiler och bash-script körs.

Ansible: Migrering av konfigurationen av 120 VM frÄn CoreOS till CentOS under 18 mÄnader

Denna lösning hade mÄnga uppenbara problem:

  1. ISO i CoreOS var förÄldrad.
  2. MÄnga komplicerade automatiserade ÄtgÀrder och magi vid migrering/skapande av VM.
  3. SvÄrigheter med uppdatering av programvara som mÄste ha en viss version. Det var Ànnu mer problematiskt med kÀrnmoduler.
  4. VM var inte helt utan data, dvs. det fanns VM som hade en monterad disk med anvÀndardata dessutom.
  5. NÄgon gjorde stÀndigt misstag med beroenden för systemd-enheter och CoreOS hÀngde vid omstart. Det var problematiskt att fÄnga detta med de befintliga verktygen i CoreOS.
  6. Hantering av hemligheter.
  7. CM fanns knappt. Det var bash och YML-konfigurationer för CoreOS.

För att tillĂ€mpa konfigurationen av VM mĂ„ste den startas om, men den kanske inte startade om. En rĂ€tt uppenbar problematik, men det finns inga persistenta diskar – det finns ingenstans att spara loggar. Okej, lĂ„t oss försöka lĂ€gga till alternativ i kĂ€rnstarten sĂ„ att loggar skickas. Men nej, allt Ă€r sĂ„ komplicerat.

Dag №0: ErkĂ€nnande av problemet

Ansible: Migrering av konfigurationen av 120 VM frÄn CoreOS till CentOS under 18 mÄnader

Det var en vanlig utvecklingsinfrastruktur: jenkins, testmiljöer, övervakning, registry. CoreOS var avsett för hosting av k8s kluster, dvs problemet lÄg i hur CoreOS anvÀndes. Det första steget var att vÀlja stack. Vi beslutade att anvÀnda:

  1. CentOS som basdistribuering, eftersom det Àr den som ligger nÀrmast produktionsmiljöer.
  2. Ansible för att hantera konfigurationer, eftersom det fanns omfattande expertis om det.
  3. Jenkins som ett ramverk för att automatisera befintliga processer, eftersom det redan anvÀndes aktivt för utvecklingsprocesser.
  4. Hyper-V som en virtualiseringsplattform. Det finns flera skÀl som gÄr utanför berÀttelsen, men kort sagt - vi kan inte anvÀnda moln, vi mÄste anvÀnda vÄr egen hÄrdvara.

Dag nr 30: Dokumentera befintliga avtal - Agreements as Code

Ansible: Migrering av konfigurationen av 120 VM frÄn CoreOS till CentOS under 18 mÄnader

NĂ€r stacken var klar började förberedelserna för flytten. Dokumentationen av befintliga avtal i form av kod (Agreements as Code!). ÖvergĂ„ngen manuellt arbete -> mekanisering -> som möjliggör snabbare testning, distribution och leverans av ny funktionalitet till anvĂ€ndarna. Till exempel skapas det i alla vĂ„ra projekt automatiskt en CI-pipeline vid varje commit. I den byggs en avbild, testas, distribueras till olika Kubernetes-miljöer för felsökning och vidare kontroller, och om allt gĂ„r bra - nĂ„r förĂ€ndringarna slutligen anvĂ€ndaren. Detta Ă€r inte lĂ€ngre raketvetenskap, utan en vanlig företeelse för mĂ„nga - förmodligen Ă€ven för dig, eftersom du lĂ€ser denna artikel..

1. Konfigurera VM:ar

Ansible: Migrering av konfigurationen av 120 VM frÄn CoreOS till CentOS under 18 mÄnader

Ansible hanterar denna uppgift utmÀrkt. Med minimal anstrÀngning kan man ta över hanteringen av VM-konfigurationer:

  1. Skapa ett git-repo.
  2. LÀgg in listan pÄ VM:ar i inventariet, konfigurationerna i playbooks och roller.
  3. StÀll in en speciell jenkins-slave som kan köra ansible.
  4. Skapa jobb, konfigurera Jenkins.

Den första processen Àr klar. Avtalen Àr dokumenterade.

2. Skapa ny VM

Ansible: Migrering av konfigurationen av 120 VM frÄn CoreOS till CentOS under 18 mÄnader

HÀr var det inte sÀrskilt bekvÀmt. Att skapa VM:ar pÄ Hyper-V frÄn Linux var inte sÄ smidigt. Ett av försöken att automatisera denna process var:

  1. Ansible ansluter via WinRM till Windows-vÀrden.
  2. Ansible kör ett powershell-skript.
  3. Powershell-skriptet skapar en ny VM.
  4. Med hjÀlp av Hyper-V/ScVMM konfigureras hostname nÀr VM:ar skapas i gÀst OS.
  5. VM:en skickar sitt hostname vid uppdatering av DHCP-lease.
  6. Den inbyggda integrationen av ddns & dhcp pÄ Domains Controller konfigurerar DNS-poster.
  7. Man kan lÀgga till VM:ar i inventariet och konfigurera dem med Ansible.

3. Skapa VM-mall

Ansible: Migrering av konfigurationen av 120 VM frÄn CoreOS till CentOS under 18 mÄnader

HÀr uppfann vi ingenting - vi anvÀnde packer.

  1. I git-repo laddar vi upp packer-konfigurationen, kickstart.
  2. StÀll in en speciell jenkins-slave med hyper-v och Packer.
  3. Skapa jobb, konfigurera Jenkins.

SÄ hÀr fungerar denna koppling:

  1. Packer skapar en tom VM, kopplar ISO.
  2. VM:en startar, Packer ger bootloader-kommandot att anvÀnda vÄr kickstart-fil frÄn floppy eller http.
  3. Anaconda startas med vÄr konfiguration, den första instÀllningen av OS görs.
  4. Packer vÀntar pÄ att VM:en ska bli tillgÀnglig.
  5. Packer kör ansible i lokal lÀge inuti VM:en.
  6. Ansible anvĂ€nder exakt samma roller som i steg №1.
  7. Packer exporterar VM-mallen.

Dag №75: Refaktorerar överenskommelser utan att bryta = Testa ansible + Testkitchen

Ansible: Migrering av konfigurationen av 120 VM frÄn CoreOS till CentOS under 18 mÄnader

Att faststÀlla överenskommelser i koden kan vara otillrÀckligt. Om du vill Àndra nÄgot i grunden kan du riskera att bryta nÄgot. DÀrför behövs testning av infrastrukturen. För att synka kunskapen inom teamet började vi testa Ansible-roller. Jag ska inte gÄ djupare in pÄ det, dÄ det finns en artikel som beskriver hÀndelserna vid den tidpunkten. Testa mig om du kan, eller drömmer YML-programmerare om testning av ansible?(spoiler, detta var inte den slutgiltiga versionen och senare blev allt mer komplicerat) Hur man börjar testa Ansible, refaktorerar projektet pÄ ett Är och inte tappar förstÄndet.).

Dag №130: Behöver vi verkligen CentOS+ansible? Kanske Openshift?

Det Àr viktigt att förstÄ att processen att implementera infrastrukturer inte var den enda, och det fanns sidoprojekt. Till exempel kom en förfrÄgan om att köra vÄr applikation i Openshift vilket ledde till flera veckors forskning. Vi startar applikationen i Openshift och jÀmför med befintliga verktyg. Vad som bromsade flyttprocessen. Slutsatsen blev att Openshift inte tÀcker alla behov, vi behöver riktig hÄrdvara, eller Ätminstone möjlighet att experimentera med kÀrnan.

Dag №170: Openshift fungerar inte, ska vi satsa pĂ„ Windows Azure Pack?

Ansible: Migrering av konfigurationen av 120 VM frÄn CoreOS till CentOS under 18 mÄnader

Hyper-V Àr inte sÀrskilt anvÀndarvÀnligt, SCVMM gör det inte mycket bÀttre. Men det finns en produkt som heter Windows Azure Pack, som Àr ett tillÀgg till SCVMM och imiterar Azure. Men i verkligheten ser produkten övergiven ut: dokumentationen har trasiga lÀnkar och Àr ganska sparsam. Men inom ramen för att utforska alternativ för att förenkla vÄrt moln tittade vi Àven pÄ detta.

Dag №250: Windows Azure Pack Ă€r inte sĂ„ bra. Vi stannar kvar pĂ„ SCVMM.

Ansible: Migrering av konfigurationen av 120 VM frÄn CoreOS till CentOS under 18 mÄnader

Windows Azure Pack verkade lovande, men det beslutades att inte införa WAP med dess komplikationer för att fÄ onödiga funktioner, och vi stannade pÄ SCVMM.

Dag №360: Äter elefanten bit för bit.

Ansible: Migrering av konfigurationen av 120 VM frÄn CoreOS till CentOS under 18 mÄnader

Först efter ett Är var plattformen redo för flytt och processen började. En S.M.A.R.T. uppgift stÀlldes. Vi listade alla VM och började gÄ igenom konfigurationen en i taget, beskriva den pÄ Ansible och tÀcka med tester.

Dag №450: Vilket system fick vi?

Ansible: Migrering av konfigurationen av 120 VM frÄn CoreOS till CentOS under 18 mÄnader

SjÀlva processen Àr inte intressant. Den Àr rutinmÀssig, och det kan noteras att de flesta konfigurationerna var relativt enkla eller isomorfa, och enligt Pareto-principen krÀvde 80 % av konfigurationerna 20 % av tiden. PÄ samma sÀtt gick 80 % av tiden Ät till att förbereda flytten och endast 20 % till sjÀlva flytten.

Dag nr 540: Avslutning

Ansible: Migrering av konfigurationen av 120 VM frÄn CoreOS till CentOS under 18 mÄnader

Vad har hÀnt under de senaste 18 mÄnaderna?

  1. Överenskommelserna blev kod.
  2. Manuell arbetskraft -> Mekanisering -> Automatisering.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster