{"id":90386,"date":"2020-07-31T13:42:20","date_gmt":"2020-07-31T11:42:20","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/triller-o-nastrojke-serverov-bez-chudes-s-configuration-management"},"modified":"2020-07-31T13:42:20","modified_gmt":"2020-07-31T11:42:20","slug":"triller-o-nastrojke-serverov-bez-chudes-s-configuration-management","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/triller-o-nastrojke-serverov-bez-chudes-s-configuration-management","title":{"rendered":"Thriller o konfiguracji serwer\u00f3w bez cud\u00f3w z Configuration Management","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Zbli\u017ca\u0142 si\u0119 Nowy Rok. Dzieci w ca\u0142ym kraju ju\u017c wys\u0142a\u0142y listy do Miko\u0142aja lub wymy\u015bli\u0142y sobie prezenty, a g\u0142\u00f3wny wykonawca ich \u017cycze\u0144 \u2014 jeden z du\u017cych detalist\u00f3w \u2014 przygotowywa\u0142 si\u0119 do szczytu sprzeda\u017cy. W grudniu obci\u0105\u017cenie jego centrum danych wzrasta wielokrotnie. Dlatego firma postanowi\u0142a zmodernizowa\u0107 data center i wprowadzi\u0107 do u\u017cytku kilka dziesi\u0119cioletnich nowych serwer\u00f3w zamiast sprz\u0119tu, kt\u00f3rego okres eksploatacji dobiega\u0142 ko\u0144ca. Na tym ko\u0144czy si\u0119 wprowadzenie w tle wiruj\u0105cych p\u0142atk\u00f3w \u015bniegu, a zaczyna si\u0119 thriller. <\/p>\n<p><img decoding=\"async\" alt=\"Thriller o konfiguracji serwer\u00f3w bez cud\u00f3w z Configuration Management\" src=\"\/wp-content\/uploads\/2020\/07\/ebc2128d73e9a0e7f1e383b4b04ee492.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSprz\u0119t dotar\u0142 na miejsce kilka miesi\u0119cy przed szczytem sprzeda\u017cy. S\u0142u\u017cba eksploatacyjna wie, jak i co skonfigurowa\u0107 na serwerach, aby wprowadzi\u0107 je do \u015brodowiska produkcyjnego. Musieli\u015bmy jednak zautomatyzowa\u0107 ten proces i wyeliminowa\u0107 czynnik ludzki. Ponadto serwery zast\u0119powa\u0142y przed migracj\u0105 zestaw system\u00f3w SAP, kt\u00f3re by\u0142y krytyczne dla firmy. <\/p>\n<p>Wprowadzenie nowych serwer\u00f3w by\u0142o \u015bci\u015ble zwi\u0105zane z ostatecznym terminem. Przesuni\u0119cie go oznacza\u0142oby zagro\u017cenie dla wysy\u0142ki miliarda prezent\u00f3w oraz migracji system\u00f3w. Zmiana daty nie by\u0142aby mo\u017cliwa, nawet dla zespo\u0142u w sk\u0142adzie Miko\u0142aja, \u015aw. Miko\u0142aja \u2014 przeniesienie systemu SAP do zarz\u0105dzania magazynem mo\u017cna wykona\u0107 tylko raz w roku. Od 31 grudnia do 1 stycznia ogromne magazyny detalisty, zajmuj\u0105ce powierzchni\u0119 r\u00f3wn\u0105 20 boiskom pi\u0142karskim, wstrzymuj\u0105 swoj\u0105 dzia\u0142alno\u015b\u0107 na 15 godzin. I to jest jedyny czas na przeniesienie systemu. Nie mieli\u015bmy marginesu b\u0142\u0119du przy wprowadzaniu serwer\u00f3w. <\/p>\n<p>Wyja\u015bni\u0119 od razu: moja opowie\u015b\u0107 odzwierciedla narz\u0119dzia i proces zarz\u0105dzania konfiguracjami, kt\u00f3re stosuje nasz zesp\u00f3\u0142.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nKompleks zarz\u0105dzania konfiguracjami sk\u0142ada si\u0119 z kilku poziom\u00f3w. Kluczowym komponentem jest system CMS. W przypadku eksploatacji przemys\u0142owej brak jednego z poziom\u00f3w nieuchronnie prowadzi\u0142by do nieprzyjemnych niespodzianek.<\/p>\n<h1>Zarz\u0105dzanie instalacj\u0105 systemu operacyjnego<\/h1>\n<p>\nPierwszy poziom to system zarz\u0105dzania instalacj\u0105 system\u00f3w operacyjnych na fizycznych i wirtualnych serwerach. Tworzy podstawowe konfiguracje systemu operacyjnego, eliminuj\u0105c czynnik ludzki. <\/p>\n<p>Dzi\u0119ki temu systemowi otrzymywali\u015bmy typowe i gotowe do dalszej automatyzacji modele serwer\u00f3w z systemem operacyjnym. Podczas \"rozlewu\" otrzymywa\u0142y one minimalny zestaw lokalnych u\u017cytkownik\u00f3w oraz publicznych kluczy SSH, a tak\u017ce zgodn\u0105 konfiguracj\u0119 systemu operacyjnego. Mogli\u015bmy zagwarantowa\u0107 zarz\u0105dzanie serwerami za po\u015brednictwem CMS i byli\u015bmy pewni, \u017ce \"na dole\", na poziomie systemu operacyjnego, nie ma niespodzianek. <\/p>\n<p>Zadanie \"maksimum\" dla systemu zarz\u0105dzania instalacj\u0105 polega na automatycznym konfigurowaniu serwer\u00f3w od poziomu BIOS\/Firmware do systemu operacyjnego. Wiele zale\u017cy tutaj od sprz\u0119tu i zada\u0144 konfiguracyjnych. Dla heterogenicznego sprz\u0119tu mo\u017cna rozwa\u017cy\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.dmtf.org\/standards\/redfish\">REDFISH API<\/a><\/noindex>. Je\u015bli ca\u0142y \"hardware\" pochodzi od jednego dostawcy, cz\u0119sto wygodniej jest u\u017cywa\u0107 gotowych narz\u0119dzi do zarz\u0105dzania (na przyk\u0142ad HP ILO Amplifier, DELL OpenManage itd.).<\/p>\n<p>Do instalacji systemu operacyjnego na fizycznych serwerach u\u017cywali\u015bmy znanego wszystkim Cobblera, w kt\u00f3rym okre\u015blono zestaw profili instalacji zgodnych z us\u0142ug\u0105 operacyjn\u0105. Podczas dodawania nowego serwera do infrastruktury in\u017cynier przypisywa\u0142 adres MAC serwera do wymaganego profilu w Cobblerze. Przy pierwszym rozruchu przez sie\u0107 serwer otrzymywa\u0142 tymczasowy adres oraz nowy system operacyjny. Nast\u0119pnie przenoszono go do docelowej VLAN\/adresacji IP i kontynuowano prac\u0119 ju\u017c tam. Tak, zmiana VLAN zajmuje czas i wymaga uzgodnienia, ale zapewnia dodatkow\u0105 ochron\u0119 przed przypadkow\u0105 instalacj\u0105 serwera w \u015brodowisku produkcyjnym.<\/p>\n<p>Wirtualne serwery tworzyli\u015bmy na podstawie szablon\u00f3w przygotowanych za pomoc\u0105 HashiCorp Packer. Pow\u00f3d by\u0142 ten sam: aby zapobiec mo\u017cliwym b\u0142\u0119dom ludzkim podczas instalacji systemu operacyjnego. Jednak w przeciwie\u0144stwie do fizycznych serwer\u00f3w, Packer pozwala na niestosowanie PXE, bootowania przez sie\u0107 i zmiany VLAN. U\u0142atwi\u0142o to i upro\u015bci\u0142o tworzenie wirtualnych serwer\u00f3w. <\/p>\n<p><img decoding=\"async\" alt=\"Thriller o konfiguracji serwer\u00f3w bez cud\u00f3w z Configuration Management\" src=\"\/wp-content\/uploads\/2020\/07\/8cde23a4ad2ba1573bc88ec174bfe6b5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Rys. 1. Zarz\u0105dzanie instalacj\u0105 system\u00f3w operacyjnych.<\/i><\/p>\n<h1>Zarz\u0105dzanie sekretami<\/h1>\n<p>\nKa\u017cdy system zarz\u0105dzania konfiguracjami zawiera dane, kt\u00f3re powinny by\u0107 ukryte przed zwyk\u0142ymi u\u017cytkownikami, ale s\u0105 potrzebne do przygotowania system\u00f3w. S\u0105 to has\u0142a lokalnych u\u017cytkownik\u00f3w i kont serwisowych, klucze certyfikat\u00f3w, r\u00f3\u017cnego rodzaju tokeny API itd. Zwykle nazywa si\u0119 je \"sekretami\".<\/p>\n<p>Je\u015bli od samego pocz\u0105tku nie okre\u015blimy, gdzie i jak przechowywa\u0107 te sekrety, to w zale\u017cno\u015bci od surowo\u015bci wymaga\u0144 w zakresie bezpiecze\u0144stwa informacji, prawdopodobne s\u0105 takie metody przechowywania:<\/p>\n<ul>\n<li>bezpo\u015brednio w kodzie zarz\u0105dzania konfiguracj\u0105 lub w plikach w repozytorium;<\/li>\n<li>w wyspecjalizowanych narz\u0119dziach do zarz\u0105dzania konfiguracj\u0105 (np. Ansible Vault);<\/li>\n<li>w systemach CI\/CD (Jenkins\/TeamCity\/GitLab itd.) lub w systemach zarz\u0105dzania konfiguracj\u0105 (Ansible Tower\/Ansible AWX);<\/li>\n<li>ponadto sekrety mo\u017cna przekazywa\u0107 w trybie \u201er\u0119cznym\u201d. Na przyk\u0142ad umieszczaj\u0105 je w um\u00f3wionym miejscu, a nast\u0119pnie wykorzystuj\u0105 je systemy zarz\u0105dzania konfiguracj\u0105;<\/li>\n<li>r\u00f3\u017cne kombinacje powy\u017cszych.<\/li>\n<\/ul>\n<p>\nKa\u017cda metoda ma swoje wady. G\u0142\u00f3wna z nich to brak polityki dost\u0119pu do sekret\u00f3w: nie mo\u017cna lub trudno okre\u015bli\u0107, kto mo\u017ce korzysta\u0107 z danych sekret\u00f3w. Kolejnym minusem jest brak audytu dost\u0119pu i pe\u0142nego cyklu \u017cyciowego. Jak szybko wymieni\u0107 na przyk\u0142ad klucz publiczny, kt\u00f3ry jest zapisany w kodzie i w kilku powi\u0105zanych systemach?<\/p>\n<p>U\u017cywali\u015bmy scentralizowanego magazynu sekret\u00f3w HashiCorp Vault. Umo\u017cliwi\u0142o nam to: <\/p>\n<ul>\n<li>bezpieczne przechowywanie sekret\u00f3w. S\u0105 one zaszyfrowane, a nawet je\u015bli kto\u015b uzyska dost\u0119p do bazy danych magazynu Vault (na przyk\u0142ad przywracaj\u0105c j\u0105 z kopii zapasowej), nie b\u0119dzie m\u00f3g\u0142 odczyta\u0107 przechowywanych tam sekretnych informacji; <\/li>\n<li>organizacj\u0119 polityk dost\u0119pu do sekret\u00f3w. U\u017cytkownicy i aplikacje maj\u0105 dost\u0119p tylko do \u201eprzydzielonych\u201d im sekret\u00f3w;<\/li>\n<li>przeprowadzanie audytu dost\u0119pu do sekret\u00f3w. Wszystkie dzia\u0142ania na sekretach s\u0105 rejestrowane w dzienniku audytu Vault;<\/li>\n<li>organizacj\u0119 pe\u0142nego \u201ecyklu \u017cycia\u201d pracy z sekretami. Mo\u017cna je tworzy\u0107, cofa\u0107, ustala\u0107 daty wa\u017cno\u015bci itd.<\/li>\n<li>\u0142atw\u0105 integracj\u0119 z innymi systemami, kt\u00f3rym potrzebny jest dost\u0119p do sekret\u00f3w;<\/li>\n<li>a tak\u017ce stosowanie szyfrowania end-to-end, jednorazowych hase\u0142 do OS i DB, certyfikat\u00f3w autoryzowanych centr\u00f3w itd. <\/li>\n<\/ul>\n<p>\nTeraz przejd\u017amy do centralnego systemu uwierzytelniania i autoryzacji. Mo\u017cna by\u0142o si\u0119 bez niego obej\u015b\u0107, ale administrowanie u\u017cytkownikami w wielu powi\u0105zanych systemach jest zbyt skomplikowane. Skonfigurowali\u015bmy uwierzytelnianie i autoryzacj\u0119 przez us\u0142ug\u0119 LDAP. W przeciwnym razie w tym samym Vault musieliby\u015bmy stale wydawa\u0107 i \u015bledzi\u0107 tokeny uwierzytelniaj\u0105ce dla u\u017cytkownik\u00f3w. A usuwanie i dodawanie u\u017cytkownik\u00f3w przerodzi\u0142oby si\u0119 w quest \u201eczy wsz\u0119dzie stworzy\u0142em\/usun\u0105\u0142em ten identyfikator?\u201d <\/p>\n<p>Dodajemy jeszcze jeden poziom do naszej systemu: zarz\u0105dzanie sekretami oraz centralne uwierzytelnianie\/autoryzacja:<\/p>\n<p><img decoding=\"async\" alt=\"Thriller o konfiguracji serwer\u00f3w bez cud\u00f3w z Configuration Management\" src=\"\/wp-content\/uploads\/2020\/07\/993e863417898c39940fe0bc9ee55b1e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Rys. 2. Zarz\u0105dzanie sekretami.<\/i><\/p>\n<h1>Zarz\u0105dzanie konfiguracjami<\/h1>\n<p>\nDotarli\u015bmy do sedna \u2014 do systemu CMS. W naszym przypadku to po\u0142\u0105czenie Ansible i Red Hat Ansible AWX. <\/p>\n<p>Zamiast Ansible mog\u0105 wyst\u0119powa\u0107 Chef, Puppet, SaltStack. Wybrali\u015bmy Ansible z kilku powod\u00f3w. <\/p>\n<ul>\n<li>Po pierwsze, to uniwersalno\u015b\u0107. Zestaw gotowych modu\u0142\u00f3w do zarz\u0105dzania <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/modules\/modules_by_category.html\">robi wra\u017cenie<\/a><\/noindex>. A je\u015bli go brakuje, mo\u017cna poszuka\u0107 na GitHub i Galaxy. <\/li>\n<li>Po drugie, nie trzeba instalowa\u0107 i utrzymywa\u0107 agent\u00f3w na zarz\u0105dzanym sprz\u0119cie, udowadnia\u0107, \u017ce nie zak\u0142\u00f3caj\u0105 obci\u0105\u017cenia i potwierdza\u0107 brak 'backdoor\u00f3w'. <\/li>\n<li>Po trzecie, Ansible ma niski pr\u00f3g wej\u015bcia. Zrozumia\u0142y in\u017cynier napisze dzia\u0142aj\u0105cy playbook dos\u0142ownie w pierwszy dzie\u0144 pracy z produktem.<\/li>\n<\/ul>\n<p>\nAle sam Ansible w \u015brodowisku przemys\u0142owym nie wystarczy\u0142. W przeciwnym razie pojawi\u0142oby si\u0119 wiele problem\u00f3w z ograniczeniem dost\u0119pu i audytem dzia\u0142a\u0144 administrator\u00f3w. Jak zdefiniowa\u0107 dost\u0119p? Przecie\u017c trzeba by\u0142o, aby ka\u017cde dzia\u0142anie zarz\u0105dza\u0142o (czytaj \u2014 uruchamia\u0142o Ansible playbook) swoim 'w\u0142asnym' zestawem serwer\u00f3w. Jak pozwoli\u0107 na uruchamianie konkretnych Ansible playbook tylko okre\u015blonym pracownikom? Jak \u015bledzi\u0107, kto uruchamia\u0142 playbook, nie tworz\u0105c wielu lokalnych kont u\u017cytkownik\u00f3w na serwerach i sprz\u0119cie zarz\u0105dzanym przez Ansible?<\/p>\n<p>Znaczn\u0105 cz\u0119\u015b\u0107 takich pyta\u0144 rozwi\u0105zuje Red Hat <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ansible.com\/products\/tower\">Ansible Tower<\/a><\/noindex>, lub jego open-source'owy projekt upstreamowy <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ansible\/awx\">Ansible AWX<\/a><\/noindex>. Dlatego wybrali\u015bmy go dla klienta. <\/p>\n<p>I jeszcze jeden element do portretu naszego systemu CMS. Ansible playbook musi by\u0107 przechowywany w systemach zarz\u0105dzania repozytoriami kodu. U nas to <noindex><a rel=\"nofollow\" href=\"https:\/\/about.gitlab.com\/install\/\">GitLab CE<\/a><\/noindex>.<\/p>\n<p>Wi\u0119c same konfiguracje zarz\u0105dzane s\u0105 przez po\u0142\u0105czenie Ansible\/Ansible AWX\/GitLab (zob. Rys. 3). Oczywi\u015bcie, AWX\/GitLab s\u0105 zintegrowane z jednolitym systemem uwierzytelniania, a Ansible playbook z HashiCorp Vault. Konfiguracje trafiaj\u0105 do \u015brodowiska produkcyjnego tylko przez Ansible AWX, w kt\u00f3rym okre\u015blone s\u0105 wszystkie 'zasady gry': kto i co mo\u017ce konfigurowa\u0107, sk\u0105d bra\u0107 kod zarz\u0105dzania konfiguracjami dla CMS itp.<\/p>\n<p><img decoding=\"async\" alt=\"Thriller o konfiguracji serwer\u00f3w bez cud\u00f3w z Configuration Management\" src=\"\/wp-content\/uploads\/2020\/07\/f4f5b3904a2145d7283cd52f921bca89.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Rys. 3. Zarz\u0105dzanie konfiguracjami.<\/i><\/p>\n<h1>Zarz\u0105dzanie testowaniem<\/h1>\n<p>\nNasza konfiguracja przedstawiona jest w formie kodu. Dlatego musimy gra\u0107 wed\u0142ug tych samych zasad, co deweloperzy oprogramowania. Musieli\u015bmy zorganizowa\u0107 procesy rozwoju, ci\u0105g\u0142ego testowania, dostarczania i wdra\u017cania kodu konfiguracyjnego na serwery produkcyjne.<\/p>\n<p>Je\u015bli nie zrobisz tego od razu, to napisane role do konfiguracji mog\u0105 przesta\u0107 by\u0107 wspierane i modyfikowane lub przestan\u0105 dzia\u0142a\u0107 w \u015brodowisku produkcyjnym. Lekarstwo na ten problem jest znane i sprawdzi\u0142o si\u0119 w tym projekcie:<\/p>\n<ul>\n<li>ka\u017cda rola jest pokryta testami modu\u0142owymi;<\/li>\n<li>testy s\u0105 automatycznie uruchamiane przy ka\u017cdej zmianie w kodzie zarz\u0105dzaj\u0105cym konfiguracjami;<\/li>\n<li>zmiany w kodzie zarz\u0105dzaj\u0105cym konfiguracjami trafiaj\u0105 do \u015brodowiska produkcyjnego tylko po pomy\u015blnym przej\u015bciu wszystkich test\u00f3w i przegl\u0105dzie kodu.<\/li>\n<\/ul>\n<p>\nRozw\u00f3j kodu oraz zarz\u0105dzanie konfiguracjami sta\u0142y si\u0119 spokojniejsze i bardziej przewidywalne. Do organizacji ci\u0105g\u0142ego testowania u\u017cyli\u015bmy narz\u0119dzi GitLab CI\/CD, a jako framework do organizacji test\u00f3w wybrali\u015bmy <noindex><a rel=\"nofollow\" href=\"https:\/\/molecule.readthedocs.io\/en\/latest\/\">Ansible Molecule<\/a><\/noindex>.<\/p>\n<p>Przy ka\u017cdej zmianie w kodzie zarz\u0105dzaj\u0105cym konfiguracjami GitLab CI\/CD wywo\u0142uje Molecule: <\/p>\n<ul>\n<li>sprawdza sk\u0142adni\u0119 kodu, <\/li>\n<li>uruchamia kontener Docker, <\/li>\n<li>aplikuje zmodyfikowany kod w stworzonym kontenerze, <\/li>\n<li>sprawdza rol\u0119 pod k\u0105tem idempotentno\u015bci i uruchamia testy dla tego kodu (granularno\u015b\u0107 jest na poziomie roli ansible, zob. Rys. 4).<\/li>\n<\/ul>\n<p>\nKonfiguracje w \u015brodowisku produkcyjnym dostarczali\u015bmy z u\u017cyciem Ansible AWX. Odpowiedzialni za eksploatacj\u0119 in\u017cynierowie wprowadzali zmiany w konfiguracji przez wcze\u015bniej zdefiniowane szablony. AWX samodzielnie przy ka\u017cdym zastosowaniu \"pobiera\u0142\" najnowsz\u0105 wersj\u0119 kodu z ga\u0142\u0119zi master GitLab. W ten spos\u00f3b wykluczali\u015bmy u\u017cywanie niezweryfikowanego lub przestarza\u0142ego kodu w \u015brodowisku produkcyjnym. Oczywi\u015bcie, kod do ga\u0142\u0119zi master trafia\u0142 tylko po przetestowaniu, przegl\u0105dzie i zatwierdzeniu.<\/p>\n<p><img decoding=\"async\" alt=\"Thriller o konfiguracji serwer\u00f3w bez cud\u00f3w z Configuration Management\" src=\"\/wp-content\/uploads\/2020\/07\/aa8f6205f05792a6a1120ad7360ab102.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Rys. 4. Automatyczne testowanie r\u00f3l w GitLab CI\/CD.<\/i><\/p>\n<p>Jest jeszcze problem zwi\u0105zany z eksploatacj\u0105 system\u00f3w produkcyjnych. W rzeczywisto\u015bci bardzo trudno jest wprowadza\u0107 zmiany w konfiguracji wy\u0142\u0105cznie przez kod CMS. Pojawiaj\u0105 si\u0119 sytuacje awaryjne, kiedy in\u017cynier musi zmieni\u0107 konfiguracj\u0119 \"tu i teraz\", nie czekaj\u0105c na poprawki kodu, testy, zatwierdzenia itp.<\/p>\n<p>W rezultacie z powodu r\u0119cznych zmian pojawiaj\u0105 si\u0119 rozbie\u017cno\u015bci w konfiguracji na jednorodnym sprz\u0119cie (na przyk\u0142ad na w\u0119z\u0142ach klastra HA r\u00f3\u017cne konfiguracje ustawie\u0144 sysctl). Albo rzeczywista konfiguracja na sprz\u0119cie r\u00f3\u017cni si\u0119 od tej, kt\u00f3ra jest okre\u015blona w kodzie CMS. <\/p>\n<p>Dlatego w ramach ci\u0105g\u0142ego testowania sprawdzamy \u015brodowiska produkcyjne pod k\u0105tem niezgodno\u015bci konfiguracji. Wybrali\u015bmy najprostsz\u0105 opcj\u0119: uruchomienie kodu konfiguracji CMS w trybie \u00abdry run\u00bb, to znaczy bez wprowadzania zmian, ale z powiadomieniem o wszystkich niezgodno\u015bciach mi\u0119dzy planowan\u0105 a rzeczywist\u0105 konfiguracj\u0105. Zrealizowali\u015bmy to dzi\u0119ki okresowym uruchomieniom wszystkich playbook\u00f3w Ansible z opcj\u0105 \u00ab--check\u00bb na serwerach produkcyjnych. Za uruchomienie i aktualno\u015b\u0107 playbook\u00f3w, jak zawsze, odpowiada Ansible AWX (patrz Rys. 5):<\/p>\n<p><img decoding=\"async\" alt=\"Thriller o konfiguracji serwer\u00f3w bez cud\u00f3w z Configuration Management\" src=\"\/wp-content\/uploads\/2020\/07\/108a5a473f60ab76ee15f9334ebcbab7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Rys. 5. Kontrola r\u00f3\u017cnic w konfiguracjach w Ansible AWX.<\/i><\/p>\n<p>Po testach AWX wysy\u0142a raport o r\u00f3\u017cnicach do administrator\u00f3w. Badamy problematyczn\u0105 konfiguracj\u0119, a nast\u0119pnie poprawiamy j\u0105 przy u\u017cyciu skorygowanych playbook\u00f3w. W ten spos\u00f3b utrzymujemy konfiguracj\u0119 w \u015brodowisku produkcyjnym, a CMS zawsze jest w aktualnym i zsynchronizowanym stanie. To eliminuje nieprzyjemne \u201ecuda\u201d, gdy kod CMS jest stosowany na serwerach \u201e\u017cywych\u201d.<\/p>\n<p>Teraz mamy wa\u017cny poziom testowania, sk\u0142adaj\u0105cy si\u0119 z Ansible AWX\/GitLab\/Molecule (Rys. 6).<\/p>\n<p><img decoding=\"async\" alt=\"Thriller o konfiguracji serwer\u00f3w bez cud\u00f3w z Configuration Management\" src=\"\/wp-content\/uploads\/2020\/07\/f487f5603e90b0c753fb9decf9018b11.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Rys. 6. Zarz\u0105dzanie testowaniem.<\/i><\/p>\n<p>Trudne? Nie zaprzeczam. Ale taki kompleks zarz\u0105dzania konfiguracjami sta\u0142 si\u0119 wyczerpuj\u0105c\u0105 odpowiedzi\u0105 na wiele pyta\u0144 zwi\u0105zanych z automatyzacj\u0105 konfiguracji serwer\u00f3w. Teraz detalista ma zawsze \u015bci\u015ble okre\u015blon\u0105 konfiguracj\u0119 typowych serwer\u00f3w. CMS, w przeciwie\u0144stwie do in\u017cyniera, nie zapomni doda\u0107 niezb\u0119dnych ustawie\u0144, utworzy\u0107 u\u017cytkownik\u00f3w i wykona\u0107 dziesi\u0105tki lub setki wymaganych ustawie\u0144.<\/p>\n<p>W ustawieniach serwer\u00f3w i \u015brodowisk dzisiaj brakuje \u201etajemnej wiedzy\u201d. Wszystkie niezb\u0119dne cechy s\u0105 odzwierciedlone w playbookach. Koniec z jak\u0105kolwiek tw\u00f3rczo\u015bci\u0105 i niejasnymi instrukcjami: \u201e<i>stawiaj jak zwyk\u0142y Oracle, ale tam trzeba kilka ustawie\u0144 sysctl wpisa\u0107 i doda\u0107 u\u017cytkownik\u00f3w z odpowiednim UID. Zapytaj ch\u0142opak\u00f3w z eksploatacji, oni wiedz\u0105.<\/i>\u00bb. <\/p>\n<p>Mo\u017cliwo\u015b\u0107 wykrywania r\u00f3\u017cnic w konfiguracjach i ich wcze\u015bniejszego korygowania daje spok\u00f3j. Bez systemu zarz\u0105dzania konfiguracjami zazwyczaj wygl\u0105da to inaczej. Problemy gromadz\u0105 si\u0119, a\u017c pewnego dnia \u201ewystrzel\u0105\u201d w produkcji. Nast\u0119pnie przeprowadza si\u0119 analiz\u0119 b\u0142\u0119d\u00f3w, sprawdza i koryguje konfiguracje. I cykl powtarza si\u0119 znowu. <\/p>\n<p>Oczywi\u015bcie przyspieszyli\u015bmy uruchomienie serwer\u00f3w w eksploatacji z kilku dni do kilku godzin.<\/p>\n<p>A w sam\u0105 now\u0105 noc, kiedy dzieci rado\u015bnie rozpakowywa\u0142y prezenty, a doro\u015bli sk\u0142adali \u017cyczenia pod d\u017awi\u0119k wybijaj\u0105cych godzin, nasi in\u017cynierowie migrowali system SAP na nowe serwery. Nawet \u015awi\u0119ty Miko\u0142aj powie, \u017ce najlepsze cuda to te dobrze przygotowane. <\/p>\n<p>P.S. Nasz zesp\u00f3\u0142 cz\u0119sto spotyka si\u0119 z tym, \u017ce klienci chc\u0105 jak najszybciej rozwi\u0105za\u0107 problem zarz\u0105dzania konfiguracjami. Najlepiej, aby by\u0142o to jak za spraw\u0105 magii \u2014 jednym narz\u0119dziem. Ale w \u017cyciu wszystko jest trudniejsze (tak, zn\u00f3w nie dostarczyli srebrnych pocisk\u00f3w): musimy tworzy\u0107 ca\u0142y proces przy pomocy wygodnych narz\u0119dzi dla zespo\u0142u klienta.<\/p>\n<p><i>Autor: Sergey Artemov, architekt dzia\u0142u <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/portal.jet.su\/about\/company\/structure\/?set_filter_structure=Y&amp;structure_UF_DEPARTMENT=56656\"><i>Rozwi\u0105za\u0144 DevOps<\/i><\/a><\/noindex><i> \u201eInfosystemy Jet\u201d<\/i><br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/jetinfosystems\/blog\/513132\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0414\u0435\u043b\u043e \u0431\u043b\u0438\u0437\u0438\u043b\u043e\u0441\u044c \u043a \u041d\u043e\u0432\u043e\u043c\u0443 \u0433\u043e\u0434\u0443. \u0414\u0435\u0442\u0438 \u0432\u0441\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u044b \u0443\u0436\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u043f\u0438\u0441\u044c\u043c\u0430 \u0414\u0435\u0434\u0443 \u041c\u043e\u0440\u043e\u0437\u0443 \u0438\u043b\u0438 \u0437\u0430\u0433\u0430\u0434\u0430\u043b\u0438 \u0441\u0435\u0431\u0435 \u043f\u043e\u0434\u0430\u0440\u043a\u0438, \u0430 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u0440\u0438\u0442\u0435\u0439\u043b\u0435\u0440\u043e\u0432 \u2014 \u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0441\u044f \u043a \u0430\u043f\u043e\u0444\u0435\u043e\u0437\u0443 \u043f\u0440\u043e\u0434\u0430\u0436. \u0412 \u0434\u0435\u043a\u0430\u0431\u0440\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 \u0435\u0433\u043e \u0426\u041e\u0414 \u0432\u044b\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0440\u0435\u0448\u0438\u043b\u0430 \u043c\u043e\u0434\u0435\u0440\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440 \u0438 \u0432\u0432\u0435\u0441\u0442\u0438 \u0432 \u0441\u0442\u0440\u043e\u0439 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u043d\u043e\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0432\u043c\u0435\u0441\u0442\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":90387,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-90386","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0414\u0435\u043b\u043e \u0431\u043b\u0438\u0437\u0438\u043b\u043e\u0441\u044c \u043a \u041d\u043e\u0432\u043e\u043c\u0443 \u0433\u043e\u0434\u0443. \u0414\u0435\u0442\u0438 \u0432\u0441\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u044b \u0443\u0436\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u043f\u0438\u0441\u044c\u043c\u0430 \u0414\u0435\u0434\u0443 \u041c\u043e\u0440\u043e\u0437\u0443 \u0438\u043b\u0438 \u0437\u0430\u0433\u0430\u0434\u0430\u043b\u0438 \u0441\u0435\u0431\u0435 \u043f\u043e\u0434\u0430\u0440\u043a\u0438, \u0430 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u0440\u0438\u0442\u0435\u0439\u043b\u0435\u0440\u043e\u0432 \u2014 \u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0441\u044f \u043a \u0430\u043f\u043e\u0444\u0435\u043e\u0437\u0443 \u043f\u0440\u043e\u0434\u0430\u0436.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/triller-o-nastrojke-serverov-bez-chudes-s-configuration-management\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0422\u0440\u0438\u043b\u043b\u0435\u0440 \u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0431\u0435\u0437 \u0447\u0443\u0434\u0435\u0441 \u0441 Configuration Management | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0414\u0435\u043b\u043e \u0431\u043b\u0438\u0437\u0438\u043b\u043e\u0441\u044c \u043a \u041d\u043e\u0432\u043e\u043c\u0443 \u0433\u043e\u0434\u0443. \u0414\u0435\u0442\u0438 \u0432\u0441\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u044b \u0443\u0436\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u043f\u0438\u0441\u044c\u043c\u0430 \u0414\u0435\u0434\u0443 \u041c\u043e\u0440\u043e\u0437\u0443 \u0438\u043b\u0438 \u0437\u0430\u0433\u0430\u0434\u0430\u043b\u0438 \u0441\u0435\u0431\u0435 \u043f\u043e\u0434\u0430\u0440\u043a\u0438, \u0430 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u0440\u0438\u0442\u0435\u0439\u043b\u0435\u0440\u043e\u0432 \u2014 \u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0441\u044f \u043a \u0430\u043f\u043e\u0444\u0435\u043e\u0437\u0443 \u043f\u0440\u043e\u0434\u0430\u0436.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/triller-o-nastrojke-serverov-bez-chudes-s-configuration-management\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-31T11:42:20+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-31T11:42:20+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Thriller o konfiguracji serwer\u00f3w bez cud\u00f3w z Configuration Management | ProHoster","description":"Zbli\u017ca\u0142 si\u0119 Nowy Rok. Dzieci z ca\u0142ego kraju ju\u017c wys\u0142a\u0142y listy do \u015awi\u0119tego Miko\u0142aja lub wymy\u015bli\u0142y sobie prezenty, a g\u0142\u00f3wny ich wykonawca \u2014 jeden z du\u017cych detalist\u00f3w \u2014 przygotowywa\u0142 si\u0119 do apogeum sprzeda\u017cy.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/triller-o-nastrojke-serverov-bez-chudes-s-configuration-management","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0422\u0440\u0438\u043b\u043b\u0435\u0440 \u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0431\u0435\u0437 \u0447\u0443\u0434\u0435\u0441 \u0441 Configuration Management | ProHoster","og:description":"\u0414\u0435\u043b\u043e \u0431\u043b\u0438\u0437\u0438\u043b\u043e\u0441\u044c \u043a \u041d\u043e\u0432\u043e\u043c\u0443 \u0433\u043e\u0434\u0443. \u0414\u0435\u0442\u0438 \u0432\u0441\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u044b \u0443\u0436\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u043f\u0438\u0441\u044c\u043c\u0430 \u0414\u0435\u0434\u0443 \u041c\u043e\u0440\u043e\u0437\u0443 \u0438\u043b\u0438 \u0437\u0430\u0433\u0430\u0434\u0430\u043b\u0438 \u0441\u0435\u0431\u0435 \u043f\u043e\u0434\u0430\u0440\u043a\u0438, \u0430 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u0440\u0438\u0442\u0435\u0439\u043b\u0435\u0440\u043e\u0432 \u2014 \u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0441\u044f \u043a \u0430\u043f\u043e\u0444\u0435\u043e\u0437\u0443 \u043f\u0440\u043e\u0434\u0430\u0436.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/triller-o-nastrojke-serverov-bez-chudes-s-configuration-management","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-31T11:42:20+00:00","article:modified_time":"2020-07-31T11:42:20+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"90386","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:52:34","updated":"2022-09-28 09:47:54","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/90386","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=90386"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/90386\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/90387"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=90386"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=90386"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=90386"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}