Ansible: Міграцыя канфігурацыі 120 VM c CoreOS на CentOS за 18 месяцаў

Ansible: Міграцыя канфігурацыі 120 VM c CoreOS на CentOS за 18 месяцаў

Гэта расшыфроўка выступу на DevopsConf 2019-10-01 и SPbLUG 2019-09-25.

Гэта гісторыя праекту, на якім выкарыстоўвалася самапісная сістэма кіравання канфігурацыямі і чаму пераезд на Ansible зацягнуўся на 18 месяцаў.

Дзень №-ХХХ: Before the beginning

Ansible: Міграцыя канфігурацыі 120 VM c CoreOS на CentOS за 18 месяцаў

Першапачаткова інфраструктура ўяўляла сабой мноства асобна стаячых хастоў пад кіраваннем Hyper-V. Стварэнне віртуальнай машыны патрабавала мноства дзеянняў: пакласці дыскі ў патрэбнае месца, прапісаць DNS, зарэзерваваць DHCP, пакласці канфігурацыю ВМ у git рэпазітар. Гэты працэс быў часткова механізаваны, але напрыклад ВМ размяркоўваліся паміж хастамі рукамі. Але, напрыклад, распрацоўнікі маглі паправіўшы канфігурацыю ВМ у git ужыць яе перазагрузіўшы ВМ.

Custom Configuration Management Solution

Ansible: Міграцыя канфігурацыі 120 VM c CoreOS на CentOS за 18 месяцаў

Першапачатковая ідэю, падазраю, задумвалі як IaC: мноства stateless ВМ, якія пры перазагрузцы абнулялі свой стан. Што з сябе ўяўляла кіраванне канфігурацыямі ВМ? Схематычна выглядае проста:

  1. Для ВМ прыбівалі статычны MAC.
  2. Да ВМ падлучалі ISO з CoreOS і загрузны дыск.
  3. CoreOS запускае скрыпт кастамізацыі запампаваўшы яго з WEB сервера на падставе свайго IP.
  4. Скрыпт выпампоўвае праз SCP канфігурацыю ВМ засноўваючыся на IP адрасе.
  5. Запускаецца парцянка systemd unit файлаў і парцянка bash скрыптоў.

Ansible: Міграцыя канфігурацыі 120 VM c CoreOS на CentOS за 18 месяцаў

У гэтага рашэння было мноства відавочных праблем:

  1. ISO у CoreOS было deprecated.
  2. Мноства складана аўтаматызаваных дзеянняў і магіі пры міграцыі / стварэнні ВМ.
  3. Складанасць з абнаўленнем і калі неабходна ПЗ нейкай версіі. Яшчэ весялей з модулямі ядра.
  4. ВМ не такія ўжо без дадзеных атрымліваліся, г.зн. з'явіліся ВМ у якіх змантаваны дыск з карыстацкімі дадзенымі дадаткова.
  5. Увесь час хтосьці касячыў з залежнасцямі systemd unit і пры перазагрузцы CoreOS завісала. Наяўнымі сродкамі ў CoreOS адлавіць гэта было праблемна.
  6. Упраўленне сакрэтамі.
  7. CM не было лічы. Быў bash і YML канфігі CoreOS.

Што б ужыць канфігурацыю ВМ неабходна яе перазагрузіць, але яна магла не перазагрузіцца. Накшталт відавочная праблема, але персістэнтных дыскаў няма - логі захоўваць няма куды. Ну ок, давайце паспрабуем дадаць опцыі загрузка ядра што б логі перасылалі. Але не, як гэта складана ўсё.

Дзень №0: Прызнанне праблемы

Ansible: Міграцыя канфігурацыі 120 VM c CoreOS на CentOS за 18 месяцаў

