Jekk l-infrastruttura tal-IT tiegħek tikber malajr wisq, illum jew għada tkun iffaċċjat b'għażla: iżżid b'mod lineari r-riżorsi umani biex tappoġġjaha jew tibda l-awtomazzjoni. Sa ċertu punt, għexna fl-ewwel paradigma, u mbagħad bdiet it-triq twila għall-Infrastructure-as-Code.
Naturalment, NSPK mhix startup, iżda atmosfera bħal din kienet isaltan fil-kumpanija fl-ewwel snin tal-eżistenza tagħha, u dawk kienu snin interessanti ħafna. Jien jisimni
B'mod ġenerali, nistgħu ngħidu li t-tim tagħna jipprovdi 2 prodotti għall-kumpanija. L-ewwel hija l-infrastruttura. Il-posta għandha taħdem, id-DNS għandha taħdem, u l-kontrolluri tad-dominju għandhom iħalluk fis-servers li m'għandhomx jiġġarrfu. Il-pajsaġġ tal-IT tal-kumpanija huwa enormi! Dawn huma sistemi kritiċi tan-negozju u tal-missjoni, ir-rekwiżiti tad-disponibbiltà għal xi wħud huma 99,999. It-tieni prodott huwa s-servers infushom, fiżiċi u virtwali. Dawk eżistenti jeħtieġ li jiġu mmonitorjati, u oħrajn ġodda għandhom jiġu kkunsinnati regolarment lill-klijenti minn ħafna dipartimenti. F'dan l-artikolu nixtieq niffoka fuq kif żviluppajna l-infrastruttura li hija responsabbli għaċ-ċiklu tal-ħajja tas-server.
Il-bidu tat-triq
Fil-bidu tal-vjaġġ tagħna, il-munzell tat-teknoloġija tagħna kien jidher bħal dan:
OS CentOS 7
Kontrolluri tad-Dominju FreeIPA
Awtomazzjoni - Ansible(+Tower), Cobbler
Dan kollu kien jinsab fi 3 oqsma, mifruxa fuq diversi ċentri tad-dejta. F'ċentru tad-dejta wieħed hemm sistemi ta 'uffiċċju u siti ta' ttestjar, fil-bqija hemm PROD.
Il-ħolqien ta' servers f'punt wieħed deher bħal dan:
Fil-mudell VM, CentOS huwa minimu u l-minimu meħtieġ huwa bħall-/etc/resolv.conf korrett, il-bqija jiġi permezz ta 'Ansible.
CMDB - Excel.
Jekk is-server huwa fiżiku, allura minflok ma tikkopja l-magna virtwali, l-OS ġie installat fuqha bl-użu ta 'Cobbler - l-indirizzi MAC tas-server fil-mira huma miżjuda mal-konfigurazzjoni Cobbler, is-server jirċievi indirizz IP permezz ta' DHCP, u mbagħad l-OS huwa miżjud.
Għall-ewwel anke ppruvajna nagħmlu xi tip ta 'ġestjoni tal-konfigurazzjoni f'Cobbler. Iżda maż-żmien, dan beda jġib problemi bil-portabbiltà tal-konfigurazzjonijiet kemm għal ċentri tad-dejta oħra kif ukoll għall-kodiċi Ansible għall-preparazzjoni tal-VMs.
F'dak iż-żmien, ħafna minna ħassew lil Ansible bħala estensjoni konvenjenti ta 'Bash u ma skimp fuq disinji li jużaw shell u sed. B'mod ġenerali Bashsible. Dan fl-aħħar wassal għall-fatt li jekk il-playbook għal xi raġuni ma jaħdimx fuq is-server, kien aktar faċli li tħassar is-server, tiffissa l-playbook u terġa 'tħaddem. Essenzjalment ma kien hemm l-ebda verżjoni tal-iskripts, l-ebda portabbiltà tal-konfigurazzjonijiet.
Pereżempju, ridna nibdlu xi konfigurazzjoni fuq is-servers kollha:
- Aħna nibdlu l-konfigurazzjoni fuq servers eżistenti fis-segment loġiku/ċentru tad-dejta. Xi drabi mhux f'ġurnata waħda - ir-rekwiżiti ta 'aċċessibilità u l-liġi ta' numri kbar ma jippermettux li l-bidliet kollha jiġu applikati f'daqqa. U xi bidliet huma potenzjalment distruttivi u jeħtieġu li terġa 'tibda xi ħaġa - mis-servizzi għall-OS innifsu.
- Iffissarha f'Ansible
- Aħna nirranġawha f'Cobbler
- Irrepeti N darbiet għal kull segment loġiku/ċentru tad-dejta
Sabiex il-bidliet kollha jimxu bla xkiel, kien meħtieġ li jitqiesu ħafna fatturi, u l-bidliet iseħħu kontinwament.
- Refactoring kodiċi ansible, fajls ta 'konfigurazzjoni
- Nibdlu l-aħjar prattiki interni
- Bidliet ibbażati fuq ir-riżultati tal-analiżi tal-inċidenti/inċidenti
- Nibdlu l-istandards tas-sigurtà, kemm interni kif ukoll esterni. Pereżempju, PCI DSS jiġi aġġornat b'rekwiżiti ġodda kull sena
It-tkabbir fl-infrastruttura u l-bidu tal-vjaġġ
In-numru ta 'servers/dominji loġiċi/ċentri tad-dejta kiber, u magħhom in-numru ta' żbalji fil-konfigurazzjonijiet. F'xi punt, wasalna għal tliet direzzjonijiet li fihom jeħtieġ li tiġi żviluppata l-ġestjoni tal-konfigurazzjoni:
- Awtomazzjoni. L-iżball uman f'operazzjonijiet ripetittivi għandu jiġi evitat kemm jista' jkun.
- Ripetibbiltà. Huwa ħafna aktar faċli li timmaniġġja l-infrastruttura meta tkun prevedibbli. Il-konfigurazzjoni tas-servers u l-għodda għall-preparazzjoni tagħhom għandha tkun l-istess kullimkien. Dan huwa importanti wkoll għat-timijiet tal-prodott - wara l-ittestjar, l-applikazzjoni għandha tkun garantita li tispiċċa f'ambjent ta 'produzzjoni kkonfigurat b'mod simili għall-ambjent tat-test.
- Sempliċità u trasparenza biex isiru bidliet għall-ġestjoni tal-konfigurazzjoni.
Fadal li żżid ftit għodod.
Aħna għażilna GitLab CE bħala r-repożitorju tal-kodiċi tagħna, mhux l-inqas għall-moduli CI/CD integrati tiegħu.
Vault ta 'sigrieti - Hashicorp Vault, incl. għall-API kbira.
Konfigurazzjonijiet tal-ittestjar u rwoli ansible – Molecule+Testinfra. It-testijiet imorru ħafna aktar malajr jekk tikkonnettja ma 'mitogen ansible. Fl-istess ħin, bdejna niktbu CMDB u orkestratur tagħna stess għall-iskjerament awtomatiku (fl-istampa ta 'hawn fuq Cobbler), iżda din hija storja kompletament differenti, li l-kollega tiegħi u l-iżviluppatur ewlieni ta' dawn is-sistemi se jgħidu fil-futur.
L-għażla tagħna:
Molekula + Testinfra
Ansible + Torri + AWX
Dinja tas-Servers + DITNET (Żvilupp proprju)
Cobbler
Gitlab + GitLab runner
Hashicorp Vault
Mill-mod, dwar ir-rwoli ansible. Għall-ewwel kien hemm wieħed biss, iżda wara diversi refactorings kien hemm minnhom 17. Nirrakkomanda bil-qawwa li tkisser il-monolith f'rwoli idempotenti, li mbagħad jistgħu jiġu mnedija separatament, barra minn hekk, tista 'żżid tikketti. Qsamna r-rwoli skont il-funzjonalità - netwerk, illoggjar, pakketti, hardware, molekula eċċ. B'mod ġenerali, segwejna l-istrateġija hawn taħt. Ma ninsistix li din hija l-unika verità, iżda ħadmet għalina.
- Ikkopjar servers mill-"immaġni tad-deheb" huwa ħażin!L-iżvantaġġ ewlieni huwa li ma tafx eżattament f'liema stat jinsabu l-immaġini issa, u li l-bidliet kollha se jaslu għall-immaġini kollha fl-irziezet kollha tal-virtwalizzazzjoni.
- Uża l-fajls tal-konfigurazzjoni default għall-minimu u taqbel ma' dipartimenti oħra li inti responsabbli għall-fajls tas-sistema prinċipaliper eżempju:
- Ħalli /etc/sysctl.conf vojt, is-settings għandhom ikunu biss f'/etc/sysctl.d/. Default tiegħek f'fajl wieħed, personalizzat għall-applikazzjoni f'ieħor.
- Uża fajls override biex teditja unitajiet systemd.
- Istampa l-konfigurazzjonijiet kollha u inkludihom kollha; jekk possibbli, l-ebda sed jew l-analogi tiegħu fil-playbooks
- Rifactoring tal-kodiċi tas-sistema tal-ġestjoni tal-konfigurazzjoni:
- Aqsam il-kompiti f'entitajiet loġiċi u erġa' ikteb il-monolith fi rwoli
- Uża linters! Ansible-lint, yaml-lint, eċċ
- Ibdel l-approċċ tiegħek! Ebda bashsible. Huwa meħtieġ li jiġi deskritt l-istat tas-sistema
- Għar-rwoli kollha Ansible għandek bżonn tikteb testijiet fil-molekula u tiġġenera rapporti darba kuljum.
- Fil-każ tagħna, wara li ppreparaw it-testijiet (li minnhom hemm aktar minn 100), instabu madwar 70000 żball. Dam diversi xhur biex jirranġaha.
L-implimentazzjoni tagħna
Allura, ir-rwoli ansible kienu lesti, mudellati u kkontrollati minn linters. U anke gits jitrabbew kullimkien. Iżda l-kwistjoni tal-kunsinna ta 'kodiċi affidabbli għal segmenti differenti baqgħet miftuħa. Iddeċidejna li nissinkronizzaw mal-iskripts. Jidher hekk:
Wara li tasal il-bidla, CI titnieda, jinħoloq server tat-test, ir-rwoli jiġu mxerrda, u ttestjati mill-molekula. Jekk kollox huwa ok, il-kodiċi tmur għall-fergħa prod. Iżda aħna ma napplikawx kodiċi ġdid għal servers eżistenti fil-magna. Dan huwa tip ta 'tapp li huwa meħtieġ għal disponibbiltà għolja tas-sistemi tagħna. U meta l-infrastruttura ssir enormi, tidħol fis-seħħ il-liġi tan-numri kbar – anki jekk tkun ċert li l-bidla ma tagħmilx ħsara, tista’ twassal għal konsegwenzi koroh.
Hemm ukoll ħafna għażliet għall-ħolqien ta 'servers. Spiċċajna għażilna skripts Python personalizzati. U għal CI ansible:
- name: create1.yml - Create a VM from a template
vmware_guest:
hostname: "{{datacenter}}".domain.ru
username: "{{ username_vc }}"
password: "{{ password_vc }}"
validate_certs: no
cluster: "{{cluster}}"
datacenter: "{{datacenter}}"
name: "{{ name }}"
state: poweredon
folder: "/{{folder}}"
template: "{{template}}"
customization:
hostname: "{{ name }}"
domain: domain.ru
dns_servers:
- "{{ ipa1_dns }}"
- "{{ ipa2_dns }}"
networks:
- name: "{{ network }}"
type: static
ip: "{{ip}}"
netmask: "{{netmask}}"
gateway: "{{gateway}}"
wake_on_lan: True
start_connected: True
allow_guest_control: True
wait_for_ip_address: yes
disk:
- size_gb: 1
type: thin
datastore: "{{datastore}}"
- size_gb: 20
type: thin
datastore: "{{datastore}}"
Dan hu li wasalna għalih, is-sistema tkompli tgħix u tiżviluppa.
- 17 Rwoli Ansible għat-twaqqif tas-server. Kull wieħed mir-rwoli huwa ddisinjat biex isolvi kompitu loġiku separat (logging, verifika, awtorizzazzjoni tal-utent, monitoraġġ, eċċ.).
- Ittestjar tar-rwol. Molekula + TestInfra.
- Żvilupp proprju: CMDB + Orkestratur.
- Il-ħin tal-ħolqien tas-server huwa ta '~30 minuta, awtomatizzat u prattikament indipendenti mill-kju tal-kompiti.
- L-istess stat/isem tal-infrastruttura fis-segmenti kollha - playbooks, repożitorji, elementi ta 'virtwalizzazzjoni.
- Kontroll ta 'kuljum tal-istatus tas-server bil-ġenerazzjoni ta' rapporti dwar diskrepanzi mal-istandard.
Nittama li l-istorja tiegħi tkun utli għal dawk li qegħdin fil-bidu tal-vjaġġ tagħhom. Liema munzell ta 'awtomazzjoni tuża?
Sors: www.habr.com