{"id":35972,"date":"2019-10-31T22:08:54","date_gmt":"2019-10-31T19:08:54","guid":{"rendered":"https:\/\/prohoster.info\/blog\/avtomatizatsiya-dlya-samyh-malenkih-chast-nulevaya-planirovanie\/"},"modified":"2019-10-31T22:08:54","modified_gmt":"2019-10-31T19:08:54","slug":"avtomatizatsiya-dlya-samyh-malenkih-chast-nulevaya-planirovanie","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/avtomatizatsiya-dlya-samyh-malenkih-chast-nulevaya-planirovanie","title":{"rendered":"Automatyzacja dla najmniejszych. Cz\u0119\u015b\u0107 zerowa. Planowanie","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>SDCM si\u0119 sko\u0144czy\u0142, ale niekontrolowane pragnienie pisania pozosta\u0142o. <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/fs.linkmeup.ru\/images\/adsm\/0\/kdpv.jpg\"><img decoding=\"async\" alt=\"Automatyzacja dla najmniejszych. Cz\u0119\u015b\u0107 zerowa. Planowanie\" src=\"\/wp-content\/uploads\/2019\/07\/2da9a566e92a782cf1205a6da716d4c4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Przez d\u0142ugie lata nasz brat cierpia\u0142 z powodu rutynowej pracy, skrzy\u017cowa\u0142 palce przed commitem i niedosypia\u0142 z powodu nocnych rollback\u00f3w.<br \/>\nAle ciemne czasy dobiegn\u0105 ko\u0144ca.<\/p>\n<p>Tym artyku\u0142em rozpoczn\u0119 seri\u0119 o tym, jak <i>do mnie<\/i> widzi si\u0119 automatyzacj\u0119. <br \/>\nPo drodze przyjrzymy si\u0119 etapom automatyzacji, przechowywaniu zmiennych, formalizacji projektu, RestAPI, NETCONF, YANG, YDK i b\u0119dziemy programowa\u0107 naprawd\u0119 du\u017co. <br \/>\n<i>Dla mnie<\/i> oznacza, \u017ce a) to nie jest obiektywna prawda, b) nie jest to bezwzgl\u0119dnie najlepsze podej\u015bcie c) moje zdanie nawet w trakcie przechodzenia od pierwszego do ostatniego artyku\u0142u mo\u017ce si\u0119 zmieni\u0107 \u2014 szczerze m\u00f3wi\u0105c, od etapu roboczego do publikacji wszystko przepisywa\u0142em dwukrotnie. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1>Spis tre\u015bci<\/h1>\n<p><\/p>\n<ol>\n<li> <b>Cele<\/b>\n<ol>\n<li>Sie\u0107 \u2014 jak jeden organizm<\/li>\n<li>Testowanie konfiguracji<\/li>\n<li>Wersjonowanie<\/li>\n<li>Monitorowanie i samonaprawa us\u0142ug<\/li>\n<\/ol>\n<p>\n <\/li>\n<li> <b>Narz\u0119dzia<\/b>\n<ol>\n<li>System inwentaryzacji<\/li>\n<li>System zarz\u0105dzania przestrzeni\u0105 IP<\/li>\n<li>System opisu us\u0142ug sieciowych<\/li>\n<li>Mechanizm inicjalizacji urz\u0105dze\u0144<\/li>\n<li>Model konfiguracyjny niezale\u017cny od dostawcy<\/li>\n<li>Interfejs dostawcy specyficzny dla sterownika<\/li>\n<li>Mechanizm dostarczania konfiguracji na urz\u0105dzenie<\/li>\n<li>CI\/CD<\/li>\n<li>Mechanizm tworzenia kopii zapasowej i wykrywania odchyle\u0144<\/li>\n<li>System monitorowania<\/li>\n<\/ol>\n<p>\n <\/li>\n<li> <b>Podsumowanie<\/b>\n <\/li>\n<\/ol>\n<p>\nW ADCSM spr\u00f3buj\u0119 prowadzi\u0107 format nieco r\u00f3\u017cni\u0105cy si\u0119 od SDCM. Nadal b\u0119d\u0105 si\u0119 pojawia\u0142y obszerne artyku\u0142y numerowane, a pomi\u0119dzy nimi b\u0119d\u0119 publikowa\u0107 ma\u0142e notatki z codziennego do\u015bwiadczenia. Postaram si\u0119 tutaj zmierzy\u0107 z perfekcjonizmem i nie dopracowywa\u0107 ich nadmiernie. <\/p>\n<blockquote><p> Jak to zabawne, \u017ce po raz drugi musz\u0119 przechodzi\u0107 t\u0119 sam\u0105 drog\u0119.<\/p>\n<p> Na pocz\u0105tku musia\u0142em sam pisa\u0107 artyku\u0142y o sieciach, poniewa\u017c nie by\u0142o ich w runecie.<\/p>\n<p> Teraz nie mog\u0142em znale\u017a\u0107 wszechstronnego dokumentu, kt\u00f3ry usystematyzowa\u0142by podej\u015bcia do automatyzacji i analizowa\u0142by powy\u017csze technologie na prostych przyk\u0142adach praktycznych.<\/p>\n<p> Mo\u017ce si\u0119 myl\u0119, wi\u0119c rzucajcie linki do przydatnych zasob\u00f3w. Jednak to nie zmieni mojej determinacji do pisania, poniewa\u017c g\u0142\u00f3wnym celem jest nauczenie si\u0119 czego\u015b dla siebie, a u\u0142atwienie \u017cycia innym to mi\u0142y bonus, kt\u00f3ry podkre\u015bla rozprzestrzenianie do\u015bwiadczenia.\n<\/p><\/blockquote>\n<p>Spr\u00f3bujemy wzi\u0105\u0107 \u015bredniej wielko\u015bci centrum danych LAN DC i opracowa\u0107 ca\u0142\u0105 schemat automatyzacji. <br \/>\nB\u0119d\u0119 robi\u0107 niekt\u00f3re rzeczy praktycznie po raz pierwszy razem z Wami. <\/p>\n<blockquote><p> W opisywanych tutaj pomys\u0142ach i narz\u0119dziach nie b\u0119d\u0119 oryginalny. Dmitrij Figol ma znakomity <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=MLeiShwb7Qo&amp;list=PLSwGHYY8t8JiGI9powOXDHTAXDSs7FZqt\">kana\u0142 ze streamingami na ten temat.<\/a><\/noindex>. <br \/>\n Artyku\u0142y w wielu aspektach b\u0119d\u0105 z nimi pokrywa\u0107 si\u0119. \n<\/p><\/blockquote>\n<p>W LAN DC 4 centra danych, oko\u0142o 250 prze\u0142\u0105cznik\u00f3w, p\u00f3\u0142 tuzina router\u00f3w i para zap\u00f3r ogniowych. <br \/>\nNie Facebook, ale wystarczaj\u0105co, aby g\u0142\u0119boko zastanowi\u0107 si\u0119 nad automatyzacj\u0105. <br \/>\nPanuje jednak pogl\u0105d, \u017ce je\u015bli masz wi\u0119cej ni\u017c 1 urz\u0105dzenie, ju\u017c potrzebna jest automatyzacja. <br \/>\nW rzeczywisto\u015bci trudno sobie wyobrazi\u0107, \u017ce kto\u015b teraz mo\u017ce \u017cy\u0107 bez przynajmniej paczki prostych skrypt\u00f3w. <br \/>\nChocia\u017c s\u0142ysza\u0142em, \u017ce s\u0105 takie firmy, gdzie ewidencja adres\u00f3w IP prowadzona jest w Excelu, a ka\u017cde z tysi\u0119cy urz\u0105dze\u0144 sieciowych konfiguruje si\u0119 r\u0119cznie i ma swoj\u0105 unikaln\u0105 konfiguracj\u0119. Mo\u017cna to na pewno uzna\u0107 za nowoczesn\u0105 sztuk\u0119, ale uczucia in\u017cyniera z pewno\u015bci\u0105 by\u0142yby zranione. <\/p>\n<h1>Cele<\/h1>\n<p>\nTeraz postawimy maksymalnie abstrakcyjne cele:<\/p>\n<ul>\n<li>Sie\u0107 \u2014 jak jeden organizm<\/li>\n<li>Testowanie konfiguracji<\/li>\n<li>Wersjonowanie stanu sieci<\/li>\n<li>Monitorowanie i samonaprawa us\u0142ug<\/li>\n<\/ul>\n<p>\nP\u00f3\u017aniej w tym artykule om\u00f3wimy, jakie narz\u0119dzia b\u0119dziemy stosowa\u0107, a w nast\u0119pnych dok\u0142adnie cele i \u015brodki.<\/p>\n<h2>Sie\u0107 \u2014 jak jeden organizm<\/h2>\n<p>\nOkre\u015blaj\u0105ca fraza cyklu, chocia\u017c na pierwszy rzut oka mo\u017ce wydawa\u0107 si\u0119 niewielka: <b>b\u0119dziemy konfigurowa\u0107 sie\u0107, a nie pojedyncze urz\u0105dzenia.<\/b>. <br \/>\nPrzez ostatnie lata obserwujemy przesuni\u0119cie akcent\u00f3w w kierunku traktowania sieci jako jednego bytu, st\u0105d przychodz\u0105ce do naszego \u017cycia <i>Software Defined Networking<\/i>, <i>Intent Driven Networks<\/i> i <i>Autonomous Networks<\/i>. <br \/>\nW ko\u0144cu, co globalnie wymagaj\u0105 aplikacje od sieci: \u0142\u0105czno\u015b\u0107 mi\u0119dzy punktami A i B (no czasami +B-J) i izolacj\u0119 od innych aplikacji i u\u017cytkownik\u00f3w. <\/p>\n<p><img decoding=\"async\" alt=\"Automatyzacja dla najmniejszych. Cz\u0119\u015b\u0107 zerowa. Planowanie\" src=\"\/wp-content\/uploads\/2019\/07\/f8b43928ccc6d487722ce7724f5c4829.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI w ten spos\u00f3b nasza zadanie w tej serii \u2014 <b>zbudowa\u0107 system<\/b>, kt\u00f3ry wspiera aktualn\u0105 konfiguracj\u0119 <b>ca\u0142ej sieci<\/b>, kt\u00f3ra ju\u017c dekomponuje si\u0119 na aktualn\u0105 konfiguracj\u0119 na ka\u017cdym urz\u0105dzeniu zgodnie z jego rol\u0105 i lokalizacj\u0105. <br \/>\n<b>System<\/b> Zarz\u0105dzanie sieci\u0105 oznacza, \u017ce aby wprowadzi\u0107 zmiany, zwracamy si\u0119 do niej, a ona z kolei oblicza potrzebny stan f\u00fcr ka\u017cde urz\u0105dzenie i konfiguruje je. <br \/>\nW ten spos\u00f3b minimalizujemy prawie do zera r\u0119czne korzystanie z CLI \u2014 wszelkie zmiany w konfiguracjach urz\u0105dze\u0144 lub projektach sieci musz\u0105 by\u0107 sformalizowane i udokumentowane \u2014 i dopiero potem wprowadzane na odpowiednie elementy sieci. <\/p>\n<blockquote><p> Na przyk\u0142ad, je\u015bli zdecydowali\u015bmy, \u017ce od teraz prze\u0142\u0105czniki w Kazaniu powinny og\u0142asza\u0107 dwie sieci zamiast jednej, to<\/p>\n<ol>\n<li>Najpierw udokumentujmy zmiany w systemach<\/li>\n<li>Generujemy docelow\u0105 konfiguracj\u0119 wszystkich urz\u0105dze\u0144 w sieci<\/li>\n<li>Uruchamiamy program aktualizacji konfiguracji sieci, kt\u00f3ry oblicza, co nale\u017cy usun\u0105\u0107 na ka\u017cdym w\u0119\u017ale, co doda\u0107 i przywraca w\u0119z\u0142y do odpowiedniego stanu.<\/li>\n<\/ol>\n<p>\n R\u0119cznie wprowadzamy zmiany tylko na pierwszym kroku.\n<\/p><\/blockquote>\n<h2>Testowanie konfiguracji<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/www.wikisummaries.org\/wiki\/Visible_Ops\">Wiadomo,<\/a><\/noindex>, \u017ce 80% problem\u00f3w pojawia si\u0119 podczas zmiany konfiguracji \u2014 po\u015brednim dowodem na to jest to, \u017ce w okresie noworocznych wakacji zwykle jest spokojnie. <br \/>\nOsobi\u015bcie by\u0142em \u015bwiadkiem dziesi\u0105tek globalnych przestoj\u00f3w z powodu b\u0142\u0119du ludzkiego: niew\u0142a\u015bciwa komenda, wykonano j\u0105 w z\u0142ej ga\u0142\u0119zi konfiguracji, zapomniano o spo\u0142eczno\u015bci, globalnie usuni\u0119to MPLS na routerze, skonfigurowano pi\u0119\u0107 urz\u0105dze\u0144, a na sz\u00f3stym nie zauwa\u017cono b\u0142\u0119du, wprowadzono stare zmiany dokonane przez inn\u0105 osob\u0119. Scenariuszy jest mn\u00f3stwo. <\/p>\n<p>Automatyzacja pozwoli nam pope\u0142nia\u0107 mniej b\u0142\u0119d\u00f3w, ale na wi\u0119ksz\u0105 skal\u0119. Mo\u017cna zablokowa\u0107 nie tylko jedno urz\u0105dzenie, ale ca\u0142\u0105 sie\u0107 naraz. <\/p>\n<p>Od zawsze nasi przodkowie sprawdzali poprawno\u015b\u0107 wprowadzanych zmian wyostrzonym okiem, stalowymi nerwami i funkcjonalno\u015bci\u0105 sieci po ich wdro\u017ceniu. <br \/>\nCi przodkowie, kt\u00f3rych prace prowadzi\u0142y do przestoj\u00f3w i katastrofalnych strat, pozostawiali mniej potomstwa i z czasem powinni wygin\u0105\u0107, ale ewolucja jest procesem powolnym, dlatego do tej pory nie wszyscy wst\u0119pnie sprawdzaj\u0105 zmiany w laboratorium. <br \/>\nJednak na czo\u0142owej linii post\u0119pu s\u0105 ci, kt\u00f3rzy zautomatyzowali proces testowania konfiguracji i jej dalszego zastosowania w sieci. Innymi s\u0142owy \u2014 przej\u0119li procedur\u0119 CI\/CD (<noindex><a rel=\"nofollow\" href=\"https:\/\/img.devrant.com\/devrant\/rant\/r_1535091_ErSUL.jpg\">Continuous Integration, Continuous Deployment<\/a><\/noindex>) od programist\u00f3w.<br \/>\nW jednej z cz\u0119\u015bci om\u00f3wimy, jak zrealizowa\u0107 to za pomoc\u0105 systemu kontroli wersji, prawdopodobnie Gita. <\/p>\n<blockquote><p> Gdy tylko zaakceptujesz my\u015bl o sieciowym CI\/CD, nagle metoda weryfikacji konfiguracji poprzez jej zastosowanie w sieci roboczej wyda ci si\u0119 ciemno\u015bredniowiecznym ignorancj\u0105. O mniej wi\u0119cej tak, jakby uderza\u0107 m\u0142otkiem w g\u0142owic\u0119 bojow\u0105.\n<\/p><\/blockquote>\n<p>Organiczne rozwini\u0119cie idei o <b>systemu<\/b> zarz\u0105dzaniu sieci\u0105 i CI\/CD staje si\u0119 pe\u0142noprawnym wersjonowaniem konfiguracji. <\/p>\n<h2>Wersjonowanie<\/h2>\n<p>\nB\u0119dziemy zak\u0142ada\u0107, \u017ce przy jakichkolwiek zmianach, nawet najbardziej nieznacz\u0105cych, nawet na jednym niedostrzegalnym urz\u0105dzeniu, ca\u0142a sie\u0107 przechodzi z jednego stanu do innego.<br \/>\nI zawsze nie wykonujemy komendy na urz\u0105dzeniu, zmieniamy stan sieci. <br \/>\nNazwijmy te stany wersjami?<\/p>\n<p>Za\u0142\u00f3\u017cmy, \u017ce bie\u017c\u0105ca wersja to 1.0.0.<br \/>\nCzy zmieni\u0142 si\u0119 adres IP interfejsu loopback na jednym z ToR-\u00f3w? To wersja minor \u2014 otrzyma numer 1.0.1.<br \/>\nZrewidowali\u015bmy polityki importu tras w BGP \u2014 to ju\u017c nieco powa\u017cniejsze \u2014 1.1.0.<br \/>\nPostanowili\u015bmy pozby\u0107 si\u0119 IGP i przej\u015b\u0107 tylko na BGP \u2014 to ju\u017c radykalna zmiana designu \u2014 2.0.0.<\/p>\n<p>R\u00f3\u017cne centra danych mog\u0105 mie\u0107 r\u00f3\u017cne wersje \u2014 sie\u0107 si\u0119 rozwija, wprowadza nowe sprz\u0119ty, gdzie\u015b dodawane s\u0105 nowe poziomy spine, a gdzie\u015b nie, itp.<\/p>\n<p>O <noindex><a rel=\"nofollow\" href=\"https:\/\/semver.org\">semantyczne wersjonowanie<\/a><\/noindex> Om\u00f3wimy w osobnym artykule.<\/p>\n<p>Powt\u00f3rz\u0119 \u2014 ka\u017cda zmiana (z wyj\u0105tkiem komend diagnostycznych) to aktualizacja wersji. O wszelkich odst\u0119pstwach od aktualnej wersji powinny by\u0107 informowani administratorzy.<\/p>\n<p>To samo dotyczy cofni\u0119cia zmian \u2014 to nie anullowanie ostatnich komend, to nie rollback za pomoc\u0105 systemu operacyjnego urz\u0105dzenia \u2014 to doprowadzenie ca\u0142ej sieci do nowej (starej) wersji. <\/p>\n<h2>Monitorowanie i samonaprawa us\u0142ug<\/h2>\n<p>\nTo oczywiste zadanie w nowoczesnych sieciach staje si\u0119 na nowym poziomie.<br \/>\nCz\u0119sto u du\u017cych dostawc\u00f3w us\u0142ug stosuje si\u0119 podej\u015bcie, \u017ce upad\u0142a us\u0142uga musi by\u0107 bardzo szybko naprawiona i podniesiona nowa, zamiast rozwi\u0105zywa\u0107, co si\u0119 sta\u0142o.<br \/>\n\u201eBardzo\u201d oznacza, \u017ce z ka\u017cdej strony nale\u017cy si\u0119 obficie obklei\u0107 monitorowaniem, kt\u00f3re w ci\u0105gu sekund wykryje najmniejsze odchylenia od normy.<br \/>\nI tutaj ju\u017c niewystarczaj\u0105ce s\u0105 zwyk\u0142e metryki, takie jak obci\u0105\u017cenie interfejsu czy dost\u0119pno\u015b\u0107 w\u0119z\u0142a. Nie wystarcza te\u017c r\u0119czne monitorowanie przez dy\u017curnego.<br \/>\nDla wielu rzeczy powinno by\u0107 w og\u00f3le <noindex><a rel=\"nofollow\" href=\"https:\/\/www.irisns.com\/self-healing-network-tomorrow-look-like\/\">Self-Healing<\/a><\/noindex> \u2014 monitorowania zapalaj\u0105 si\u0119 na czerwono i same id\u0105 przy\u0142o\u017cy\u0107 troch\u0119 li\u015bci, gdzie boli.<\/p>\n<p>I tutaj r\u00f3wnie\u017c monitorujemy nie tylko pojedyncze urz\u0105dzenia, ale i zdrowie sieci w ca\u0142o\u015bci, przy czym zar\u00f3wno w boksie bia\u0142ym, co jest stosunkowo zrozumia\u0142e, jak i w boksie czarnym, co ju\u017c jest trudniejsze.<\/p>\n<p>\nCo b\u0119dziemy potrzebowa\u0107 do realizacji takich ambitnych plan\u00f3w?<\/p>\n<ul>\n<li>Mie\u0107 list\u0119 wszystkich urz\u0105dze\u0144 w sieci, ich lokalizacj\u0119, role, modele, wersje oprogramowania. <br \/>\n <i>kazan-leaf-1.lmu.net, Kazan, leaf, Juniper QFX 5120, R18.3.<\/i>\n <\/li>\n<li>Mie\u0107 system opisu us\u0142ug sieciowych. <br \/>\n <i>IGP, BGP, L2\/3VPN, Polityka, ACL, NTP, SSH.<\/i><\/li>\n<li>Umie\u0107 zainicjowa\u0107 urz\u0105dzenie. <br \/>\n <i>Hostname, Mgmt IP, Mgmt Route, Users, RSA-Keys, LLDP, NETCONF<\/i><\/li>\n<li>Konfigurowa\u0107 urz\u0105dzenie i przywraca\u0107 konfiguracj\u0119 do wymaganej (w tym r\u00f3wnie\u017c starszej) wersji.<\/li>\n<li>Testowa\u0107 konfiguracj\u0119<\/li>\n<li>Okresowo sprawdza\u0107 stan wszystkich urz\u0105dze\u0144 pod k\u0105tem odchyle\u0144 od aktualnych i informowa\u0107 odpowiednich.<br \/>\n <i>W nocy kto\u015b cicho doda\u0142 regu\u0142\u0119 w ACL<\/i>.<\/li>\n<li>Monitorowa\u0107 niezawodno\u015b\u0107.<\/li>\n<\/ul>\n<p><\/p>\n<h1>Narz\u0119dzia<\/h1>\n<p>\nBrzmi wystarczaj\u0105co skomplikowanie, aby rozpocz\u0105\u0107 dekompozycj\u0119 projektu na komponenty.<\/p>\n<p>I b\u0119dzie ich dziesi\u0119\u0107:<\/p>\n<ol>\n<li>System inwentaryzacji<\/li>\n<li>System zarz\u0105dzania przestrzeni\u0105 IP<\/li>\n<li>System opisu us\u0142ug sieciowych<\/li>\n<li>Mechanizm inicjalizacji urz\u0105dze\u0144<\/li>\n<li>Model konfiguracyjny niezale\u017cny od dostawcy<\/li>\n<li>Interfejs dostawcy specyficzny dla sterownika<\/li>\n<li>Mechanizm dostarczania konfiguracji na urz\u0105dzenie<\/li>\n<li>CI\/CD<\/li>\n<li>Mechanizm tworzenia kopii zapasowej i wykrywania odchyle\u0144<\/li>\n<li>System monitorowania<\/li>\n<\/ol>\n<blockquote><p> To zreszt\u0105 przyk\u0142ad tego, jak zmienia\u0142 si\u0119 pogl\u0105d na cele cyklu \u2014 w szkicu komponent\u00f3w by\u0142o 4.\n<\/p><\/blockquote>\n<p><img decoding=\"async\" alt=\"Automatyzacja dla najmniejszych. Cz\u0119\u015b\u0107 zerowa. Planowanie\" src=\"\/wp-content\/uploads\/2019\/07\/91132e29d359a4042b213529511f6d7d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa ilustracji przedstawi\u0142em wszystkie komponenty i samo urz\u0105dzenie. <br \/>\nPrzecinaj\u0105ce si\u0119 komponenty wsp\u00f3\u0142dzia\u0142aj\u0105 ze sob\u0105. <br \/>\nIm wi\u0119kszy blok, tym wi\u0119cej uwagi nale\u017cy po\u015bwi\u0119ci\u0107 temu komponentowi. <\/p>\n<p><\/p>\n<h2>Komponent 1. System inwentaryzacyjny<\/h2>\n<p>\nOczywi\u015bcie chcemy wiedzie\u0107, jakie urz\u0105dzenie, gdzie si\u0119 znajduje, do czego jest pod\u0142\u0105czone. <br \/>\nSystem inwentaryzacyjny jest nieod\u0142\u0105czn\u0105 cz\u0119\u015bci\u0105 ka\u017cdej firmy. <br \/>\nNajcz\u0119\u015bciej dla urz\u0105dze\u0144 sieciowych firma ma oddzielny system inwentaryzacyjny, kt\u00f3ry rozwi\u0105zuje bardziej specyficzne zadania. <br \/>\nW ramach cyklu artyku\u0142\u00f3w b\u0119dziemy nazywa\u0107 to DCIM \u2014 Zarz\u0105dzanie Infrastruktur\u0105 Centrum Danych. Cho\u0107 termin DCIM w \u015bcis\u0142ym znaczeniu obejmuje znacznie wi\u0119cej.<\/p>\n<p>Dla naszych cel\u00f3w b\u0119dziemy w nim przechowywa\u0107 nast\u0119puj\u0105ce informacje o urz\u0105dzeniu:<\/p>\n<ul>\n<li>Numer inwentarzowy<\/li>\n<li>Nazwa\/opis <\/li>\n<li>Model (<i>Huawei CE12800, Juniper QFX5120 itd.<\/i>)<\/li>\n<li>Charakterystyczne parametry (<i>p\u0142yty, interfejsy itd.<\/i>)<\/li>\n<li>Rola (<i>Leaf, Spine, Border Router itd.<\/i>)<\/li>\n<li>Lokalizacja (<i>region, miasto, centrum danych, szafka, jednostka<\/i>)<\/li>\n<li>Interkoneksje mi\u0119dzy urz\u0105dzeniami<\/li>\n<li>Topologia sieci<\/li>\n<\/ul>\n<p><img decoding=\"async\" alt=\"Automatyzacja dla najmniejszych. Cz\u0119\u015b\u0107 zerowa. Planowanie\" src=\"\/wp-content\/uploads\/2019\/07\/fac708b1bf3640a943f90247bff8216e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJest jasne, \u017ce sami chcemy zna\u0107 to wszystko. <br \/>\nAle czy to pomo\u017ce w automatyzacji? <br \/>\nZ pewno\u015bci\u0105. <br \/>\nNa przyk\u0142ad, wiem, \u017ce w danym centrum danych na prze\u0142\u0105cznikach Leaf, je\u015bli to Huawei, ACL do filtrowania okre\u015blonego ruchu powinny by\u0107 stosowane na VLAN, a je\u015bli to Juniper \u2014 to na jednostk\u0119 0 fizycznego interfejsu. <br \/>\nAlbo trzeba roz\u0142o\u017cy\u0107 nowy serwer Syslog na wszystkie bramy regionu.<\/p>\n<p>B\u0119dziemy przechowywa\u0107 w niej r\u00f3wnie\u017c wirtualne urz\u0105dzenia sieciowe, na przyk\u0142ad wirtualne routery lub reflektory routingu. Mo\u017cemy doda\u0107 serwery DNS, NTP, Syslog i w og\u00f3le wszystko, co w ten czy inny spos\u00f3b odnosi si\u0119 do sieci. <\/p>\n<h2>Komponent 2. System zarz\u0105dzania przestrzeni\u0105 IP<\/h2>\n<p>\nTak, nawet dzisiaj s\u0105 grupy ludzi, kt\u00f3re prowadz\u0105 rejestracj\u0119 prefiks\u00f3w i adres\u00f3w IP w pliku Excel. Jednak nowoczesne podej\u015bcie to baza danych z interfejsem na nginx\/apache, API i szerokimi funkcjami do zarz\u0105dzania adresami IP i sieciami z podzia\u0142em na VRF.<br \/>\nIPAM \u2014 Zarz\u0105dzanie adresami IP. <\/p>\n<p>W naszej bazie danych b\u0119dziemy przechowywa\u0107 nast\u0119puj\u0105ce informacje:<\/p>\n<ul>\n<li>VLAN<\/li>\n<li>VRF<\/li>\n<li>Sieci\/Podsieci<\/li>\n<li>adresy IP<\/li>\n<li>Przypisanie adres\u00f3w do urz\u0105dze\u0144, sieci do lokalizacji oraz numer\u00f3w VLAN<\/li>\n<\/ul>\n<p><img decoding=\"async\" alt=\"Automatyzacja dla najmniejszych. Cz\u0119\u015b\u0107 zerowa. Planowanie\" src=\"\/wp-content\/uploads\/2019\/07\/6d476d48f95ed663d84cae052a86d129.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOczywi\u015bcie, chcemy by\u0107 pewni, \u017ce przypisuj\u0105c nowy adres IP dla loopbacka ToR-a, nie natrafimy na sytuacj\u0119, w kt\u00f3rej zosta\u0142 on ju\u017c komu\u015b przypisany. Lub \u017ce u\u017cyli\u015bmy tego samego prefiksu dwa razy w r\u00f3\u017cnych cz\u0119\u015bciach sieci. <br \/>\nAle jak to pomo\u017ce w automatyzacji? <br \/>\n\u0141atwo. <br \/>\nW systemie \u017c\u0105damy prefiksu z rol\u0105 Loopbacks, w kt\u00f3rym dost\u0119pne s\u0105 do przydzielenia adresy IP \u2014 je\u015bli si\u0119 znajdzie, przydzielamy adres, je\u015bli nie, prosimy o utworzenie nowego prefiksu. <br \/>\nLub przy tworzeniu konfiguracji urz\u0105dzenia mo\u017cemy z tego samego systemu dowiedzie\u0107 si\u0119, w jakim VRF powinien znajdowa\u0107 si\u0119 interfejs. <br \/>\nA przy uruchamianiu nowego serwera skrypt sprawdza w systemie, w kt\u00f3rym prze\u0142\u0105czniku serwerowym, w kt\u00f3rym porcie i jaka podsie\u0107 jest przypisana do interfejsu \u2014 z niego b\u0119dziemy przydziela\u0107 adres serwera. <\/p>\n<p>\nNasuwaj\u0105 si\u0119 wnioski, \u017ce nale\u017cy scali\u0107 DCIM i IPAM w jeden system, aby nie dublowa\u0107 funkcji i nie obs\u0142ugiwa\u0107 dw\u00f3ch podobnych podmiot\u00f3w. <br \/>\nTak w\u0142a\u015bnie zrobimy. <\/p>\n<h2>Komponent 3. System opisu us\u0142ug sieciowych<\/h2>\n<p>\nJe\u015bli pierwsze dwa systemy przechowuj\u0105 zmienne, kt\u00f3re jeszcze jako\u015b musz\u0105 by\u0107 wykorzystane, to trzeci opisuje dla ka\u017cdej roli urz\u0105dzenia, jak powinno by\u0107 skonfigurowane. <br \/>\nWarto wyr\u00f3\u017cni\u0107 dwa r\u00f3\u017cne typy us\u0142ug sieciowych: <\/p>\n<ul>\n<li>Us\u0142ugi infrastrukturalne<\/li>\n<li>Us\u0142ugi klienckie.<\/li>\n<\/ul>\n<p>Pierwsze maj\u0105 na celu zapewnienie podstawowej \u0142\u0105czno\u015bci i zarz\u0105dzania urz\u0105dzeniem. Mo\u017cna tu wymieni\u0107 VTY, SNMP, NTP, Syslog, AAA, protoko\u0142y routingu, CoPP itp. <br \/>\nDrugie organizuj\u0105 us\u0142ugi dla klienta: MPLS L2\/L3VPN, GRE, VXLAN, VLAN, L2TP itp. <br \/>\nOczywi\u015bcie istniej\u0105 te\u017c przypadki graniczne \u2014 gdzie zaklasyfikowa\u0107 MPLS LDP, BGP? Protoko\u0142y routingu r\u00f3wnie\u017c mog\u0105 by\u0107 u\u017cywane dla klient\u00f3w. Ale to nie jest kluczowe. <\/p>\n<p>Oba typy us\u0142ug dziel\u0105 si\u0119 na prymitywy konfiguracyjne:<\/p>\n<ul>\n<li>fizyczne i logiczne interfejsy (tag\/untag, mtu)<\/li>\n<li>Adresy IP i VRF (IP, IPv6, VRF)<\/li>\n<li>ACL i polityki przetwarzania ruchu<\/li>\n<li>Protoko\u0142y (IGP, BGP, MPLS)<\/li>\n<li>Polityki routingu (listy prefiks\u00f3w, spo\u0142eczno\u015bci, filtry ASN).<\/li>\n<li>Us\u0142ugowe serwisy (SSH, NTP, LLDP, Syslog\u2026)<\/li>\n<li>Itd.<\/li>\n<\/ul>\n<p>\nTrudno mi na razie powiedzie\u0107, jak dok\u0142adnie to zrobimy. Rozwi\u0105\u017cemy to w osobnym artykule.<\/p>\n<p><img decoding=\"async\" alt=\"Automatyzacja dla najmniejszych. Cz\u0119\u015b\u0107 zerowa. Planowanie\" src=\"\/wp-content\/uploads\/2019\/07\/092bc3a4b875f4a6422ee13fb580ba4f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJe\u015bli podejdziemy do tego nieco bli\u017cej \u017cycia, mogliby\u015bmy opisa\u0107, co<br \/>\nPrze\u0142\u0105cznik Leaf musi mie\u0107 sesje BGP z wszystkimi pod\u0142\u0105czonymi prze\u0142\u0105cznikami Spine, importowa\u0107 do procesu pod\u0142\u0105czone sieci, akceptowa\u0107 od prze\u0142\u0105cznik\u00f3w Spine tylko sieci z okre\u015blonym prefiksem. Ogranicza\u0107 CoPP IPv6 ND do 10 pps itd. <br \/>\nZ kolei spine'y utrzymuj\u0105 sesje ze wszystkimi pod\u0142\u0105czonymi leafami, dzia\u0142aj\u0105c jako root-reflectory, i akceptuj\u0105 od nich tylko trasy o okre\u015blonej d\u0142ugo\u015bci i z okre\u015blon\u0105 spo\u0142eczno\u015bci\u0105.<\/p>\n<h2>Komponent 4. Mechanizm inicjalizacji urz\u0105dzenia<\/h2>\n<p>\nPod tym nag\u0142\u00f3wkiem \u0142\u0105cz\u0119 wiele dzia\u0142a\u0144, kt\u00f3re musz\u0105 mie\u0107 miejsce, aby urz\u0105dzenie pojawi\u0142o si\u0119 na radarach i mo\u017cna by\u0142o do niego zdalnie uzyska\u0107 dost\u0119p.<\/p>\n<ol>\n<li>Wprowadzenie urz\u0105dzenia do systemu inwentaryzacyjnego.<\/li>\n<li>Przydzielenie adresu IP zarz\u0105dzania.<\/li>\n<li>Skonfigurowanie podstawowego dost\u0119pu do niego: <br \/>\nNazwa hosta, adres IP zarz\u0105dzania, trasa do sieci zarz\u0105dzaj\u0105cej, u\u017cytkownicy, klucze SSH, protoko\u0142y \u2014 telnet\/SSH\/NETCONF<\/li>\n<\/ol>\n<p>Istniej\u0105 trzy podej\u015bcia:<\/p>\n<ul>\n<li>Ca\u0142kowicie r\u0119cznie. Urz\u0105dzenie jest przynoszone na stanowisko, gdzie zwyk\u0142y cz\u0142owiek wprowadza je do system\u00f3w, pod\u0142\u0105cza konsol\u0105 i konfiguruje. Mo\u017ce dzia\u0142a\u0107 w niewielkich, statycznych sieciach.<\/li>\n<li>ZTP \u2014 Zero Touch Provisioning. Sprz\u0119t przyjecha\u0142, ustawi\u0142 si\u0119, po DHCP otrzyma\u0142 adres, po\u0142\u0105czy\u0142 si\u0119 z specjalnym serwerem, samonastawi\u0142. <\/li>\n<li>Infrastruktura serwer\u00f3w konsolowych, gdzie wst\u0119pna konfiguracja odbywa si\u0119 automatycznie przez port konsolowy.<\/li>\n<\/ul>\n<p>O trzech rzeczach porozmawiamy w osobnym artykule.<\/p>\n<p><img decoding=\"async\" alt=\"Automatyzacja dla najmniejszych. Cz\u0119\u015b\u0107 zerowa. Planowanie\" src=\"\/wp-content\/uploads\/2019\/07\/6d8d061e53b508edbbcbd98fe496ca91.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Komponent 5. Wzorzec konfiguracyjny niezale\u017cny od dostawcy<\/h2>\n<p>\nDo tej pory wszystkie systemy by\u0142y rozdzielnymi fragmentami, kt\u00f3re dawa\u0142y zmienne i deklaratywny opis tego, co chcieliby\u015bmy widzie\u0107 w sieci. Ale pr\u0119dzej czy p\u00f3\u017aniej trzeba b\u0119dzie zmierzy\u0107 si\u0119 z konkretnymi rzeczami. <br \/>\nNa tym etapie dla ka\u017cdego konkretnego urz\u0105dzenia prymitywy, serwisy i zmienne s\u0105 \u0142\u0105czone w model konfiguracyjny, kt\u00f3ry w\u0142a\u015bciwie opisuje pe\u0142n\u0105 konfiguracj\u0119 konkretnego urz\u0105dzenia, ale w spos\u00f3b niezale\u017cny od dostawcy. <br \/>\nCo daje ten krok? Dlaczego nie formowa\u0107 od razu konfiguracji urz\u0105dzenia, kt\u00f3r\u0105 mo\u017cna po prostu za\u0142adowa\u0107? <br \/>\nW rzeczywisto\u015bci pozwala to na rozwi\u0105zanie trzech zada\u0144:<\/p>\n<ol>\n<li> Nie dostosowuj si\u0119 do konkretnego interfejsu interakcji z urz\u0105dzeniem. Niezale\u017cnie od tego, czy to CLI, NETCONF, RESTCONF, SNMP \u2014 model b\u0119dzie taki sam.<\/li>\n<li> Nie utrzymuj liczby szablon\u00f3w\/skrypt\u00f3w w zale\u017cno\u015bci od liczby dostawc\u00f3w w sieci i w przypadku zmiany projektu, zmieniaj to samo w wielu miejscach.<\/li>\n<li> \u0141aduj konfiguracj\u0119 z urz\u0105dzenia (kopii zapasowej), uk\u0142adaj j\u0105 w dok\u0142adnie taki sam model i bezpo\u015brednio por\u00f3wnuj celow\u0105 konfiguracj\u0119 z bie\u017c\u0105c\u0105, aby obliczy\u0107 r\u00f3\u017cnic\u0119 i przygotowa\u0107 \u0142atk\u0119 konfiguracyjn\u0105, kt\u00f3ra zmieni tylko te cz\u0119\u015bci, kt\u00f3re s\u0105 potrzebne, lub w celu wykrycia odchyle\u0144.<\/li>\n<\/ol>\n<p><img decoding=\"async\" alt=\"Automatyzacja dla najmniejszych. Cz\u0119\u015b\u0107 zerowa. Planowanie\" src=\"\/wp-content\/uploads\/2019\/07\/a154c42ebe7978fcc5b2ce4f235516c9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW wyniku tego etapu uzyskujemy konfiguracj\u0119 niezale\u017cn\u0105 od dostawcy.<\/p>\n<h2>Komponent 6. Interfejs dostawcy specyficzny dla sterownika.<\/h2>\n<p>\nNie ma sensu \u0142udzi\u0107 si\u0119, \u017ce kiedy\u015b konfiguracja Cisco b\u0119dzie mog\u0142a by\u0107 tak samo prosta jak Junipera, po prostu wysy\u0142aj\u0105c do nich absolutnie identyczne wywo\u0142ania. Pomimo rosn\u0105cej popularno\u015bci whitebox\u00f3w i wprowadzenia wsparcia dla NETCONF, RESTCONF, OpenConfig, konkretny content dostarczany przez te protoko\u0142y r\u00f3\u017cni si\u0119 w zale\u017cno\u015bci od dostawcy i stanowi jedno z ich konkurencyjnych wyr\u00f3\u017cnie\u0144, kt\u00f3rego tak \u0142atwo nie oddadz\u0105. <br \/>\nTo mniej wi\u0119cej tak, jak OpenContrail i OpenStack, kt\u00f3re maj\u0105 RestAPI jako sw\u00f3j interfejs p\u00f3\u0142nocny, oczekuj\u0105 zupe\u0142nie r\u00f3\u017cnych wywo\u0142a\u0144. <\/p>\n<p>Zatem na pi\u0105tym kroku niezale\u017cny od dostawcy model powinien przyj\u0105\u0107 form\u0119, w kt\u00f3rej zostanie za\u0142adowany na sprz\u0119t. <br \/>\nI tutaj wszystkie metody s\u0105 dobre (nie): CLI, NETCONF, RESTCONF, SNMP prosto z piek\u0142a.<\/p>\n<p>Dlatego potrzebujemy sterownika, kt\u00f3ry przekszta\u0142ci wyniki poprzedniego kroku w odpowiedni format konkretnego dostawcy: zestaw komend CLI, struktura XML.<\/p>\n<p><img decoding=\"async\" alt=\"Automatyzacja dla najmniejszych. Cz\u0119\u015b\u0107 zerowa. Planowanie\" src=\"\/wp-content\/uploads\/2019\/07\/6ed8e935183075fda60a209477f84937.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Komponent 7. Mechanizm dostarczania konfiguracji do urz\u0105dzenia.<\/h2>\n<p>\nKonfiguracj\u0119 wygenerowali\u015bmy, ale trzeba j\u0105 jeszcze dostarczy\u0107 do urz\u0105dze\u0144 \u2014 i oczywi\u015bcie nie r\u0119cznie. <br \/>\n<b>Po pierwsze,<\/b>staje przed nami pytanie, jaki transport wykorzystamy? A wyb\u00f3r obecnie jest ju\u017c niema\u0142y:<\/p>\n<ul>\n<li>CLI (telnet, ssh)<\/li>\n<li>SNMP<\/li>\n<li>JSON<\/li>\n<li>zapytaniach RESTCONF mo\u017cna zarz\u0105dza\u0107 tymi urz\u0105dzeniami. Nie b\u0119dziemy pracowa\u0107 z fizycznym sprz\u0119tem, zamiast tego uruchomimy ma\u0142e wirtualne laboratoria z jednym, jedynym routerem za pomoc\u0105<\/li>\n<li>REST API<\/li>\n<li>OpenFlow (cho\u0107 wyr\u00f3\u017cnia si\u0119 na li\u015bcie, poniewa\u017c to spos\u00f3b dostarczania FIB, a nie ustawie\u0144)<\/li>\n<\/ul>\n<p>Porozstawiajmy tu kropki nad i. CLI \u2013 to legenda. SNMP\u2026 khem-khem.<br \/>\nRESTCONF \u2014 pr\u0119dko jeszcze nieznany stw\u00f3r, REST API nie jest wspierane prawie przez nikogo. Dlatego w tym cyklu skupimy si\u0119 na NETCONF.<\/p>\n<p>W rzeczywisto\u015bci, jak ju\u017c zrozumia\u0142 czytelnik, w tym momencie ustalili\u015bmy ju\u017c interfejs \u2013 wynik poprzedniego kroku zosta\u0142 przedstawiony w formacie wybranego interfejsu.<\/p>\n<p><b>Po drugie<\/b>, a jakimi narz\u0119dziami b\u0119dziemy to robi\u0107?<br \/>\nW tym przypadku wyboru jest r\u00f3wnie\u017c du\u017co:<\/p>\n<ul>\n<li>Skrypt pisany samodzielnie lub platforma. Uzbroimy si\u0119 w ncclient i asyncIO i zrobimy to wszystko sami. Co nam stoi na przeszkodzie, aby zbudowa\u0107 system wdro\u017cenia od podstaw?<\/li>\n<li>Ansible z jego bogat\u0105 bibliotek\u0105 modu\u0142\u00f3w sieciowych.<\/li>\n<li>Salt, kt\u00f3ry ma ograniczone mo\u017cliwo\u015bci pracy z sieci\u0105 i integracji z Napalm.<\/li>\n<li>W\u0142a\u015bciwie Napalm, kt\u00f3ry zna kilku dostawc\u00f3w i to wszystko, do widzenia.<\/li>\n<li>Nornir \u2014 jeszcze jeden szkrab, kt\u00f3rego przeanalizujemy w przysz\u0142o\u015bci.<\/li>\n<\/ul>\n<p>Tutaj jeszcze faworyt nie zosta\u0142 wybrany \u2014 b\u0119dziemy to bada\u0107.<\/p>\n<p>Co jeszcze jest wa\u017cne? Konsekwencje zastosowania konfiguracji. <br \/>\nSkutecznie czy nie. Czy dost\u0119p do urz\u0105dzenia pozosta\u0142, czy nie. <br \/>\nWydaje si\u0119, \u017ce tutaj pomo\u017ce commit z potwierdzeniem i walidacj\u0105 tego, co za\u0142adowano do urz\u0105dzenia. <br \/>\nTo w po\u0142\u0105czeniu z prawid\u0142ow\u0105 realizacj\u0105 NETCONF znacz\u0105co zaw\u0119\u017ca kr\u0105g odpowiednich urz\u0105dze\u0144 \u2014 normalne commity nie s\u0105 wspierane przez wielu producent\u00f3w. Ale to jest tylko jeden z wymog\u00f3w w <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B0%D0%BF%D1%80%D0%BE%D1%81_%D0%BF%D1%80%D0%B5%D0%B4%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F\">RFP<\/a><\/noindex>. W ko\u0144cu nikt si\u0119 nie martwi, \u017ce \u017caden rosyjski dostawca nie przejdzie pod warunkiem 32*100GE interfejsu. A mo\u017ce si\u0119 martwi?<\/p>\n<p><img decoding=\"async\" alt=\"Automatyzacja dla najmniejszych. Cz\u0119\u015b\u0107 zerowa. Planowanie\" src=\"\/wp-content\/uploads\/2019\/07\/59d8ad3b55b9c107642550bb06fc759a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Komponent 8. CI\/CD<\/h2>\n<p>\nNa tym etapie mamy ju\u017c gotow\u0105 konfiguracj\u0119 dla wszystkich urz\u0105dze\u0144 w sieci.<br \/>\nPisz\u0119 \u201edla wszystkich\u201d, poniewa\u017c m\u00f3wimy o wersjonowaniu stanu sieci. I nawet je\u015bli trzeba zmieni\u0107 ustawienia tylko jednego switcha, obliczane s\u0105 zmiany dla ca\u0142ej sieci. Oczywi\u015bcie mog\u0105 one by\u0107 w tym przypadku zerowe dla wi\u0119kszo\u015bci w\u0119z\u0142\u00f3w.<\/p>\n<p>Jednak, jak ju\u017c wcze\u015bniej wspomniano, nie jeste\u015bmy jakimi\u015b barbarzy\u0144cami, aby wprowadza\u0107 wszystko od razu do produkcji. <br \/>\nWygenerowana konfiguracja musi najpierw przej\u015b\u0107 przez Pipeline CI\/CD.<\/p>\n<blockquote><p>CI\/CD oznacza Continuous Integration, Continuous Deployment. To podej\u015bcie, w kt\u00f3rym zesp\u00f3\u0142 nie wdra\u017ca nowego du\u017cego wydania raz na p\u00f3\u0142 roku, ca\u0142kowicie zast\u0119puj\u0105c stare, ale regularnie wprowadza (Deployment) now\u0105 funkcjonalno\u015b\u0107 w ma\u0142ych porcjach, z ka\u017cd\u0105 z nich wnikliwie testuj\u0105c na zgodno\u015b\u0107, bezpiecze\u0144stwo i funkcjonalno\u015b\u0107 (Integration).\n<\/p><\/blockquote>\n<p>Mamy system kontroli wersji, kt\u00f3ry \u015bledzi zmiany w konfiguracji, laboratorium, w kt\u00f3rym testujemy, czy us\u0142uga dla klienta dzia\u0142a poprawnie, system monitorowania, kt\u00f3ry to sprawdza, a ostatnim krokiem jest wprowadzenie zmian do sieci produkcyjnej.<\/p>\n<p>Z wyj\u0105tkiem polece\u0144 debuguj\u0105cych, wszystkie zmiany w sieci musz\u0105 przej\u015b\u0107 przez CI\/CD Pipeline \u2014 to nasza gwarancja spokojnego \u017cycia i d\u0142ugiej, szcz\u0119\u015bliwej kariery.<\/p>\n<p><img decoding=\"async\" alt=\"Automatyzacja dla najmniejszych. Cz\u0119\u015b\u0107 zerowa. Planowanie\" src=\"\/wp-content\/uploads\/2019\/07\/101a5ff87c7a9c7b6776aca9daf762a4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Komponent 9. System tworzenia kopii zapasowych i wyszukiwania odchyle\u0144<\/h2>\n<p>\nNie ma co przypomina\u0107 o kopiach zapasowych. <br \/>\nB\u0119dziemy je po prostu archiwizowa\u0107 co okre\u015blony czas lub po wprowadzeniu zmiany w konfiguracji w Gicie.<\/p>\n<p>A druga cz\u0119\u015b\u0107 jest ciekawsza \u2014 kto\u015b musi dogl\u0105da\u0107 tych kopii zapasowych. W niekt\u00f3rych przypadkach ten kto\u015b powinien przywr\u00f3ci\u0107 wszystko do stanu poprzedniego, a w innych da\u0107 zna\u0107, \u017ce co\u015b jest nie tak. <br \/>\nNa przyk\u0142ad, gdy pojawia si\u0119 nowy u\u017cytkownik, kt\u00f3ry nie jest zapisany w zmiennych, nale\u017cy go usun\u0105\u0107 z systemu. A nowe regu\u0142y zapory lepiej nie rusza\u0107, by\u0107 mo\u017ce kto\u015b w\u0142\u0105czy\u0142 debugowanie, a mo\u017ce nowa us\u0142uga, nieprzestrzegaj\u0105ca regulaminu, zosta\u0142a wprowadzona, i ju\u017c korzystaj\u0105 z niej u\u017cytkownicy.<\/p>\n<p>Z jak\u0105kolwiek niewielk\u0105 delt\u0105 w skali ca\u0142ej sieci i tak nie uciekniemy, niezale\u017cnie od jakichkolwiek system\u00f3w automatyzacji i \u017celaznej r\u0119ki zarz\u0105dzania. W przypadku debugowania problem\u00f3w nikt i tak nie b\u0119dzie wprowadza\u0107 zmiany w konfiguracji do system\u00f3w. Tym bardziej, \u017ce model konfiguracji w og\u00f3le jej nie przewiduje. <\/p>\n<blockquote><p>Na przyk\u0142ad, regu\u0142a zapory do zliczania liczby pakiet\u00f3w na okre\u015blony adres IP, aby zlokalizowa\u0107 problem \u2014 to ca\u0142kiem standardowa tymczasowa konfiguracja.\n<\/p><\/blockquote>\n<p><img decoding=\"async\" alt=\"Automatyzacja dla najmniejszych. Cz\u0119\u015b\u0107 zerowa. Planowanie\" src=\"\/wp-content\/uploads\/2019\/07\/390f78139d336f1fc2c60573bccfe76c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Komponent 10. System monitorowania<\/h2>\n<p>\nNa pocz\u0105tku nie zamierza\u0142em porusza\u0107 tematu monitorowania \u2014 to w ko\u0144cu obszerny, kontrowersyjny i skomplikowany temat. Ale okaza\u0142o si\u0119, \u017ce jest to nieod\u0142\u0105czna cz\u0119\u015b\u0107 automatyzacji. Nie da si\u0119 tego jako\u015b omin\u0105\u0107, nawet bez praktyki. <\/p>\n<p>Rozwijaj\u0105c my\u015bl \u2014 to organiczna cz\u0119\u015b\u0107 procesu CI\/CD. Po wprowadzeniu konfiguracji do sieci musimy umie\u0107 oceni\u0107, czy wszystko z ni\u0105 jest w porz\u0105dku. <br \/>\nNie chodzi tylko i wy\u0142\u0105cznie o wykresy wykorzystania interfejs\u00f3w czy dost\u0119pno\u015b\u0107 w\u0119z\u0142\u00f3w, ale tak\u017ce o bardziej subtelne sprawy \u2014 obecno\u015b\u0107 odpowiednich tras, atrybut\u00f3w na nich, liczby sesji BGP, s\u0105siad\u00f3w OSPF, a tak\u017ce funkcjonowaniu end-to-end wy\u017cszych us\u0142ug.<br \/>\nCzy logi systemowe przesta\u0142y by\u0107 przesy\u0142ane na zewn\u0119trzny serwer, czy agent SFlow przesta\u0142 dzia\u0142a\u0107, czy wzros\u0142a liczba drop\u00f3w w kolejkach, czy nie wyst\u0105pi\u0142y problemy z \u0142\u0105czno\u015bci\u0105 mi\u0119dzy jak\u0105\u015b par\u0105 prefiks\u00f3w?<\/p>\n<p>W osobnym artykule zastanowimy si\u0119 nad tym.<\/p>\n<p><img decoding=\"async\" alt=\"Automatyzacja dla najmniejszych. Cz\u0119\u015b\u0107 zerowa. Planowanie\" src=\"\/wp-content\/uploads\/2019\/07\/08aeee4939081abb21e61abadd0ce5de.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><img decoding=\"async\" alt=\"Automatyzacja dla najmniejszych. Cz\u0119\u015b\u0107 zerowa. Planowanie\" src=\"\/wp-content\/uploads\/2019\/07\/13c186070c85fd00f7b6923df154f1b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h1>Podsumowanie<\/h1>\n<p>\nJako podstaw\u0119 wybra\u0142em jeden z nowoczesnych design\u00f3w sieci w centrum danych \u2014 L3 Clos Fabric z BGP jako protoko\u0142em routingu.<br \/>\nTym razem zbudujemy sie\u0107 na Juniper, poniewa\u017c teraz interfejs JunOs to prawdziwy hit.<\/p>\n<p>Utrudnimy sobie \u017cycie korzystaj\u0105c tylko z narz\u0119dzi Open Source i sieci wielobrandowej \u2014 dlatego opr\u00f3cz Junipera wybior\u0119 jeszcze jednego szcz\u0119\u015bliwca.<\/p>\n<p>Plan najbli\u017cszych publikacji wygl\u0105da mniej wi\u0119cej tak:<br \/>\nNajpierw opowiem o sieciach wirtualnych. Po pierwsze, dlatego, \u017ce mam na to ochot\u0119, a po drugie, \u017ce bez tego design infrastrukturalnej sieci b\u0119dzie ma\u0142o zrozumia\u0142y.<br \/>\nPotem w\u0142a\u015bciwie o designie sieci: topologii, routingu, politykach.<br \/>\nZbudujemy laboratorium.<br \/>\nZastanowimy si\u0119 i mo\u017ce po\u0107wiczymy w inicjalizacji urz\u0105dzenia w sieci.<br \/>\nA potem szczeg\u00f3\u0142y ka\u017cdego komponentu.<\/p>\n<p>I tak, nie obiecuj\u0119, \u017ce zako\u0144cz\u0119 ten cykl gotowym rozwi\u0105zaniem. \ud83d\ude42<\/p>\n<h5>Przydatne linki<\/h5>\n<p><\/p>\n<ul>\n<li>Zanim zag\u0142\u0119bimy si\u0119 w seri\u0119, warto przeczyta\u0107 ksi\u0105\u017ck\u0119 Natalii Samojlenko <noindex><a rel=\"nofollow\" href=\"https:\/\/natenka.gitbook.io\/pyneng\/\">Python dla in\u017cynier\u00f3w sieciowych<\/a><\/noindex>. Mo\u017ce warto r\u00f3wnie\u017c odby\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/natenka.github.io\/pyneng-online\/\">kurs<\/a><\/noindex>.<\/li>\n<li>Dobrze b\u0119dzie r\u00f3wnie\u017c poczyta\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/tools.ietf.org\/html\/rfc7938\">RFC<\/a><\/noindex> o designie fabryk centr\u00f3w danych autorstwa Facebooka, autorstwa Piotra Lapuchowa.<\/li>\n<li>Dokumentacja dotycz\u0105ca architektury da ci wyobra\u017cenie o tym, jak dzia\u0142a Overlay'owe SDN. <noindex><a rel=\"nofollow\" href=\"https:\/\/tungstenfabric.github.io\/website\/Tungsten-Fabric-Architecture.html\">Tungsten Fabric<\/a><\/noindex> (wcze\u015bniej Open Contrail).<\/li>\n<\/ul>\n<h5>Dzi\u0119kuj\u0119<\/h5>\n<p>\nRomanowi Gorgiemu. Za komentarze i poprawki.<br \/>\nArtemowi Czerwonowajowi. Za KDPW.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/453516\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u0414\u0421\u041c \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f, \u0430 \u0431\u0435\u0441\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u2014 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c. \u0414\u043e\u043b\u0433\u0438\u0435 \u0433\u043e\u0434\u044b \u043d\u0430\u0448 \u0431\u0440\u0430\u0442 \u0441\u0442\u0440\u0430\u0434\u0430\u043b \u043e\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u0443\u0442\u0438\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b, \u0441\u043a\u0440\u0435\u0449\u0438\u0432\u0430\u043b \u043f\u0430\u043b\u044c\u0446\u044b \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u043c \u0438 \u043d\u0435\u0434\u043e\u0441\u044b\u043f\u0430\u043b \u0438\u0437-\u0437\u0430 \u043d\u043e\u0447\u043d\u044b\u0445 \u0440\u043e\u043b\u0431\u044d\u043a\u043e\u0432. \u041d\u043e \u0442\u0451\u043c\u043d\u044b\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a\u043e\u043d\u0435\u0446. \u042d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0451\u0439 \u044f \u043d\u0430\u0447\u043d\u0443 \u0441\u0435\u0440\u0438\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u043d\u0435 \u0432\u0438\u0434\u0438\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f. \u041f\u043e \u0445\u043e\u0434\u0443 \u0434\u0435\u043b\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f \u0441 \u044d\u0442\u0430\u043f\u0430\u043c\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438, \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0434\u0438\u0437\u0430\u0439\u043d\u0430, \u0441 RestAPI, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26891,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-35972","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=\"\u0421\u0414\u0421\u041c \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f, \u0430 \u0431\u0435\u0441\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u2014 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c.\" \/>\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\/avtomatizatsiya-dlya-samyh-malenkih-chast-nulevaya-planirovanie\" \/>\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\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445. \u0427\u0430\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u0430\u044f. \u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u0414\u0421\u041c \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f, \u0430 \u0431\u0435\u0441\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u2014 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/avtomatizatsiya-dlya-samyh-malenkih-chast-nulevaya-planirovanie\" \/>\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=\"2019-10-31T19:08:54+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:08:54+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\udd47Automatyzacja dla najmniejszych. Cz\u0119\u015b\u0107 zerowa. Planowanie | ProHoster","description":"SDCM si\u0119 sko\u0144czy\u0142, ale niekontrolowane pragnienie pisania pozosta\u0142o.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/avtomatizatsiya-dlya-samyh-malenkih-chast-nulevaya-planirovanie","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\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445. \u0427\u0430\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u0430\u044f. \u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 | ProHoster","og:description":"\u0421\u0414\u0421\u041c \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f, \u0430 \u0431\u0435\u0441\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u2014 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/avtomatizatsiya-dlya-samyh-malenkih-chast-nulevaya-planirovanie","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":"2019-10-31T19:08:54+00:00","article:modified_time":"2019-10-31T19:08:54+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35972","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":"2026-01-22 01:28:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 09:58:22","updated":"2026-01-22 01:28:20","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\/35972","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=35972"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/35972\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/26891"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=35972"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=35972"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=35972"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}