Гэта была звычайная распрацоўчая інфраструктура: jenkins, тэставыя асяроддзі, маніторынгі, registry. CoreOS задумвалася для хостынгу k8s кластараў, г.зн. праблема была ў тым, як выкарыстоўвалася CoreOS. Першым крокам быў выбар стэка. Мы спыніліся на:

  1. CentOS як базавы дыстрыбутыў, т.я. гэта найбольш блізкі дыстрыбутыў да production асяроддзем.
  2. анзибль для кіравання канфігурацыямі, т.я. па ім была шырокая экспертыза.
  3. Джэнкінс як фрэймворк аўтаматызацыі існуючых працэсаў, т.я. ён ужо актыўна выкарыстоўваўся для працэсаў распрацоўкі
  4. Hyper-V, як платформа віртуалізацыі. Ёсць шэраг прычын, якія выходзяць за рамкі апавядання, але калі коратка - мы не можам выкарыстоўваць аблокі, павінны выкарыстоўваць сваё жалеза.

Дзень №30: Фіксуем існуючыя дамоўленасці — Agreements as Code

Ansible: Міграцыя канфігурацыі 120 VM c CoreOS на CentOS за 18 месяцаў

Калі быў зразумелы стэк, пачалася падрыхтоўка да пераезду. Фіксаванне існуючых дамоўленасцей у выглядзе кода (Agreements as Code!). Пераход ручная праца -> механізацыя -> аўтаматызацыя.

1. Configure VMs

Ansible: Міграцыя канфігурацыі 120 VM c CoreOS на CentOS за 18 месяцаў

Ansible добра спраўляецца з гэтай задачай. З мінімум рухаў цела можна ўзяць пад кіраванне канфігурацыямі ВМ:

  1. Ствараем git рэпазітар.
  2. Складаем спіс ВМ у inventory, канфігурацыі ў плэйбукі і ролі.
  3. Наладжваем спецыяльны jenkins slave з якога можна будзе запускаць ansible.
  4. Ствараем job, наладжваем Jenkins.

Першы працэс готаў. Дамоўленасці зафіксаваны.

2. Create new VM

Ansible: Міграцыя канфігурацыі 120 VM c CoreOS на CentOS за 18 месяцаў

Тут усё не надта зручна было. З лінукс не вельмі зручна ствараць ВМ на Hyper-V. Адной са спробаў механізаваць гэты працэс было:

  1. Ansbile падключаецца праз WinRM да windows хасту.
  2. Ansible запускае powershell скрыпт.
  3. Powershell скрыпт стварае новую ВМ.
  4. Сродкамі Hyper-V/ScVMM пры стварэнні вм у гасцявой АС наладжваецца hostname.
  5. ВМ пры абнаўленне DHCP lease адсылае свой hostname.
  6. Штатная інтэграцыя ddns & dhcp на баку Domain Controller наладжвае DNS запіс.
  7. Можна дадаваць ВМ у інвентары і наладжваць яе Ansible.

3. Create VM template

Ansible: Міграцыя канфігурацыі 120 VM c CoreOS на CentOS за 18 месяцаў

Тут не сталі нічога вынаходзіць - узялі packer.

  1. У git рэпазітар складаем канфіг packer, kickstart.
  2. Наладжваем спецыяльны jenkins slave з hyper-v і Packer.
  3. Ствараем job, наладжваем Jenkins.

Як працуе гэты звязак:

  1. Packer стварае пустую ВМ, падчапляе ISO.
  2. ВМ загружаецца, Packer ўводзіць у загрзучик каманду выкарыстоўваць наш kickstart файл з дыскеты ці http.
  3. Запускаецца anaconda з нашым канфігам, робіцца першасная настройка АС.
  4. Packer чакае даступнасці ВМ.
  5. Packer ўнутры ВМ запускае ansible у лакальным рэжыме.
  6. Ansible выкарыстоўваючы роўна тыя ж ролі што за крок № 1 адпрацоўвае.
  7. Packer экспартуе шаблон ВМ.

Дзень №75: Рэфактарым дамоўленасці не ломячы = Test ansible + Testkitchen

