Trilleris par serveru iestatīŔanu bez brīnumiem, izmantojot konfigurācijas pārvaldību

Tuvojās Jaunais gads. Bērni visā valstÄ« jau bija sÅ«tÄ«juÅ”i vēstules Ziemassvētku vecÄ«tim vai sarÅ«pējuÅ”i sev dāvanas, un viņu galvenais izpildÄ«tājs, viens no lielākajiem mazumtirgotājiem, gatavojās izpārdoÅ”anas apoteozei. DecembrÄ« tā datu centra slodze palielinās vairākas reizes. Tāpēc uzņēmums nolēma modernizēt datu centru un ekspluatācijā nodot vairākus desmitus jaunu serveru, nevis iekārtas, kurām tuvojās kalpoÅ”anas laika beigas. Ar to pasaka beidzas uz virpuļojoÅ”u sniegpārslu fona, un sākas trilleris.

Trilleris par serveru iestatīŔanu bez brīnumiem, izmantojot konfigurācijas pārvaldību
Iekārtas objektā ieradās vairākus mēneÅ”us pirms pārdoÅ”anas maksimuma. Operāciju dienests, protams, zina, kā un ko konfigurēt serveros, lai tos ievestu ražoÅ”anas vidē. Bet mums vajadzēja to automatizēt un novērst cilvēcisko faktoru. Turklāt serveri tika nomainÄ«ti pirms uzņēmumam kritisko SAP sistēmu kopas migrācijas.

Jaunu serveru nodoÅ”ana ekspluatācijā bija stingri saistÄ«ta ar termiņu. Un tā pārvietoÅ”ana nozÄ«mēja apdraudēt gan miljardu dāvanu nosÅ«tÄ«Å”anu, gan sistēmu migrāciju. Pat komanda, kuras sastāvā bija Tēvs Frosts un Ziemassvētku vecÄ«tis, nevarēja mainÄ«t datumu - SAP sistēmu noliktavas pārvaldÄ«Å”anai varat nodot tikai reizi gadā. No 31. decembra lÄ«dz 1. janvārim uz 20 stundām darbu pārtrauc mazumtirgotāja milzÄ«gās noliktavas, kopumā 15 futbola laukumu lielumā. Un tas ir vienÄ«gais laika periods sistēmas pārvietoÅ”anai. IevieÅ”ot serverus, mums nebija vietas kļūdām.

TeikŔu skaidri: mans stāsts atspoguļo rīkus un konfigurācijas pārvaldības procesu, ko izmanto mūsu komanda.

Konfigurācijas pārvaldības komplekss sastāv no vairākiem līmeņiem. Galvenā sastāvdaļa ir CMS sistēma. Rūpnieciskajā darbībā viena līmeņa neesamība neizbēgami novestu pie nepatīkamiem brīnumiem.

OS instalācijas pārvaldība

Pirmais lÄ«menis ir sistēma operētājsistēmu instalÄ“Å”anas pārvaldÄ«bai fiziskajos un virtuālajos serveros. Tas rada pamata OS konfigurācijas, novērÅ”ot cilvēcisko faktoru.

Izmantojot Å”o sistēmu, mēs saņēmām standarta servera gadÄ«jumus ar OS, kas piemērota turpmākai automatizācijai. ā€œIeleÅ”anasā€ laikā viņi saņēma minimālo vietējo lietotāju un publisko SSH atslēgu komplektu, kā arÄ« konsekventu OS konfigurāciju. Mēs varējām bÅ«t pārliecināti, ka pārvaldÄ«sim serverus, izmantojot SPS, un bijām pārliecināti, ka OS lÄ«menÄ« nav nekādu pārsteigumu.

Instalācijas pārvaldÄ«bas sistēmas "maksimālais" uzdevums ir automātiski konfigurēt serverus no BIOS/programmaparatÅ«ras lÄ«meņa uz OS. Å eit daudz kas ir atkarÄ«gs no aprÄ«kojuma un iestatÄ«Å”anas uzdevumiem. AttiecÄ«bā uz neviendabÄ«gu aprÄ«kojumu varat apsvērt REDFISH API. Ja visa aparatÅ«ra ir no viena ražotāja, tad bieži vien ērtāk ir izmantot gatavus pārvaldÄ«bas rÄ«kus (piemēram, HP ILO Amplifier, DELL OpenManage u.c.).

