Ansible: Migrace konfigurace 120 VM z CoreOS na CentOS během 18 měsíců

Ansible: Migrace konfigurace 120 VM z CoreOS na CentOS během 18 měsíců

Toto je přepis prezentace na DevopsConf 2019-10-01 a SPbLUG 2019-09-25.

To je příběh projektu, ve kterém byl použit vlastní systém správy konfigurací a proč se přechod na Ansible protáhl na 18 měsíců.

Den č. -XXX: Před začátkem

Ansible: Migrace konfigurace 120 VM z CoreOS na CentOS během 18 měsíců

Původní infrastruktura byla tvořena mnoha samostatnými servery řízenými Hyper-V. Vytvoření virtuálního stroje vyžadovalo spoustu akcí: umístit disky na správné místo, nastavit DNS, rezervovat DHCP, umístit konfiguraci VM do git repozitáře. Tento proces byl částečně zautomatizován, ale například VM byly distribuovány mezi servery ručně. Například, vývojáři mohli upravit konfiguraci VM v gitu a aplikovat ji restartováním VM.

Custom Configuration Management Solution

Ansible: Migrace konfigurace 120 VM z CoreOS na CentOS během 18 měsíců

Původní myšlenku, podezřívám, zamýšleli jako IaC: mnohé stateless VM, které při restartu resetovaly svůj stav. Jak vypadalo řízení konfigurací VM? Schematicky to vypadá jednoduše:

  1. Pro VM se přiděloval statický MAC.
  2. K VM byla připojena ISO s CoreOS a spouštěcí disk.
  3. CoreOS spouští skript přizpůsobení, který stahuje z WEB serveru na základě své IP.
  4. Skript stáhne přes SCP konfiguraci VM na základě IP adresy.
  5. Spouští se série unit souborů systemd a série bash skriptů.

Ansible: Migrace konfigurace 120 VM z CoreOS na CentOS během 18 měsíců

Toto řešení mělo mnoho zřejmých problémů:

  1. ISO v CoreOS bylo deprecated.
  2. Mnoho složitě automatizovaných akcí a magie při migraci/vytváření VM.
  3. S obtížemi s aktualizacemi a když je potřeba software určité verze. A ještě zábavnější u modulů jádra.
  4. VM nebyly tak úplně bez dat, tj. objevily se VM, u kterých byl připojen disk s uživatelskými daty navíc.
  5. Někdo neustále chyboval se závislostmi unit souborů systemd a při restartu CoreOS zamrzla. S dostupnými prostředky v CoreOS to bylo problematické chytit.
  6. Správa tajemství.
  7. CM téměř neexistovalo. Byl tu bash a YML konfigurace CoreOS.

Aby bylo možné aplikovat konfiguraci VM, je nutné ji restartovat, ale nemusela se restartovat. Zdá se to jako zřejmý problém, ale není žádný perzistentní disk — logy není kam uložit. No dobře, zkusme přidat možnosti zavádění jádra, aby logy posílaly. Ale ne, jak je to všechno složité.

Den č.0: Přiznání problému

Ansible: Migrace konfigurace 120 VM z CoreOS na CentOS během 18 měsíců

To byla běžná vývojová infrastruktura: Jenkins, testovací prostředí, monitorování, registry. CoreOS byla navržena pro hostování clustrů k8s, takže problém byl v tom, jak byla CoreOS využívána. Prvním krokem bylo výběr stacku. Zastavili jsme se na:

  1. CentOS jako základní distribuce, protože je to nejblíže produkčním prostředím.
  2. Ansible pro správu konfigurací, protože byla rozsáhlá odborná znalost.
  3. Jenkins jako framework pro automatizaci stávajících procesů, protože už byl aktivně využíván pro vývojové procesy.
  4. Hyper-V jako virtualizační platforma. Existuje řada důvodů, které přesahují tento příběh, ale stručně — nemůžeme používat cloud, musíme používat vlastní hardware.

Den č. 30: Zaznamenáváme stávající dohody — Agreements as Code.

Ansible: Migrace konfigurace 120 VM z CoreOS na CentOS během 18 měsíců

Jakmile byl stack jasný, začala příprava na přestěhování. Zaznamenání stávajících dohod ve formě kódu (Agreements as Code!). Přechod ruční práce -> mechanizace -> automatizace.

1. Konfigurace VM

Ansible: Migrace konfigurace 120 VM z CoreOS na CentOS během 18 měsíců

Ansible si s touto úlohou skvěle poradí. S minimem úsilí můžete řídit konfigurace VM:

  1. Vytvoříme git repository.
  2. Uložíme seznam VM do inventáře, konfigurace do playbooků a rolí.
  3. Nastavujeme speciální Jenkins slave, ze kterého bude možné spouštět Ansible.
  4. Vytvoříme job, nastavíme Jenkins.

První proces je hotový. Dohody byly zaznamenány.

2. Vytvořit novou VM

Ansible: Migrace konfigurace 120 VM z CoreOS na CentOS během 18 měsíců

