Questa hè a storia di un prughjettu chì hà utilizatu un sistema di gestione di cunfigurazione auto-scrittu è perchè u muvimentu in Ansible hà pigliatu 18 mesi.
Day No. -ХХХ: Prima di u principiu
Inizialmente, l'infrastruttura era custituita da parechji ospiti separati chì eseguivanu Hyper-V. A creazione di una macchina virtuale hà bisognu di parechji passi: mette i dischi in u locu ghjustu, registrà DNS, riservà DHCP, mette a cunfigurazione VM in u repository git. Stu prucessu era parzialmente meccanizatu, ma per esempiu, i VM sò stati distribuiti trà l'ospiti à manu. Ma, per esempiu, i sviluppatori puderanu correggerà a cunfigurazione di VM in git è l'applicà riavviendu a VM.
Soluzione di gestione di cunfigurazione persunalizata
L'idea originale, sospettate, hè stata cuncipita cum'è IaC: parechje VM senza statu chì resettanu u so statu à zero quandu riavviate. Chì era a gestione di cunfigurazione VM? Schematically pare simplice:
Un MAC staticu hè statu chjapputu per a VM.
Un ISO cù CoreOS è un discu di boot sò stati cunnessi à a VM.
CoreOS lancia u script di persunalizazione scarichendulu da u servitore WEB basatu annantu à a so IP.
U script scarica a cunfigurazione VM via SCP basatu annantu à l'indirizzu IP.
U footcloth di i schedari di unità systemd è u footcloth di scripts bash sò lanciati.
Sta suluzione hà assai prublemi evidenti:
CoreOS ISO hè stata obsoleta.
Un saccu di azzioni automatizati cumplessi è magia quandu migrate / creanu VM.
Difficultà cù l'aghjurnamentu è quandu una certa versione di u software hè necessariu. Ancu più divertente cù i moduli di kernel.
I VM ùn sò micca stati cusì ottenuti senza dati, i.e. I VM apparsu cun un discu cù dati d'utilizatori supplementari muntati.
Qualchissia sguassava constantemente e dipendenze di unità di sistema è CoreOS si congelava quandu si riavviava. Hè statu difficiule di catturà questu utilizendu l'arnesi dispunibili in CoreOS.
Gestione di i secreti.
Ùn ci era micca CM. Ci era bash è config YML per CoreOS.
Per applicà a cunfigurazione VM, avete bisognu di reboot, ma ùn pò micca riavvia. Sembra un prublema evidenti, ma ùn ci sò micca dischi persistenti - ùn ci hè nudda parte per salvà logs. Ebbè, ok, pruvemu à aghjunghje l'opzione di carica di u kernel per chì i logs seranu mandati. Ma no, quantu complicatu hè tuttu.
Day #0: Ricunniscite u prublema
Era l'infrastruttura di sviluppu di solitu: jenkins, ambienti di teste, monitoraghju, registru. CoreOS hè statu cuncepitu per ospitu clusters k8s, i.e. u prublema era cumu CoreOS hè stata utilizata. U primu passu era di sceglie una pila. Avemu stabilitu nantu à:
CentOS cum'è una distribuzione di basa, perchè Questa hè a distribuzione più vicinu à l'ambienti di produzzione.
Ansible per a gestione di cunfigurazione, perchè ci hè statu assai esaminatu nantu à questu.
Jenkins cum'è un quadru per l'automatizazione di i prucessi esistenti, perchè hè digià stata attivamente utilizata per i prucessi di sviluppu
Hyper-V cum'è una piattaforma di virtualizazione. Ci hè una quantità di ragiuni chì vanu fora di u scopu di a storia, ma in corta - ùn pudemu micca aduprà i nuvuli, duvemu aduprà u nostru propiu hardware.
Ghjornu n ° 30: Fixing accordi esistenti - Accords as Code
Quandu a pila era chjaru, i preparativi per u muvimentu cuminciaru. Fixing accordi esistenti in forma di codice (Accordu cum'è Code!). Transizione travagliu manuale -> meccanica -> automatizazione.
1. Configurate VMs
Ansible face un grande travagliu di questu. Cù un minimu di movimenti di u corpu pudete piglià u cuntrollu di e cunfigurazioni VM:
Crea un repository git.
Pudemu a lista di VM in inventariu, cunfigurazioni in playbooks è roli.
Avemu stallatu un schiavu jenkins speciale da quale pudete eseguisce Ansible.
Creemu un travagliu è cunfigurà Jenkins.
U primu prucessu hè prestu. L'accordi sò fissi.
2. Crea una nova VM
Tuttu quì ùn era micca assai convenientu. Ùn hè micca assai cunvenutu per creà VM in Hyper-V da Linux. Unu di i tentativi di mecanizà stu prucessu era:
Ansbile si cunnetta via WinRM à l'ospite Windows.
Ansible esegue un script powershell.
L'script Powershell crea una nova VM.
Utilizendu Hyper-V / ScVMM, quandu crea una VM in u SO invitatu, u nome d'ospitu hè cunfiguratu.
Quandu aghjurnà l'affittu DHCP, a VM manda u so hostname.
L'integrazione standard ddns & dhcp in u latu di u Controller di Dominiu cunfigura u record DNS.
Pudete aghjunghje una VM à u vostru inventariu è cunfigurà cù Ansible.
3.Create mudellu VM
Ùn anu micca inventatu nunda quì - anu pigliatu un packer.
Aghjunghjite u packer, kickstart config à u repository git.
Stabbilimentu di un schiavu jenkins speciale cù hyper-v è Packer.
Creemu un travagliu è cunfigurà Jenkins.
Cumu funziona stu ligame:
Packer crea una VM viota è piglia l'ISO.
U VM boots, Packer inserisce u cumandimu in u bootloader per utilizà u nostru schedariu kickstart da un dischettu o http.
Anaconda hè lanciata cù a nostra cunfigurazione, è a cunfigurazione iniziale di u SO hè fatta.
Packer aspetta chì a VM sia dispunibule.
Packer in a VM funziona ansible in modu locale.
Ansible usa esattamente i stessi roli chì travaglia in u passu #1.
Packer esporta u mudellu VM.
Day #75: Refactor l'accordu senza rompe = Test ansible + Testkitchen
Capture cunvenzioni in codice pò esse micca abbastanza. Dopu tuttu, se in l'ins and outs di u prucessu vulete cambià qualcosa, pudete rompe qualcosa. Dunque, in u casu di l'infrastruttura, a prova di sta infrastruttura stessa appare. Per sincronizà a cunniscenza in a squadra, avemu cuminciatu à pruvà roli Ansible. Ùn andaraghju in prufundità perchè... ci hè un articulu chì descrive l'avvenimenti in quellu puntu in u tempu Pruvatemi se pudete o i programatori YML sognu di pruvà Ansible?(spoiler ùn era micca a versione finale è dopu tuttu hè diventatu più cumplicatu Cumu cumincià à pruvà Ansible, refactor u prughjettu in un annu è ùn andate micca pazzi).
Avemu da capisce chì u prucessu di introduzzione di l'infrastruttura ùn era micca l'unicu è ci eranu sottuprogetti laterali. Per esempiu, una dumanda hè ghjunta per lancià a nostra applicazione in openshift è questu risultatu in una ricerca per più di una settimana Lancemu l'applicazione in Openshift è paragunemu strumenti esistenti chì rallentò u prucessu di muvimentu. U risultatu hè chì l'openshift ùn copre micca tutti i bisogni; avete bisognu di hardware reale, o almenu a capacità di ghjucà cù u kernel.
Ghjornu #170: Openshift ùn hè micca adattatu, pigliamu una chance cù Windows Azure Pack?
Hyper-V ùn hè micca assai amichevule, SCVMM ùn face micca assai megliu. Ma ci hè una cosa cum'è Windows Azure Pack, chì hè un add-on à SCVMM è imita Azure. Ma in realtà, u pruduttu pare abbandunatu: a documentazione hà rottu i ligami è hè assai sparse. Ma cum'è parte di u studiu di l'opzioni per simplificà a vita di a nostra nuvola, anu vistu ancu.
Ghjornu #250: Windows Azure Pack ùn hè micca assai bonu. Restemu nantu à SCVMM
Windows Azure Pack pareva promettente, ma hè statu decisu di ùn portà WAP cù e so cumplessità in u sistema per l'abitudine di funzioni innecessarii è stà cun SCVMM.
Ghjornu #360: Manghjendu l'elefante pezzu per pezzu
Solu un annu dopu, a piattaforma per u muvimentu era pronta è u prucessu di muvimentu hà iniziatu. Per questu scopu, un compitu SMART hè statu stabilitu. Avemu verificatu tutte e VM è cuminciamu à calculà a cunfigurazione una per una, a descriverà in Ansible, è copre cù testi.
Ghjornu #450: Chì tipu di sistema avete avutu?
U prucessu stessu ùn hè micca interessante. Hè una rutina, pò esse nutatu chì a maiò parte di e cunfigurazioni eranu relativamente simplici o isomorfichi è sicondu u principiu di Pareto, 80% di e cunfigurazioni VM necessanu 20% di u tempu. Da u listessu principiu, 80% di u tempu hè statu passatu per preparà a mossa è solu 20% in u muvimentu stessu.
Ghjornu #540: Finale
Chì hè accadutu in 18 mesi?
L'accordi sò diventati un codice.
U travagliu manuale -> Mecanizazione -> L'automatizazione.