Lai instalētu OS uz fiziskajiem serveriem, mēs izmantojām labi zināmo Cobbler, kas definē instalācijas profilu kopu, kas saskaņota ar darbÄ«bas dienestu. Pievienojot infrastruktÅ«rai jaunu serveri, inženieris sasaistÄ«ja servera MAC adresi ar nepiecieÅ”amo profilu programmā Cobbler. Pirmoreiz startējot tÄ«klā, serveris saņēma pagaidu adresi un jaunu OS. Pēc tam tas tika pārsÅ«tÄ«ts uz mērÄ·a VLAN/IP adresÄ“Å”anu un turpināja darbu tur. Jā, VLAN maiņa prasa laiku un prasa saskaņoÅ”anu, taču tā nodroÅ”ina papildu aizsardzÄ«bu pret nejauÅ”u servera instalÄ“Å”anu ražoÅ”anas vidē.

Mēs izveidojām virtuālos serverus, pamatojoties uz veidnēm, kas sagatavotas, izmantojot HashiŠ”orp Packer. Iemesls bija tas pats: lai novērstu iespējamās cilvēka kļūdas, instalējot OS. Bet, atŔķirÄ«bā no fiziskajiem serveriem, Packer novērÅ” vajadzÄ«bu pēc PXE, tÄ«kla sāknÄ“Å”anas un VLAN izmaiņām. Tas ir padarÄ«jis vienkārŔāku un vienkārŔāku virtuālo serveru izveidi.

Trilleris par serveru iestatīŔanu bez brīnumiem, izmantojot konfigurācijas pārvaldību
RÄ«si. 1. Operētājsistēmu instalÄ“Å”anas vadÄ«Å”ana.

Noslēpumu pārvaldÄ«Å”ana

Jebkura konfigurācijas pārvaldÄ«bas sistēma satur datus, kas ir jāslēpj no parastajiem lietotājiem, bet ir nepiecieÅ”ami sistēmu sagatavoÅ”anai. Tās ir vietējo lietotāju un pakalpojumu kontu paroles, sertifikātu atslēgas, dažādi API marÄ·ieri utt. Tos parasti sauc par ā€œnoslēpumiemā€.

Ja jau paŔā sākumā nenosakāt, kur un kā uzglabāt Å”os noslēpumus, tad atkarÄ«bā no informācijas droŔības prasÄ«bu nopietnÄ«bas ir iespējamas Ŕādas glabāŔanas metodes:

  • tieÅ”i konfigurācijas kontroles kodā vai failos repozitorijā;
  • specializētos konfigurācijas pārvaldÄ«bas rÄ«kos (piemēram, Ansible Vault);
  • CI/CD sistēmās (Jenkins/TeamCity/GitLab/u.c.) vai konfigurācijas pārvaldÄ«bas sistēmās (Ansible Tower/Ansible AWX);
  • noslēpumus var pārsÅ«tÄ«t arÄ« ā€œmanuāliā€. Piemēram, tie ir izvietoti noteiktā vietā, un pēc tam tos izmanto konfigurācijas pārvaldÄ«bas sistēmas;
  • dažādas iepriekÅ” minēto kombinācijas.

Katrai metodei ir savi trūkumi. Galvenais no tiem ir pieejas noslēpumiem politikas trūkums: nav iespējams vai grūti noteikt, kas var izmantot noteiktus noslēpumus. Vēl viens trūkums ir piekļuves audita un pilna dzīves cikla trūkums. Kā ātri nomainīt, piemēram, publisko atslēgu, kas ierakstīta kodā un vairākās saistītās sistēmās?

Mēs izmantojām centralizēto slepeno krātuvi HashiCorp Vault. Tas mums ļāva:

  • glabā noslēpumus droŔībā. Tie ir Å”ifrēti, un pat ja kāds iegÅ«s piekļuvi Vault datu bāzei (piemēram, atjaunojot to no dublējuma), viņŔ nevarēs nolasÄ«t tur glabātos noslēpumus;
  • organizēt politikas par piekļuvi noslēpumiem. Lietotājiem un lietojumprogrammām ir pieejami tikai tiem ā€œpieŔķirtieā€ noslēpumi;
  • audita piekļuvi noslēpumiem. Visas darbÄ«bas ar noslēpumiem tiek ierakstÄ«tas Vault audita žurnālā;
  • organizēt pilnvērtÄ«gu ā€œdzÄ«ves cikluā€ darbam ar noslēpumiem. Tos var izveidot, atsaukt, noteikt derÄ«guma termiņu utt.
  • viegli integrējams ar citām sistēmām, kurām nepiecieÅ”ama piekļuve noslēpumiem;
  • kā arÄ« izmantot pilnÄ«gu Å”ifrÄ“Å”anu, vienreizējas OS un datu bāzes paroles, pilnvaroto centru sertifikātus utt.