Zde to nebylo moc pohodlné. Z Linuxu nebylo snadné vytvářet VM na Hyper-V. Jedním z pokusů, jak tento proces zmechanizovat, bylo:

  1. Ansible se připojuje přes WinRM k Windows hostiteli.
  2. Ansible spouští PowerShell skript.
  3. PowerShell skript vytváří novou VM.
  4. Prostřednictvím Hyper-V/ScVMM se při vytváření VM v hostitelském OS nastavuje hostname.
  5. VM při obnově DHCP lease odesílá své hostname.
  6. Standardní integrace DDNS & DHCP na straně Domain Controller nastavuje DNS záznam.
  7. VM lze přidat do inventáře a nastavit ji pomocí Ansible.

3. Vytvořit šablonu VM

Ansible: Migrace konfigurace 120 VM z CoreOS na CentOS během 18 měsíců

Zde jsme nevymýšleli nic nového — vzali jsme Packer.

  1. Do git repository ukládáme config Packer, kickstart.
  2. Nastavujeme speciální Jenkins slave s Hyper-V a Packer.
  3. Vytvoříme job, nastavíme Jenkins.

Jak tato kombinace funguje:

  1. Packer vytváří prázdnou VM, připojuje ISO.
  2. VM se spouští, Packer zadává do bootloaderu příkaz používat náš kickstart soubor z disket nebo HTTP.
  3. Spouští se Anaconda s naším configem, provádí se počáteční nastavení OS.
  4. Packer čeká na dostupnost VM.
  5. Packer uvnitř VM spouští Ansible v lokálním režimu.
  6. Ansible používá stejné role jako v kroku č. 1.
  7. Packer exportuje šablonu VM.

Den č. 75: Refaktorujeme dohody, aniž bychom je porušili = Test ansible + Testkitchen.

Ansible: Migrace konfigurace 120 VM z CoreOS na CentOS během 18 měsíců

Zafixovat dohody v kódu může být nedostatečné. Vždyť pokud se v pozadí procesu rozhodneš něco změnit — můžeš něco rozbít. Proto se u infrastruktury objevuje testování této infrastruktury. Abychom synchronizovali znalosti v rámci týmu, začali jsme testovat Ansible role. Nechci se do toho zabývat hlouběji, protože existuje článek popisující události v té době. Otestuj mě, pokud můžeš, nebo sní o testování ansible YML programátoři?(spoiler, to nebyla finální varianta a později se to stalo složitějším). Jak začít testovat Ansible, refaktorovat projekt za rok a neztratit hlavu.).

Den č. 130: A možná CentOS + ansible není potřeba? Možná openshift?

Musíme chápat, že proces zavedení infrastruktury nebyl jediný a byly tu vedlejší podprojekty. Například přišel požadavek na spuštění naší aplikace v openshiftu, což vedlo k výzkumu na více než jeden týden. Spouštíme aplikaci v Openshiftu a srovnáváme existující nástroje. co zpomalilo proces přechodu. Výsledkem se ukázalo, že openshift neřeší všechny potřeby, je potřeba skutečný hardware, nebo alespoň možnost hrát si s jádrem.

Den č. 170: Openshift nevyhovuje, riskneme to s Windows Azure Pack?

Ansible: Migrace konfigurace 120 VM z CoreOS na CentOS během 18 měsíců

Hyper-V není příliš přátelský, SCVMM to moc neulehčuje. Ale existuje taková věc jako Windows Azure Pack, která je nadstavbou nad SCVMM a napodobuje Azure. Ve skutečnosti však produkt vypadá opuštěně: dokumentace s nefunkčními odkazy a velmi chudá. Ale v rámci výzkumu možností zjednodušení našeho cloudu jsme se na něj také podívali.

Den č. 250: Windows Azure Pack není moc dobrý. Zůstáváme na SCVMM.

Ansible: Migrace konfigurace 120 VM z CoreOS na CentOS během 18 měsíců

Windows Azure Pack vypadalo slibně, ale bylo rozhodnuto nezavádět WAP s jeho obtížemi do systému kvůli zbytečným funkcím a zůstali jsme na SCVMM.

Den č. 360: Jíme slona po částech.

Ansible: Migrace konfigurace 120 VM z CoreOS na CentOS během 18 měsíců

Až po roce byla připravena platforma, na kterou se mělo přejít, a začal proces migrace. Bylo stanovené SMART cíle. Vypsali jsme všechny VM a začali jednu po druhé řešit s konfigurací, popisovat ji v Ansible a pokrývat testy.

Den č. 450: Jaký systém se vytvořil?

Ansible: Migrace konfigurace 120 VM z CoreOS na CentOS během 18 měsíců

Celý proces není zajímavý. Je rutinní, lze poznamenat, že většina konfigurací byla relativně jednoduchá nebo izomorfní, a podle principu Pareto 80 % konfigurací si vyžádalo 20 % času. Podle stejného principu 80 % času bylo věnováno přípravě na přestěhování a pouze 20 % na samotné přestěhování.

Den č. 540: Finále

Ansible: Migrace konfigurace 120 VM z CoreOS na CentOS během 18 měsíců

Co se stalo za 18 měsíců?

  1. Dohody se staly kódem.
  2. Ruční práce -> Mechanizace -> Automatizace.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster