
See on ettekande kokkuvÔte ja .
See on projekti lugu, kus kasutati kohandatud konfiguratsioonihalduse sĂŒsteemi ja miks kuni Ansible'ile ĂŒleminek venis 18 kuud.
PĂ€ev â -XXX: Enne algust

Alguses koosnes infrastruktuur paljusid eraldiseisvaid hoste, mille haldamiseks kasutati Hyper-V. Virtuaalse masina loomine nÔudis hulgaliselt toiminguid: kettad Ôigesse kohta panna, DNS mÀÀrata, DHCP reserveerida, VM-i konfiguratsioon git-repositooriumisse panna. See protsess oli osaliselt mehhaniseeritud, kuid nÀiteks VM-id jagati hostide vahel kÀsitsi. Kuid nÀiteks arendajad said VM-i konfiguratsiooni git-is muutes selle taastada VM-i taaskÀivitamisega.
Kohandatud konfiguratsioonihalduse lahendus

Algne idee, kahtlustan, pidi olema nagu IaC: hulk state'ita VM-e, mis taaskÀivitamisel oma oleku nulliks. Kuidas nÀgi vÀlja VM-i konfiguratsiooni haldamine? Koonduvalt nÀeb see lihtne vÀlja:
- VM-idele kinnitati staatiline MAC.
- VM-idele ĂŒhendati ISO koos CoreOS-i ja laadimisdiskiga.
- CoreOS kÀivitab kohandamisskripti, laadides selle WEB-serverist alla oma IP-aadressi alusel.
- Skript tÔmbab SCP kaudu alla VM-i konfiguratsiooni, tuginedes IP-aadressile.
- KĂ€ivituvad systemd ĂŒksuste failide jadad ja bash-skriptide jadad.

Sellel lahendusel oli mitu ilmset probleemi:
- ISO CoreOS-is oli vananenud.
- Palju keerukaid automatiseeritud toiminguid ja maagiat VM-i migreerimisel/loomisel.
- Uuendamisega oli keeruline, eriti kui konkreetses versioonis tarkvara vajati. Veelgi keerulisem oli tuumamoodulitega.
- VM-id ei olnud sugugi andmeta, st ilmusid VM-id, millel oli tĂ€iendavalt ĂŒhendatud kett kasutajate andmetega.
- Keegi tegi pidevalt vigu systemd ĂŒksuste sĂ”ltuvustega ja CoreOS-i taaskĂ€ivitamisel hangus see. Olemasolevate vahenditega oli CoreOS-is seda probleemset tuvastada keeruline.
- Salajaste andmete haldamine.
- CM ei olnud praktiliselt olemas. Oli bash ja CoreOS-i YML konfiguratsioonid.
VM-i konfiguratsiooni rakendamiseks on vajalik selle taaskĂ€ivitamine, kuid see ei pruugi taaskĂ€ivituda. Tundub ilmne probleem, kuid pĂŒsivad kettad puuduvad â logisid pole kuhugi salvestada. Noh, proovime lisada kernelibootimise valikuid, et logid edastataks. Kuid ei, kĂ”ik tundub nii keeruline.
PĂ€ev nr 0: Probleemi tunnustamine

See oli tavaline arenduse infrastruktuur: jenkins, testkeskkonnad, jÀlgimised, registry. CoreOS mÔeldi k8s klastrite hostimiseks, st probleem seisnes selles, kuidas CoreOS'i kasutati. Esimene samm oli steigi valimine. Otsustasime:
- CentOS kas aluseks olev distributsi, kuna see on kÔige lÀhedasem tootmisringkondadele.
- Ansible konfiguratsioonide haldamiseks, kuna selle kohta oli ulatuslikku ekspertiisi.
- Jenkins olemasolevate protsesside automatiseerimise raamistiku nÀol, kuna seda kasutati juba aktiivselt arendusprotsessides.
- Hyper-V virtualiseerimise platvormina. On mitmeid pĂ”hjuseid, mis ĂŒletavad selle jutu, kuid lĂŒhidalt â me ei saa kasutada pilvi, peame kasutama oma riistvara.
PĂ€ev â30: Salvestame olemasolevad lepped â Agreements as Code

Kui steik oli selge, algas ettevalmistus kolimiseks. Olemasolevate lepingute salvestamine koodina (Agreements as Code!). Ăleminek kĂ€te töö -> mehhaniseerimine -> automatiseerimine.
1. Konfigureeri virtuaalmasinad

Ansible teeb selle ĂŒlesande suurepĂ€raselt. Minimalsete pingutustega saab hallata VM-de konfiguratsioone:
- Loome git reposti.
- Kogume VM-id inventari, konfiguratsioonid playbookidesse ja rollidesse.
- Seame ĂŒles spetsiaalse Jenkins slave'i, millelt on vĂ”imalik Ansible'i kĂ€ivitada.
- Loome töö, seadistame Jenkinsit.
Esimene protsess on valmis. Kokku lepingud on kinnitatud.
2. Looge uus VM

Siin ei olnud kĂ”ik vĂ€ga mugav. Linuxist ei olnud vĂ€ga mugav luua VM-e Hyper-V-s. Ăks proovidest selle protsessi mehhaniseerimiseks oli:
- Ansible ĂŒhendub WinRM kaudu Windowsi hostiga.
- Ansible kÀivitab PowerShell skripti.
- PowerShell skript loob uue VM-i.
- Hyper-V/ScVMM abil, kui VM-i luuakse, on kĂŒlalis-OS-is seadistatud hostname.
- VM saadab DHCP lease'i uuendamisel oma hostname'i.
- DDNS ja DHCP standardne integreerimine Domain Controller'i poolest seadistab DNS kirje.
- VM-e saab lisada inventari ja seadistada nende Ansible'i.
3. Looge VM-i mall

Siin ei hakanud me midagi leiutama â vĂ”tsime Packer'i.
- Paneme Git reposse Packer'i ja kickstarti konfi.
- Seame ĂŒles spetsiaalse Jenkins slave'i Hyper-V ja Packer'i jaoks.
- Loome töö, seadistame Jenkinsit.
Kuidas see kombinatsioon töötab:
- Packer loob tĂŒhja VM-i ning ĂŒhendab ISO.
- VM kÀivitub, Packer annab kÀskluse kasutada meie kickstart faili ketasel vÔi http kaudu.
- KĂ€ivitub Anaconda koos meie konfiguuri, tehakse OS-i esialgne seadistamine.
- Packer ootab VM-i kÀttesaadavust.
- Packer VM sees ansible running in local mode.
- Ansible uses exactly the same roles as in step â1.
- Packer exports the VM template.
Day â75: Refactoring agreements without breaking = Test ansible + Testkitchen

Simply fixing the agreements in code may not be enough. If during the process you want to change something, you might break something. Therefore, infrastructure testing becomes essential. To synchronize knowledge within the team, we started testing Ansible roles. I won't go into detail as there is an article describing the events at that time. (spoiler, this was not the final version and things got more complicated later) ).
Day â130: Maybe CentOS+ansible isn't needed? Maybe openshift?
It's important to understand that the infrastructure integration process wasn't the only one, and there were side projects. For instance, a request came to run our application in openshift, which led to research lasting more than a week. mis pidurdas kolimise protsessi. Tulemuseks oli, et openshift ei katnud kÔiki vajadusi, vajalik on reaalne riistvara vÔi vÀhemalt vÔimalus mÀngida tuumaga.
PĂ€ev â170: Openshift ei sobi, riskime Windows Azure Packiga?

Hyper-V ei ole eriti sĂ”bralik, SCVMM ei tee sellest palju paremat. Kuid on olemas selline asi nagu Windows Azure Pack, mis on SCVMM-i pealne ja matkib Azure'i. Kuid tegelikkuses nĂ€eb toode vĂ€lja mahajĂ€etud: dokumentatsioon on katkenud linkidega ja ĂŒsna vaene. Kuid meie pilve elu lihtsustamise vĂ”imaluste uurimisel vaatasime ka seda.
PĂ€ev â250: Windows Azure Pack ei ole vĂ€ga hea. JĂ€tkame SCVMM-is.

Windows Azure Pack nĂ€gi vĂ€lja paljutĂ”otav, kuid otsustasime mitte tuua WAP-i koos selle raskustega sĂŒsteemi, et vĂ€ltida tarbetuid funktsioone, ja jĂ€ime SCVMM-i.
PĂ€ev â360: Söödame elevanti tĂŒkkhaaval

Ainult aasta pĂ€rast oli platvorm valmis, kuhu kolida, ja kolimisprotsess algas. Selleks seati eesmĂ€rgiks S.M.A.R.T. ĂŒlesanne. Kirjutasime ĂŒles kĂ”ik virtuaalsed masinad ja hakkasime ĂŒksikult nende konfiguratsiooniga tegelema, kirjeldama seda Ansible'is, katma testidega.
PĂ€ev â450: Milline sĂŒsteem vĂ€lja tuli?

Protsess ise ei ole huvitav. See on rutiinne, vĂ”ib mĂ€rkida, et enamus konfiguratsioone olid suhteliselt lihtsad vĂ”i isomorfsed ning Pareto pĂ”himĂ”tte kohaselt nĂ”udis 80% konfiguratsioone 20% ajast. Sama printsiibi kohaselt kulus 80% ajast ettevalmistamiseks ja ainult 20% ĂŒleviimiseks.
PĂ€ev nr 540: Finaal

Mis siis 18 kuu jooksul juhtus?
- Kokkulepped muutusid koodiks.
- KÀsitöö -> Mehaanizatsioon -> Automatiseerimine.
Lingid
Allikas: habr.com