Tagad pāriesim pie centrālās autentifikācijas un autorizācijas sistēmas. Bez tā varēja iztikt, taču lietotāju administrÄ“Å”ana daudzās saistÄ«tās sistēmās ir pārāk nenozÄ«mÄ«ga. Mēs esam konfigurējuÅ”i autentifikāciju un autorizāciju, izmantojot LDAP pakalpojumu. Pretējā gadÄ«jumā Vault bÅ«tu nepārtraukti jāizsniedz un jāseko lÄ«dzi lietotāju autentifikācijas marÄ·ieriem. Un lietotāju dzÄ“Å”ana un pievienoÅ”ana pārvērstos par meklējumu ā€œvai es visur izveidoju/izdzēsu Å”o lietotāja kontu?ā€

Mēs pievienojam mūsu sistēmai vēl vienu līmeni: noslēpumu pārvaldība un centrālā autentifikācija/autorizācija:

Trilleris par serveru iestatīŔanu bez brīnumiem, izmantojot konfigurācijas pārvaldību
Rīsi. 2. Noslēpumu pārvaldība.

Konfigurācijas pārvaldība

Mēs nonācām pie kodola ā€“ CMS sistēmas. MÅ«su gadÄ«jumā Ŕī ir Ansible un Red Hat Ansible AWX kombinācija.

Ansible vietā var izmantot Chef, Puppet, SaltStack. Mēs izvēlējāmies Ansible, pamatojoties uz vairākiem kritērijiem.

  • Pirmkārt, tā ir daudzpusÄ«ba. Gatavu moduļu komplekts vadÄ«bai rada iespaidu. Un, ja jums ar to nepietiek, varat meklēt GitHub un Galaxy.
  • Otrkārt, pārvaldÄ«tajās iekārtās nav jāinstalē un jāatbalsta aÄ£enti, jāpierāda, ka tie netraucē slodzei, un jāapstiprina ā€œgrāmatzÄ«mjuā€ neesamÄ«ba.
  • TreÅ”kārt, Ansible ir zema barjera ienākÅ”anai. Kompetents inženieris burtiski uzrakstÄ«s darba rokasgrāmatu pirmajā darba dienā ar produktu.

Taču ar Ansible vien ražoÅ”anas vidē mums nepietika. Pretējā gadÄ«jumā rastos daudzas problēmas ar piekļuves ierobežoÅ”anu un administratoru darbÄ«bas auditÄ“Å”anu. Kā ierobežot piekļuvi? Galu galā katrai nodaļai vajadzēja pārvaldÄ«t (lasi: palaist Ansible playbook) ā€œsavuā€ serveru komplektu. Kā ļaut tikai noteiktiem darbiniekiem vadÄ«t noteiktas Ansible rokasgrāmatas? Vai arÄ« kā izsekot, kurÅ” palaidis rokasgrāmatu, neiestatot daudz vietējo zināŔanu par serveriem un aprÄ«kojumu, kurā darbojas Ansible?

Lauvas tiesu no Ŕādiem jautājumiem atrisina Red Hat Ansible tornis, vai viņa atvērtā pirmkoda augÅ”upējais projekts Iespējamais AWX. Tāpēc mēs to izvēlējāmies klientam.

Un vēl viens pieskāriens mūsu CMS sistēmas portretam. Iespējamā rokasgrāmata ir jāglabā kodu krātuvju pārvaldības sistēmās. Mums tas ir GitLab CE.

Tātad paÅ”as konfigurācijas pārvalda Ansible/Ansible AWX/GitLab kombinācija (skat. 3. att.). Protams, AWX/GitLab ir integrēts ar vienu autentifikācijas sistēmu, un Ansible playbook ir integrēts ar HashiCorp Vault. Konfigurācijas nonāk ražoÅ”anas vidē tikai caur Ansible AWX, kurā ir norādÄ«ti visi ā€œspēles noteikumiā€: kurÅ” ko var konfigurēt, kur iegÅ«t CMS konfigurācijas pārvaldÄ«bas kodu utt.