Ansible: Міграцыя канфігурацыі 120 VM c CoreOS на CentOS за 18 месяцаў

Зафіксаваць дамоўленасці ў кодзе можа быць нядосыць. Бо калі ў паднаготнай працэсе ты захочаш нешта памяняць - ты можаш нешта зламаць. Таму ў выпадку інфраструктуру з'яўляецца тэсціраванне гэтай самай інфраструктуры. Што б сінхранізаваць веды ў рамках каманды сталі тэсціраваць Ansible ролі. Не буду паглыбляць т.я. ёсць артыкул якія апісваюць падзеі ў той момант часу Пратэстуй мяне калі зможаш ці мараць YML праграмісты аб тэставанне ansible?(спойлер гэта быў не фінальны варыянт і пазней усё стала складаней Як пачаць тэставаць Ansible, адрэфактарыць праект за год і не зляцець з шпулек).

Дзень №130: А можа CentOS+ansible не патрэбен? можа openshift?

Трэба разумець, што працэс унясення інфраструктуры быў не адзіным і былі пабочныя падпраекты. Напрыклад, прыйшоў запыт на запуск нашага прыкладання ў openshift і гэта вылілася ў даследаванні не на адзін тыдзень Запускаем дадатак у Openshift і параўноўваем існуючы інструментарый што затармазіла працэс пераезду. Вынікам аказалася, што openshift не закрывае ўсіх патрэбаў, неабходна рэальнае жалеза, ну ці хаця б магчымасць гуляцца з ядром.

Дзень №170: Openshift не падыходзіць, рызыкнем з Windows Azure Pack?

Ansible: Міграцыя канфігурацыі 120 VM c CoreOS на CentOS за 18 месяцаў

Hyper-V не вельмі прыязны, SCVMM не робіць яго моцна лепш. Але ёсць такая штука Windows Azure Pack, якая з'яўляецца надбудовай над SCVMM і мімікруе пад Azure. Але ў рэальнасці прадукт выглядае закінутым: дакументацыя з бітымі спасылкамі і вельмі бедная. Але ў рамках даследавання варыянтаў спрашчэння жыцця нашага аблокі глядзелі і на яго таксама.

Дзень №250: Windows Azure Pack не вельмі. Застаемся на SCVMM

Ansible: Міграцыя канфігурацыі 120 VM c CoreOS на CentOS за 18 месяцаў

Windows Azure Pack выглядаў шматабяцальным, але было вырашана не прыўносіць WAP c яго складанасцямі ў сістэму дзеля непатрэбных фіч і засталіся на SCVMM.

Дзень №360: Ямо слана па частках

Ansible: Міграцыя канфігурацыі 120 VM c CoreOS на CentOS за 18 месяцаў

Толькі праз год была гатова платформа куды пераязджаць і пачаўся працэс пераезду. Для гэтага была пастаўлена SMART задача. Выпісалі ўсе ВМ і пачалі па адной разбірацца з канфігурацыяй, апісваць яе на Ansible, пакрываць цестамі.

Дзень №450: Якая сістэма атрымалася?

Ansible: Міграцыя канфігурацыі 120 VM c CoreOS на CentOS за 18 месяцаў

Сам працэс не цікавы. Ён руцінны, можна адзначыць, што большасць канфігурацый былі адносна простымі або ізаморфнымі і па прынцыпе Парэта 80% канфігурацый вам запатрабавала 20% часу. Па тым жа прынцыпу 80% часу спатрэбілася на падрыхтоўку пераезду і толькі 20% на сам пераезд.

Дзень №540: Фінал

Ansible: Міграцыя канфігурацыі 120 VM c CoreOS на CentOS за 18 месяцаў

Што ж адбылося за 18 месяцаў?

  1. Дамоўленасці сталі кодам.
  2. Ручная праца -> Механізацыя -> Аўтаматызацыя.

Крыніца: habr.com

Дадаць каментар