{"id":83787,"date":"2020-06-03T07:42:26","date_gmt":"2020-06-03T05:42:26","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2"},"modified":"2020-06-03T07:42:26","modified_gmt":"2020-06-03T05:42:26","slug":"devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2","title":{"rendered":"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kubernetes to doskona\u0142e narz\u0119dzie do uruchamiania kontener\u00f3w Docker w zgrupowanym \u015brodowisku produkcyjnym. Istniej\u0105 jednak zadania, kt\u00f3re Kubernetes nie jest w stanie rozwi\u0105za\u0107. Przy cz\u0119stym wdra\u017caniu w \u015brodowisku produkcyjnym potrzebujemy w pe\u0142ni zautomatyzowanego wdro\u017cenia Blue\/Green, aby unikn\u0105\u0107 przestoj\u00f3w w tym procesie, kt\u00f3ry r\u00f3wnie\u017c wymaga obs\u0142ugi zewn\u0119trznych \u017c\u0105da\u0144 HTTP i realizacji eksportu SSL. Wymaga to integracji z takim serwerem r\u00f3wnowa\u017c\u0105cym, jak ha-proxy. Kolejnym zadaniem jest p\u00f3\u0142automatyczne skalowanie samego klastra Kubernetes w chmurze, na przyk\u0142ad cz\u0119\u015bciowe zmniejszanie skali klastra w nocy.<\/p>\n<p>Cho\u0107 Kubernetes nie ma tych funkcji \"prosto z pude\u0142ka\", oferuje API, z kt\u00f3rego mo\u017cna skorzysta\u0107, aby rozwi\u0105za\u0107 podobne problemy. Narz\u0119dzia do automatyzowanego wdro\u017cenia Blue\/Green i skalowania klastra Kubernetes zosta\u0142y opracowane w ramach projektu Cloud RTI, kt\u00f3ry stworzono na podstawie open-source.<\/p>\n<p>W tym artykule, b\u0119d\u0105cym transkrypcj\u0105 wideo, opisano, jak skonfigurowa\u0107 Kubernetes wraz z innymi komponentami open-source, aby uzyska\u0107 gotowe do produkcji \u015brodowisko, kt\u00f3re bez przestoj\u00f3w w produkcji przyjmuje kod z commita git commit.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/43a4ba56526a91b6f3d1fb16c159cc1b.jpg\" style=\"display:block;margin: 0 auto;\" \/><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ua-hosting\/blog\/504666\/\">DEVOXX UK. Kubernetes w produkcji: wdro\u017cenie Blue\/Green, automatyczne skalowanie i automatyzacja wdra\u017cania. Cz\u0119\u015b\u0107 1<\/a><\/noindex><\/p>\n<p>A wi\u0119c, po uzyskaniu dost\u0119pu do swoich aplikacji z zewn\u0105trz, mo\u017cna przyst\u0105pi\u0107 do pe\u0142nej konfiguracji automatyzacji, czyli doprowadzi\u0107 j\u0105 do etapu, na kt\u00f3rym mo\u017cna wykona\u0107 git commit i upewni\u0107 si\u0119, \u017ce ten git commit ko\u0144czy si\u0119 w produkcji. Oczywi\u015bcie, przy realizacji tych krok\u00f3w, podczas wdra\u017cania, nie chcemy do\u015bwiadcza\u0107 przestoj\u00f3w. Zatem wszelka automatyzacja w Kubernetes zaczyna si\u0119 od API. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/aa470c1562e49d98a164e0485196426e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKubernetes to nie jest narz\u0119dzie, kt\u00f3re mo\u017cna efektywnie wykorzystywa\u0107 \"prosto z pude\u0142ka\". Oczywi\u015bcie, mo\u017cna tak zrobi\u0107, u\u017cywaj\u0105c kubectl i tak dalej, ale to API jest najciekawsz\u0105 i najbardziej przydatn\u0105 cz\u0119\u015bci\u0105 tej platformy. Korzystaj\u0105c z API jako zestawu funkcji, mo\u017cna uzyska\u0107 dost\u0119p niemal do wszystkiego, co chcesz zrobi\u0107 w Kubernetes. Sam kubectl r\u00f3wnie\u017c korzysta z REST API. <\/p>\n<p>To jest REST, wi\u0119c mo\u017cesz u\u017cywa\u0107 dowolnych j\u0119zyk\u00f3w i narz\u0119dzi do pracy z tym API, ale znacznie u\u0142atwi\u0105 ci \u017cycie biblioteki u\u017cytkownik\u00f3w. M\u00f3j zesp\u00f3\u0142 napisa\u0142 2 takie biblioteki: jedn\u0105 dla Java \/ OSGi i jedn\u0105 dla Go. Ta druga nie jest cz\u0119sto u\u017cywana, ale w ka\u017cdym razie masz te u\u017cyteczne narz\u0119dzia do dyspozycji. S\u0105 one cz\u0119\u015bciowo licencjonowanym projektem open-source. Istnieje wiele takich bibliotek dla r\u00f3\u017cnych j\u0119zyk\u00f3w, wi\u0119c mo\u017cesz wybra\u0107 najbardziej odpowiednie. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/808865e4cda6023c6775ec9e581fc46e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZanim jednak przyst\u0105pisz do automatyzacji wdra\u017cania, musisz upewni\u0107 si\u0119, \u017ce ten proces nie b\u0119dzie nara\u017cony na jakiekolwiek przestoje. Na przyk\u0142ad nasz zesp\u00f3\u0142 przeprowadza wdro\u017cenia produkcyjne w po\u0142udnie, kiedy ludzie maksymalnie korzystaj\u0105 z aplikacji, dlatego bardzo wa\u017cne jest, aby unikn\u0105\u0107 op\u00f3\u017anie\u0144 w tym procesie. Aby unikn\u0105\u0107 przestoj\u00f3w, stosuje si\u0119 2 metody: wdra\u017canie blue\/green lub skrolling update. W tym drugim przypadku, je\u015bli masz 5 replik aplikacji, s\u0105 one aktualizowane jedna po drugiej. Ta metoda dzia\u0142a \u015bwietnie, ale nie jest odpowiednia, gdy podczas wdra\u017cania masz uruchomione r\u00f3\u017cne wersje aplikacji. W takim przypadku mo\u017cesz zaktualizowa\u0107 interfejs u\u017cytkownika, podczas gdy backend b\u0119dzie pracowa\u0107 ze starsz\u0105 wersj\u0105, co spowoduje przerwanie dzia\u0142ania aplikacji. Dlatego z punktu widzenia programowania praca w takich warunkach jest do\u015b\u0107 trudna. <\/p>\n<p>Jednym z powod\u00f3w, dla kt\u00f3rych preferujemy u\u017cywa\u0107 wdro\u017cenia blue\/green do automatyzacji wdra\u017cania naszych aplikacji, jest to, \u017ce w tym podej\u015bciu musisz upewni\u0107 si\u0119, \u017ce w danym momencie aktywna jest tylko jedna wersja aplikacji. <\/p>\n<p>Mechanizm wdro\u017cenia blue\/green wygl\u0105da nast\u0119puj\u0105co. Otrzymujemy ruch dla naszych aplikacji przez ha-proxy, kt\u00f3re kieruje go do uruchomionych replik aplikacji tej samej wersji. <\/p>\n<p>Kiedy nast\u0119puje nowe wdro\u017cenie, u\u017cywamy Deployer, kt\u00f3remu dostarczane s\u0105 nowe komponenty, a on przeprowadza wdro\u017cenie nowej wersji. Wdro\u017cenie nowej wersji aplikacji oznacza, \u017ce \"podnosi si\u0119\" nowy zestaw replik, po czym te repliki nowej wersji uruchamiane s\u0105 w oddzielnym, nowym podzie. Jednak ha-proxy nic o nich nie wie i na razie nie kieruje do nich \u017cadnego obci\u0105\u017cenia.<\/p>\n<p>Dlatego w pierwszej kolejno\u015bci nale\u017cy przeprowadzi\u0107 testy sprawno\u015bci nowych wersji health checking, aby upewni\u0107 si\u0119, \u017ce repliki s\u0105 gotowe do obs\u0142ugi obci\u0105\u017cenia.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/6134f89567ac3627197883b2f4c768d4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWszystkie komponenty wdro\u017ceniowe musz\u0105 wspiera\u0107 jak\u0105\u015b form\u0119 health check. Mo\u017ce to by\u0107 bardzo prosta kontrola HTTP z wywo\u0142aniem, kiedy otrzymujesz kod ze statusem 200, lub bardziej szczeg\u00f3\u0142owa kontrola, w kt\u00f3rej sprawdzasz po\u0142\u0105czenie replik z baz\u0105 danych i innymi us\u0142ugami, stabilno\u015b\u0107 po\u0142\u0105cze\u0144 w dynamicznym \u015brodowisku, czy wszystko dzia\u0142a i funkcjonuje poprawnie. Proces ten mo\u017ce by\u0107 do\u015b\u0107 skomplikowany. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/fdc537599187b32ab97bc00970283e1a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPo tym, jak system upewni si\u0119 w sprawno\u015bci wszystkich zaktualizowanych replik, Deployer zaktualizuje konfiguracj\u0119 i przeka\u017ce w\u0142a\u015bciwy confd, kt\u00f3ry przestawi ha-proxy. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/099240482096c2ac4aafe7e803409511.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTylko po tym ruch b\u0119dzie kierowany do podu z replikami nowej wersji, a stary pod zniknie. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/f656b3a3adfc27e782e5d9785b8b615e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTen mechanizm nie jest cech\u0105 Kubernetes. Koncepcja Blue\/green deployment istnieje od d\u0142u\u017cszego czasu i zawsze wykorzystywa\u0142a load balancer. Najpierw kierujesz ca\u0142y ruch do starej wersji aplikacji, a po aktualizacji ca\u0142kowicie przekierowujesz go na now\u0105 wersj\u0119. Ta zasada jest stosowana nie tylko w Kubernetes.<\/p>\n<p>Teraz przedstawi\u0119 wam nowy komponent wdro\u017cenia \u2013 Deployer, kt\u00f3ry wykonuje testy sprawno\u015bci, rekonfiguruje proxy i tak dalej. To koncept, kt\u00f3ry nie odnosi si\u0119 do \u015bwiata zewn\u0119trznego i istnieje wewn\u0105trz Kubernetes. Poka\u017c\u0119, jak stworzy\u0107 w\u0142asny koncept Deployer przy u\u017cyciu narz\u0119dzi open-source. <\/p>\n<p>Pierwsz\u0105 rzecz\u0105, jak\u0105 robi Deployer, jest stworzenie kontrolera replikacji RC za pomoc\u0105 API Kubernetes. To API tworzy pody i us\u0142ugi do dalszego wdro\u017cenia, czyli tworzy ca\u0142kowicie nowy klaster dla naszych aplikacji. Gdy tylko RC upewni si\u0119, \u017ce repliki zosta\u0142y uruchomione, przeprowadzi ich kontrol\u0119 zdrowia poprzez Health check. W tym celu w Deployerze wykorzystuje si\u0119 polecenie GET \/health. Uruchamia ono odpowiednie komponenty weryfikuj\u0105ce i sprawdza wszystkie elementy odpowiadaj\u0105ce za dzia\u0142anie klastra. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/f2ef0232e17bc69f0b70ea9eabc2f456.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPo tym, jak wszystkie pody zg\u0142osz\u0105 swoje \"zdrowie\", Deployer tworzy nowy element konfiguracji \u2013 rozproszone magazynowanie etcd, kt\u00f3re jest u\u017cywane wewn\u0105trz Kubernetes, w tym do przechowywania konfiguracji load balancera. Zapisujemy dane w etcd, a ma\u0142e narz\u0119dzie confd monitoruje etcd w poszukiwaniu nowych danych. <\/p>\n<p>Je\u015bli znajdzie jakie\u015b zmiany w pocz\u0105tkowej konfiguracji, generuje nowy plik konfiguracyjny i przekazuje go ha-proxy. W takim przypadku ha-proxy jest restartowane bez utraty jakichkolwiek po\u0142\u0105cze\u0144 i kieruje obci\u0105\u017cenie do nowych us\u0142ug, kt\u00f3re zapewniaj\u0105 dzia\u0142anie nowej wersji naszych aplikacji. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/bef1536c2b8dee6b0da710fc6c6fda99.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJak widzicie, pomimo du\u017cej liczby komponent\u00f3w, nie ma tu nic skomplikowanego. Musisz po prostu po\u015bwi\u0119ci\u0107 wi\u0119cej uwagi API i etcd. Chc\u0119 wam opowiedzie\u0107 o open-source'owym deploerze, z kt\u00f3rego sami korzystamy \u2013 to Amdatu Kubernetes Deployer.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/34124e093d2e16fcbb80fd112c7d223f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTo narz\u0119dzie do orkiestracji wdro\u017ce\u0144 Kubernetes z takimi funkcjami: <\/p>\n<ul>\n<li>wdro\u017cenie Blue\/Green deployment;<\/li>\n<li>konfiguracja zewn\u0119trznego load balancera;<\/li>\n<li>zarz\u0105dzanie deskryptorami wdro\u017ce\u0144;<\/li>\n<li>zarz\u0105dzanie rzeczywistym wdro\u017ceniem;<\/li>\n<li>kontrola zdrowia Health checks w trakcie wdro\u017cenia;<\/li>\n<li>wstrzykiwanie zmiennych \u015brodowiskowych do pod\u00f3w.<\/li>\n<\/ul>\n<p>\nTen Deployer zosta\u0142 stworzony na bazie Kubernetes API i stanowi REST API do zarz\u0105dzania deskryptorami i wdro\u017ceniami, a tak\u017ce Websocket API do strumieniowego przesy\u0142ania log\u00f3w w trakcie wdro\u017cenia.<\/p>\n<p>Umieszcza on dane konfiguracyjne load balancera w etcd, dzi\u0119ki czemu nie musisz korzysta\u0107 z ha-proxy z obs\u0142ug\u0105 \"prosto z pude\u0142ka\", a \u0142atwo u\u017cywa\u0107 w\u0142asnego pliku konfiguracyjnego load balancera. Amdatu Deployer zosta\u0142 napisany w Go, tak jak sam Kubernetes, i jest licencjonowany na zasadzie Apache.<\/p>\n<p>Przed rozpocz\u0119ciem korzystania z tej wersji deploiera skorzysta\u0142em z nast\u0119puj\u0105cego opisu wdro\u017cenia, w kt\u00f3rym zawarte s\u0105 potrzebne mi parametry. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/14e9ecca6ad772a43afcf95a4950fad8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJednym z wa\u017cnych parametr\u00f3w tego kodu jest w\u0142\u0105czenie flagi \u201euseHealthCheck\u201d. Musimy okre\u015bli\u0107, \u017ce podczas wdra\u017cania nale\u017cy przeprowadzi\u0107 kontrol\u0119 dzia\u0142no\u015bci. Parametr ten mo\u017ce by\u0107 wy\u0142\u0105czony, gdy w wdro\u017ceniu u\u017cywane s\u0105 kontenery od zewn\u0119trznych dostawc\u00f3w, kt\u00f3re nie musz\u0105 by\u0107 kontrolowane. W tym opisie zawarte s\u0105 r\u00f3wnie\u017c liczba replik oraz URL frontend, potrzebny dla ha-proxy. Na ko\u0144cu znajduje si\u0119 flaga specyfikacji podu \u201epodspec\u201d, kt\u00f3ra odnosi si\u0119 do Kubernetes w celu uzyskania informacji na temat konfiguracji port\u00f3w, obrazu itd. Jest to do\u015b\u0107 prosty opis w formacie JSON. <\/p>\n<p>Kolejnym narz\u0119dziem, kt\u00f3re jest cz\u0119\u015bci\u0105 projektu open-source Amdatu, jest Deploymentctl. Posiada on interfejs u\u017cytkownika UI do konfigurowania wdro\u017cenia, przechowuje histori\u0119 wdro\u017ce\u0144 i zawiera webhooks do zwrot\u00f3w od u\u017cytkownik\u00f3w zewn\u0119trznych i deweloper\u00f3w. Mo\u017cesz nie korzysta\u0107 z UI, poniewa\u017c sam Amdatu Deployer jest REST API, ale ten interfejs mo\u017ce znacznie u\u0142atwi\u0107 ci wdro\u017cenie bez anga\u017cowania jakiegokolwiek API. Deploymentctl napisany jest w OSGi\/Vertx z wykorzystaniem Angular 2. <\/p>\n<p>Teraz zaprezentuj\u0119 to, co powiedzia\u0142em wcze\u015bniej na ekranie, u\u017cywaj\u0105c wcze\u015bniej nagranej sesji, aby\u015bcie nie musieli czeka\u0107. Wdro\u017cymy prost\u0105 aplikacj\u0119 w Go. Nie martwcie si\u0119, je\u015bli wcze\u015bniej nie mieli\u015bcie do czynienia z Go, to bardzo prosta aplikacja, wi\u0119c wszystko powinno by\u0107 dla was jasne. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/ab61ada396143e980d73a0bb8ff95076.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTutaj tworzymy serwer HTTP, kt\u00f3ry odpowiada jedynie na \/health, wi\u0119c ta aplikacja tylko sprawdza dzia\u0142no\u015b\u0107 health check i nic wi\u0119cej. Je\u015bli kontrola si\u0119 powiedzie, uruchomiona zostanie pokazana poni\u017cej struktura JSON. Zawiera ona wersj\u0119 aplikacji, kt\u00f3ra ma by\u0107 wdro\u017cona przez deploiera, wiadomo\u015b\u0107, kt\u00f3r\u0105 widzicie na g\u00f3rze pliku oraz boolean \u2013 czy nasza aplikacja dzia\u0142a, czy nie.<\/p>\n<p>Z ostatni\u0105 lini\u0105 troch\u0119 oszuka\u0142em, poniewa\u017c umie\u015bci\u0142em na pocz\u0105tku pliku sta\u0142\u0105 warto\u015b\u0107 boolean, kt\u00f3ra p\u00f3\u017aniej pomo\u017ce mi wdro\u017cy\u0107 nawet \u201eniedzia\u0142aj\u0105c\u0105\u201d aplikacj\u0119. P\u00f3\u017aniej si\u0119 tym zajmiemy. <\/p>\n<p>Zatem zaczynamy. Najpierw sprawdzamy, czy s\u0105 uruchomione jakie\u015b pody za pomoc\u0105 polecenia ~ kubectl get pods i braku odpowiedzi na adres URL frontendu upewniamy si\u0119, \u017ce w tej chwili nie s\u0105 prowadzone \u017cadne wdro\u017cenia. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/4da1ae467993d6e60ec539ae5ff136ff.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNast\u0119pnie na ekranie widzicie interfejs Deploymentctl, o kt\u00f3rym wspomnia\u0142em, w kt\u00f3rym ustawiane s\u0105 parametry wdro\u017cenia: przestrze\u0144 nazw, nazwa aplikacji, wersja wdro\u017cenia, liczba replik, URL frontendu, nazwa kontenera, obraz, limity zasob\u00f3w, numer portu do sprawdzenia health check itd. Limity zasob\u00f3w s\u0105 bardzo wa\u017cne, poniewa\u017c pozwalaj\u0105 wykorzysta\u0107 maksymalnie mo\u017cliw\u0105 ilo\u015b\u0107 sprz\u0119tu. Tutaj r\u00f3wnie\u017c mo\u017cna przejrze\u0107 dziennik wdro\u017cenia Deployment log.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/edf6a02b336f1abce61f0a323edeee9d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJe\u015bli teraz powt\u00f3rzymy polecenie ~ kubectl get pods, wida\u0107, \u017ce system \"zamyka si\u0119\" na 20 sekund, podczas kt\u00f3rych nast\u0119puje rekonfiguracja ha-proxy. Po tym pod uruchamia si\u0119 i nasz\u0105 replik\u0119 mo\u017cna zobaczy\u0107 w dzienniku wdro\u017cenia. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/c6c8f6335e00d3a9cfcf4d4792ecf795.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWyci\u0105\u0142em z wideo 20-sekundowe oczekiwanie, a teraz widzicie na ekranie, \u017ce pierwsza wersja aplikacji zosta\u0142a wdro\u017cona. Wszystko to zosta\u0142o zrobione wy\u0142\u0105cznie za pomoc\u0105 UI. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/d21fa9ad71e22b2bb9efdfc7bc9c8771.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTeraz spr\u00f3bujmy drugiej wersji. W tym celu zmieniam wiadomo\u015b\u0107 aplikacji z \u201eHello, Kubernetes!\u201d na \u201eHello, Deployer!\u201d, system tworzy ten obraz i umieszcza go w rejestrze Dockera, po czym po prostu jeszcze raz klikamy przycisk \u201eDeploy\u201d w oknie Deploymentctl. Przy tym automatycznie uruchamia si\u0119 dziennik wdro\u017cenia dok\u0142adnie tak, jak to mia\u0142o miejsce przy wdro\u017ceniu pierwszej wersji aplikacji. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/e4ef784649fd18b1580d2562b318ac0f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPolecenie ~ kubectl get pods pokazuje, \u017ce obecnie uruchomione s\u0105 2 wersje aplikacji, jednak frontend pokazuje, \u017ce wci\u0105\u017c dzia\u0142a wersja 1. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/1d4a9c91f836007325a2a2c833da8eff.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLoad balancer czeka, a\u017c zostanie przeprowadzona kontrola health check, po czym przekieruje ruch na now\u0105 wersj\u0119. Po 20 s prze\u0142\u0105czamy si\u0119 na curl i widzimy, \u017ce teraz mamy wdro\u017con\u0105 wersj\u0119 2 aplikacji, a wersja pierwsza zosta\u0142a usuni\u0119ta. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/e123618251e9fcb1c14829772634b6e8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBy\u0142o to wdro\u017cenie \u201ezdrowej\u201d aplikacji \u2014 healthy. Sp\u00f3jrzmy, co si\u0119 stanie, je\u015bli dla nowej wersji aplikacji zmieni\u0119 warto\u015b\u0107 parametru Healthy z true na false, czyli spr\u00f3buj\u0119 wdro\u017cy\u0107 aplikacj\u0119 unhealthy, kt\u00f3ra nie przesz\u0142a testu sprawno\u015bci. Mo\u017ce si\u0119 to zdarzy\u0107, je\u015bli na etapie rozwoju w aplikacji pojawi\u0142y si\u0119 jakie\u015b b\u0142\u0119dy konfiguracyjne i zosta\u0142a ona w takiej formie przes\u0142ana do produkcji. <\/p>\n<p>Jak wida\u0107, proces wdro\u017cenia przebiega przez wszystkie wymienione etapy, a ~ kubectl get pods pokazuje, \u017ce oba podsy s\u0105 uruchomione. Jednak w przeciwie\u0144stwie do poprzedniego wdro\u017cenia, log pokazuje stan timeout. Oznacza to, \u017ce z powodu nieprzechodzenia health check nowa wersja aplikacji nie mo\u017ce zosta\u0107 wdro\u017cona. W rezultacie widzisz, \u017ce system wr\u00f3ci\u0142 do u\u017cywania starej wersji aplikacji, a nowa wersja zosta\u0142a po prostu usuni\u0119ta. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/4542761328603596704f21cef4c9d4a3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDobr\u0105 wiadomo\u015bci\u0105 jest to, \u017ce nawet je\u015bli masz ogromn\u0105 liczb\u0119 r\u00f3wnoczesnych zapyta\u0144 kierowanych do aplikacji, u\u017cytkownicy nawet nie zauwa\u017c\u0105 przestoju podczas realizacji procedury wdro\u017cenia. Je\u015bli przetestujesz t\u0119 aplikacj\u0119 za pomoc\u0105 frameworka Gatling, kt\u00f3ry wysy\u0142a maksymaln\u0105 liczb\u0119 zapyta\u0144, \u017cadne z tych zapyta\u0144 nie zostanie odrzucone. Oznacza to, \u017ce nasi u\u017cytkownicy nawet nie zauwa\u017c\u0105 aktualizacji wersji w czasie rzeczywistym. Je\u015bli to si\u0119 nie powiedzie, praca b\u0119dzie kontynuowana na starej wersji, a je\u015bli si\u0119 powiedzie \u2013 u\u017cytkownicy przejd\u0105 na now\u0105 wersj\u0119. <\/p>\n<p>Istnieje tylko jedna rzecz, kt\u00f3ra mo\u017ce doprowadzi\u0107 do niepowodzenia \u2013 je\u015bli health check przeszed\u0142 pomy\u015blnie, a aplikacja uleg\u0142a awarii, gdy tylko zosta\u0142a obci\u0105\u017cona, to kolaps nast\u0105pi dopiero po zako\u0144czeniu wdro\u017cenia. W takim przypadku b\u0119dziesz musia\u0142 r\u0119cznie powr\u00f3ci\u0107 do starej wersji. Tak wi\u0119c przyjrzeli\u015bmy si\u0119, jak u\u017cywa\u0107 Kubernetes z dedykowanymi narz\u0119dziami open-source. Proces wdro\u017cenia b\u0119dzie przebiega\u0142 znacznie \u0142atwiej, je\u015bli zintegrowasz te narz\u0119dzia z pipelines budowy\/wdro\u017cenia. W tym przypadku do uruchomienia wdro\u017cenia mo\u017cesz u\u017cy\u0107 zar\u00f3wno interfejsu u\u017cytkownika, jak i ca\u0142kowicie zautomatyzowa\u0107 ten proces, na przyk\u0142ad stosuj\u0105c commit do master. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/43b638be9d334c6c4f8e9f4fc00ce2f9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNasz serwer budowy Build Server stworzy obraz Docker, wrzuci go do Docker Hub lub innego u\u017cywanego przez Ciebie rejestru. Docker Hub obs\u0142uguje webhooki, dlatego mo\u017cemy zainicjowa\u0107 zdalne wdro\u017cenie przez Deployer pokazanym powy\u017cej sposobem. Dzi\u0119ki temu mo\u017cna ca\u0142kowicie zautomatyzowa\u0107 wdro\u017cenie aplikacji do potencjalnego \u015brodowiska produkcyjnego. <\/p>\n<p>Przejd\u017amy do om\u00f3wienia kolejnego tematu \u2013 skalowania klastra Kubernetes. Zauwa\u017c\u0119, \u017ce polecenie kubectl jest poleceniem do skalowania. Dzi\u0119ki temu \u0142atwo mo\u017cemy zwi\u0119kszy\u0107 liczb\u0119 replik w naszym klastrze. W praktyce jednak zazwyczaj chcemy zwi\u0119ksza\u0107 liczb\u0119 nie pod\u00f3w, a n\u00f3d. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/890f436b4bc52c81f5db5b35e64e7e18.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW ci\u0105gu dnia mo\u017ce by\u0107 konieczne zwi\u0119kszenie liczby instancji, a w nocy, aby obni\u017cy\u0107 koszty us\u0142ug Amazon \u2013 zmniejszenie liczby uruchomionych instancji aplikacji. Nie oznacza to, \u017ce wystarczy skalowa\u0107 tylko liczb\u0119 pod\u00f3w, poniewa\u017c nawet je\u015bli jeden z n\u00f3d b\u0119dzie nieu\u017cywany, i tak b\u0119dziesz musia\u0142 p\u0142aci\u0107 za niego Amazon. Oznacza to, \u017ce obok skalowania pod\u00f3w, musisz r\u00f3wnie\u017c skalowa\u0107 liczb\u0119 u\u017cywanych maszyn. <\/p>\n<p>Mo\u017ce to stanowi\u0107 wyzwanie, poniewa\u017c niezale\u017cnie od tego, czy u\u017cywamy Amazon czy innej us\u0142ugi chmurowej, Kubernetes nic nie wie o liczbie u\u017cywanych maszyn. Brakuje mu narz\u0119dzia do skalowania systemu na poziomie n\u00f3d. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/2f00b19f1cb665d8e7bd896fa419554c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMusimy wi\u0119c zadba\u0107 zar\u00f3wno o nody, jak i o pody. Mo\u017cemy \u0142atwo skalowa\u0107 uruchamianie nowych n\u00f3d za pomoc\u0105 AWS API oraz grupy skalowania do konfiguracji liczby roboczych w\u0119z\u0142\u00f3w Kubernetes. Mo\u017cna r\u00f3wnie\u017c u\u017cy\u0107 skryptu cloud-init lub podobnego do rejestracji n\u00f3d w klastrze Kubernetes. <\/p>\n<p>Nowa maszyna uruchamia si\u0119 w grupie Scaling, inicjuje si\u0119 jako w\u0119ze\u0142, rejestruje si\u0119 w rejestrze g\u0142\u00f3wnym i zaczyna dzia\u0142a\u0107. Po tym mo\u017cna zwi\u0119kszy\u0107 liczb\u0119 replik do wykorzystania na powsta\u0142ych w\u0119z\u0142ach. Zmniejszenie skali wymaga wi\u0119kszych wysi\u0142k\u00f3w, poniewa\u017c trzeba upewni\u0107 si\u0119, \u017ce taki krok nie doprowadzi do zniszczenia ju\u017c dzia\u0142aj\u0105cych aplikacji po od\u0142\u0105czeniu \u201eniepotrzebnych\u201d maszyn. Aby zapobiec takiemu scenariuszowi, nale\u017cy przywr\u00f3ci\u0107 w\u0119z\u0142y do statusu \u201eunschedulable\u201d. Oznacza to, \u017ce domy\u015blny scheduler przy planowaniu pod\u00f3w DaemonSet zignoruje te w\u0119z\u0142y. Scheduler nie usunie nic z tych serwer\u00f3w, ale nie b\u0119dzie r\u00f3wnie\u017c uruchamia\u0107 na nich nowych kontener\u00f3w. Nast\u0119pnym krokiem jest usuni\u0119cie w\u0119z\u0142a drain node, co oznacza przeniesienie dzia\u0142aj\u0105cych pod\u00f3w na inn\u0105 maszyn\u0119 lub inne w\u0119z\u0142y, kt\u00f3re maj\u0105 wystarczaj\u0105c\u0105 pojemno\u015b\u0107. Upewniwszy si\u0119, \u017ce na tych w\u0119z\u0142ach nie ma ju\u017c \u017cadnych kontener\u00f3w, mo\u017cna je usun\u0105\u0107 z Kubernetes. Po tym dla Kubernetes przestan\u0105 one po prostu istnie\u0107. Nast\u0119pnie nale\u017cy u\u017cy\u0107 AWS API do wy\u0142\u0105czenia niepotrzebnych w\u0119z\u0142\u00f3w lub maszyn. <br \/>\nMo\u017cesz u\u017cy\u0107 Amdatu Scalerd \u2014 kolejnego narz\u0119dzia open-source do skalowania, podobnego do AWS API. Oferuje CLI do dodawania lub usuwania w\u0119z\u0142\u00f3w w klastrze. Jego interesuj\u0105c\u0105 cech\u0105 jest mo\u017cliwo\u015b\u0107 skonfigurowania harmonogramu za pomoc\u0105 nast\u0119pnego pliku json. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/f70c7c722cacb4792c316e9f80a7500a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPrzedstawiony kod zmniejsza pojemno\u015b\u0107 klastra w nocy o po\u0142ow\u0119. Ustawiono w nim zar\u00f3wno liczb\u0119 dost\u0119pnych replik, jak i po\u017c\u0105dan\u0105 pojemno\u015b\u0107 klastra Amazon. U\u017cycie tego harmonogramu automatycznie zmniejszy liczb\u0119 w\u0119z\u0142\u00f3w w nocy i zwi\u0119kszy je rano, pozwalaj\u0105c zaoszcz\u0119dzi\u0107 na kosztach korzystania z w\u0119z\u0142\u00f3w takiego chmurowego serwisu, jak Amazon. Ta funkcja nie jest wbudowana w Kubernetes, ale u\u017cycie Scalerd pozwala na dowolne skalowanie tej platformy. <\/p>\n<p>Chcia\u0142bym zwr\u00f3ci\u0107 uwag\u0119, \u017ce wiele os\u00f3b m\u00f3wi mi: \u201eTo wszystko dobrze, ale co z moj\u0105 baz\u0105 danych, kt\u00f3ra zazwyczaj jest w stanie statycznym?\u201d W jaki spos\u00f3b mo\u017cna uruchomi\u0107 co\u015b podobnego w tak dynamicznym \u015brodowisku, jak Kubernetes? Moim zdaniem, nie powiniene\u015b tego robi\u0107, nie powiniene\u015b stara\u0107 si\u0119 organizowa\u0107 pracy magazynu danych w Kubernetes. Technicznie jest to mo\u017cliwe, a w internecie znajduj\u0105 si\u0119 przewodniki na ten temat, jednak bardzo to utrudni twoje \u017cycie. <\/p>\n<p>Tak, w Kubernetes istnieje poj\u0119cie trwa\u0142ych magazyn\u00f3w, i mo\u017cesz spr\u00f3bowa\u0107 uruchamia\u0107 takie magazyny danych jak Mongo lub MySQL, ale jest to do\u015b\u0107 pracoch\u0142onne zadanie. Wynika to z faktu, \u017ce magazyny danych nie do ko\u0144ca wspieraj\u0105 interakcj\u0119 z dynamicznym otoczeniem. Wi\u0119kszo\u015b\u0107 baz danych wymaga znacznej konfiguracji, w tym r\u0119cznego ustawienia klastra, nie lubi automatycznego skalowania i innych podobnych rzeczy. <br \/>\nDlatego nie warto komplikowa\u0107 sobie \u017cycia, pr\u00f3buj\u0105c uruchomi\u0107 magazyn danych w Kubernetes. Zorganizuj ich prac\u0119 w tradycyjny spos\u00f3b przy u\u017cyciu znanych serwis\u00f3w i po prostu pozw\u00f3l Kubernetes na ich wykorzystywanie.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/129e8d403f42b7aa6fb022b386955e9e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa zako\u0144czenie chcia\u0142bym przedstawi\u0107 platform\u0119 Cloud RTI opart\u0105 na Kubernetes, nad kt\u00f3r\u0105 pracuje m\u00f3j zesp\u00f3\u0142. Zapewnia ona centralne prowadzenie log\u00f3w, monitorowanie aplikacji i klastr\u00f3w oraz posiada wiele innych przydatnych funkcji, kt\u00f3re si\u0119 przydadz\u0105. Wykorzystuje r\u00f3\u017cne narz\u0119dzia open-source, takie jak Grafana do wy\u015bwietlania monitoringu.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/a0e79033dbc0a2683e3567934c9ba014.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes w produkcji: Wdra\u017canie Blue\/Green, automatyczne skalowanie i automatyzacja wdro\u017ce\u0144. Cz\u0119\u015b\u0107 2.\" src=\"\/wp-content\/uploads\/2020\/06\/2b1b7ba139053fc492c7ad25e96f362f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPojawi\u0142o si\u0119 pytanie, dlaczego u\u017cywa\u0107 z Kubernetes load balancera ha-proxy. Dobre pytanie, poniewa\u017c obecnie istniej\u0105 dwa poziomy balansowania obci\u0105\u017cenia. Us\u0142ugi Kubernetes nadal dzia\u0142aj\u0105 na wirtualnych adresach IP. Nie mo\u017cesz u\u017cywa\u0107 ich dla port\u00f3w zewn\u0119trznych maszyn hostuj\u0105cych, poniewa\u017c je\u015bli Amazon prze\u0142adowa\u0142by sw\u00f3j hosting w chmurze, adres by si\u0119 zmieni\u0142. Dlatego umieszczamy ha-proxy przed us\u0142ugami \u2014 aby stworzy\u0107 bardziej statyczn\u0105 struktur\u0119 dla nieprzerwanego przep\u0142ywu ruchu z Kubernetes. <\/p>\n<p>Jeszcze jedno dobre pytanie \u2013 jak mo\u017cna zadba\u0107 o zmian\u0119 schematu bazy danych podczas wdra\u017cania blue\/green? Faktem jest, \u017ce niezale\u017cnie od u\u017cycia Kubernetes, zmiana schematu bazy danych to skomplikowane zadanie. Musisz zapewni\u0107 kompatybilno\u015b\u0107 starego i nowego schematu, po czym mo\u017cesz zaktualizowa\u0107 baz\u0119 danych, a nast\u0119pnie same aplikacje. Mo\u017cesz wykona\u0107 \u201egor\u0105c\u0105 wymian\u0119\u201d bazy danych, a nast\u0119pnie zaktualizowa\u0107 aplikacje. Znam ludzi, kt\u00f3rzy uruchamiali zupe\u0142nie nowy klaster bazy danych z nowym schematem, to opcja, je\u015bli masz baz\u0119 danych bez schematu, typu Mongo, ale w ka\u017cdym razie to nie jest proste zadanie. Je\u015bli wi\u0119cej pyta\u0144 nie ma, dzi\u0119kuj\u0119 za uwag\u0119!<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"-Ci4vd4rh4M\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/-Ci4vd4rh4M\/hqdefault.jpg\" alt=\"Odtwarzaj wideo\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h3>Troch\u0119 reklamy \ud83d\ude42<\/h3>\n<p>\nDzi\u0119kujemy, \u017ce jeste\u015b z nami. Podobaj\u0105 Ci si\u0119 nasze artyku\u0142y? Chcesz zobaczy\u0107 wi\u0119cej interesuj\u0105cych materia\u0142\u00f3w? Wspieraj nas sk\u0142adaj\u0105c zam\u00f3wienie lub polecaj\u0105c nas znajomym, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">chmurowe VPS dla programist\u00f3w od 4,99 $<\/a><\/noindex>, <b>unikatowy odpowiednik serwer\u00f3w entry-level, kt\u00f3ry zosta\u0142 stworzony przez nas dla Ciebie:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Ca\u0142a prawda o VPS (KVM) E5-2697 v3 (6 rdzeni) 10GB DDR4 480GB SSD 1Gbps od 19 $ lub jak prawid\u0142owo podzieli\u0107 serwer?<\/a><\/noindex> (dost\u0119pne opcje z RAID1 i RAID10, do 24 rdzeni i do 40GB DDR4).<\/p>\n<p><b>Dell R730xd dwa razy ta\u0144szy w centrum danych Equinix Tier IV w Amsterdamie?<\/b> Tylko u nas <b><noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/serversnl\">2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100TB od 199 dolar\u00f3w<\/a><\/noindex> w Holandii! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 od 99 dolar\u00f3w!<\/b><\/b> Czytaj o tym <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Jak zbudowa\u0107 infrastruktur\u0119 klasy korporacyjnej z zastosowaniem serwer\u00f3w Dell R730xd E5-2650 v4 kosztuj\u0105cych 9000 euro za grosze?<\/a><\/noindex><br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ua-hosting\/blog\/504672\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Kubernetes \u2014 \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 Docker \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Kubernetes \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0435 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438. \u041f\u0440\u0438 \u0447\u0430\u0441\u0442\u043e\u043c \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0441\u0440\u0435\u0434\u0435 \u043c\u044b \u043d\u0443\u0436\u0434\u0430\u0435\u043c\u0441\u044f \u0432 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c Blue\/Green deployment, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0435\u0432 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0435 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0443 SSL. \u042d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":83788,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-83787","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=\"Kubernetes \u2014 \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 Docker \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Kubernetes \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0435 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438.\" \/>\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\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2\" \/>\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\udd47DEVOXX UK. Kubernetes \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435: Blue\/Green deployment, \u0430\u0432\u0442\u043e\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f. \u0427\u0430\u0441\u0442\u044c 2 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"Kubernetes \u2014 \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 Docker \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Kubernetes \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0435 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2\" \/>\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-06-03T05:42:26+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-06-03T05:42:26+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\udd47DEVOXX UK. Kubernetes w produkcji: wdra\u017canie blue\/green, automatyczne skalowanie i automatyzacja wdro\u017cenia. Cz\u0119\u015b\u0107 2 | ProHoster","description":"Kubernetes to doskona\u0142e narz\u0119dzie do uruchamiania kontener\u00f3w Docker w skonsolidowanym \u015brodowisku produkcyjnym. Jednak s\u0105 zadania, kt\u00f3rych Kubernetes nie jest w stanie rozwi\u0105za\u0107.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2","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\udd47DEVOXX UK. Kubernetes \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435: Blue\/Green deployment, \u0430\u0432\u0442\u043e\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f. \u0427\u0430\u0441\u0442\u044c 2 | ProHoster","og:description":"Kubernetes \u2014 \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 Docker \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Kubernetes \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0435 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2","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-06-03T05:42:26+00:00","article:modified_time":"2020-06-03T05:42:26+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"83787","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 15:11:01","updated":"2022-09-28 11:45:41","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\/83787","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=83787"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/83787\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/83788"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=83787"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=83787"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=83787"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}