Trilleris par serveru iestatīŔanu bez brīnumiem, izmantojot konfigurācijas pārvaldību
Rīsi. 3. Konfigurācijas pārvaldība.

Testu vadība

MÅ«su konfigurācija ir parādÄ«ta koda formā. Tāpēc mēs esam spiesti spēlēt pēc tādiem paÅ”iem noteikumiem kā programmatÅ«ras izstrādātāji. Mums vajadzēja organizēt izstrādes, nepārtrauktas testÄ“Å”anas, piegādes un konfigurācijas koda pielietoÅ”anas procesus ražoÅ”anas serveriem.

Ja tas netiek izdarÄ«ts nekavējoties, konfigurācijai rakstÄ«tās lomas vai nu vairs netiks atbalstÄ«tas un modificētas, vai arÄ« vairs netiktu palaists ražoÅ”anā. Å o sāpju zāles ir zināmas, un tas ir sevi pierādÄ«jis Å”ajā projektā:

  • uz katru lomu attiecas vienÄ«bas testi;
  • testi tiek palaisti automātiski ikreiz, kad tiek veiktas izmaiņas kodā, kas pārvalda konfigurācijas;
  • izmaiņas konfigurācijas pārvaldÄ«bas kodā tiek izlaistas ražoÅ”anas vidē tikai pēc sekmÄ«gas visu testu nokārtoÅ”anas un koda pārskatÄ«Å”anas.

Kodu izstrāde un konfigurācijas pārvaldÄ«ba ir kļuvusi mierÄ«gāka un paredzamāka. Lai organizētu nepārtrauktu testÄ“Å”anu, mēs izmantojām GitLab CI/CD rÄ«ku komplektu un paņēmām Iespējamā molekula.

Ikreiz, kad notiek izmaiņas konfigurācijas pārvaldības kodā, GitLab CI/CD izsauc Molecule:

  • tā pārbauda koda sintaksi,
  • paceļ Docker konteineru,
  • piemēro modificēto kodu izveidotajam konteineram,
  • pārbauda lomu idempotencei un veic Ŕī koda testus (detalitāte Å”eit ir iespējamā loma lÄ«menÄ«, skatiet 4. attēlu).

Mēs piegādājām konfigurācijas ražoÅ”anas vidē, izmantojot Ansible AWX. Operāciju inženieri piemēroja konfigurācijas izmaiņas, izmantojot iepriekÅ” noteiktas veidnes. AWX neatkarÄ«gi ā€œpieprasÄ«jaā€ jaunāko koda versiju no GitLab galvenās filiāles katru reizi, kad tā tika izmantota. Tādā veidā mēs izslēdzām nepārbaudÄ«ta vai novecojuÅ”a koda izmantoÅ”anu ražoÅ”anas vidē. Protams, kods iekļuva galvenajā zarā tikai pēc testÄ“Å”anas, pārskatÄ«Å”anas un apstiprināŔanas.

Trilleris par serveru iestatīŔanu bez brīnumiem, izmantojot konfigurācijas pārvaldību
Rīsi. 4. Automātiska lomu pārbaude GitLab CI/CD.

Ir arÄ« problēma, kas saistÄ«ta ar ražoÅ”anas sistēmu darbÄ«bu. Reālajā dzÄ«vē ir ļoti grÅ«ti veikt konfigurācijas izmaiņas, izmantojot tikai CMS kodu. Avārijas situācijas rodas, kad inženierim jāmaina konfigurācija ā€œÅ”eit un tagadā€, negaidot koda rediģēŔanu, testÄ“Å”anu, apstiprināŔanu utt.

Rezultātā manuālu izmaiņu dēļ viena veida aprÄ«kojuma konfigurācijā parādās neatbilstÄ«bas (piemēram, sysctl iestatÄ«jumi HA klastera mezglos tiek konfigurēti atŔķirÄ«gi). Vai arÄ« faktiskā aprÄ«kojuma konfigurācija atŔķiras no CMS kodā norādÄ«tās.

Tāpēc papildus nepārtrauktai testÄ“Å”anai mēs pārbaudām ražoÅ”anas vidēs konfigurācijas neatbilstÄ«bas. Mēs izvēlējāmies vienkārŔāko variantu: CMS konfigurācijas koda palaiÅ”anu ā€œsausās darbÄ«basā€ režīmā, tas ir, neveicot izmaiņas, bet paziņojot par visām neatbilstÄ«bām starp plānoto un faktisko konfigurāciju. Mēs to ieviesām, periodiski palaižot visas Ansible rokasgrāmatas ar opciju ā€œā€” checkā€ ražoÅ”anas serveros. Kā vienmēr, Ansible AWX ir atbildÄ«gs par rokasgrāmatas palaiÅ”anu un atjaunināŔanu (skatiet 5. attēlu):

Trilleris par serveru iestatīŔanu bez brīnumiem, izmantojot konfigurācijas pārvaldību
RÄ«si. 5. Pārbauda Ansible AWX konfigurācijas neatbilstÄ«bas.

Pēc pārbaudēm AWX nosÅ«ta administratoriem neatbilstÄ«bas ziņojumu. Viņi izpēta problemātisko konfigurāciju un pēc tam labo to, izmantojot pielāgotas rokasgrāmatas. Tādā veidā mēs uzturam konfigurāciju ražoÅ”anas vidē, un CMS vienmēr ir atjaunināta un sinhronizēta. Tas novērÅ” nepatÄ«kamus ā€œbrÄ«numusā€, kad CMS kods tiek izmantots ā€œražoÅ”anasā€ serveros.

Tagad mums ir svarÄ«gs testÄ“Å”anas slānis, kas sastāv no Ansible AWX/GitLab/Molecule (6. attēls).

Trilleris par serveru iestatīŔanu bez brīnumiem, izmantojot konfigurācijas pārvaldību
Rīsi. 6. Testu vadība.

GrÅ«ti? Es nestrÄ«dos. Bet Ŕāds konfigurācijas pārvaldÄ«bas komplekss ir kļuvis par visaptveroÅ”u atbildi uz daudziem jautājumiem, kas saistÄ«ti ar servera konfigurācijas automatizāciju. Tagad mazumtirgotāja standarta serveriem vienmēr ir stingri noteikta konfigurācija. CMS, atŔķirÄ«bā no inženiera, neaizmirsÄ«s pievienot nepiecieÅ”amos iestatÄ«jumus, izveidot lietotājus un veikt desmitiem vai simtiem nepiecieÅ”amo iestatÄ«jumu.

MÅ«sdienās serveru un vides iestatÄ«jumos nav ā€œslepeno zināŔanuā€. Visas nepiecieÅ”amās funkcijas ir atspoguļotas rokasgrāmatā. Vairs nav radoÅ”uma un neskaidru norādÄ«jumu: ā€œInstalējiet to kā parasto Oracle, taču jums ir jānorāda pāris sysctl iestatÄ«jumi un jāpievieno lietotāji ar nepiecieÅ”amo UID. Pajautājiet puiÅ”iem, kas strādā, viņi zina'.

Iespēja atklāt konfigurācijas neatbilstÄ«bas un proaktÄ«vi tās labot nodroÅ”ina sirdsmieru. Bez konfigurācijas pārvaldÄ«bas sistēmas tas parasti izskatās savādāk. Problēmas krājas, lÄ«dz kādu dienu tās ā€œizÅ”aujā€ ražoÅ”anā. Pēc tam tiek veikta apskate, konfigurācijas tiek pārbaudÄ«tas un labotas. Un cikls atkārtojas vēlreiz

Un, protams, mēs paātrinājām serveru palaiÅ”anu no vairākām dienām lÄ«dz stundām.

PaŔā Vecgada vakarā, kad bērni priecÄ«gi izsaiņoja dāvanas un pieauguÅ”ie izteica vēlmes, zvanot, mÅ«su inženieri migrēja SAP sistēmu uz jauniem serveriem. Pat Ziemassvētku vecÄ«tis teiks, ka vislabākie brÄ«numi ir tie, kas ir labi sagatavoti.

PS MÅ«su komanda bieži saskaras ar faktu, ka klienti vēlas pēc iespējas vienkārŔāk atrisināt konfigurācijas pārvaldÄ«bas problēmas. Ideālā gadÄ«jumā kā uz burvju mājienu ā€“ ar vienu instrumentu. Bet dzÄ«vē viss ir sarežģītāk (jā, sudraba lodes atkal netika piegādātas): jums ir jāizveido viss process, izmantojot klienta komandai ērtus rÄ«kus.

Autors: Sergejs Artemovs, nodaļas arhitekts DevOps risinājumi "Reaktīvās informācijas sistēmas"

Avots: www.habr.com

Pievieno komentāru