{"id":52688,"date":"2019-11-14T00:00:00","date_gmt":"2019-11-13T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/strategii-deploya-v-kubernetes-rolling-recreate-blue-green-canary-dark-a-b-testirovanie"},"modified":"2020-02-18T14:00:29","modified_gmt":"2020-02-18T11:00:29","slug":"strategii-deploya-v-kubernetes-rolling-recreate-blue-green-canary-dark-a-b-testirovanie","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/strategii-deploya-v-kubernetes-rolling-recreate-blue-green-canary-dark-a-b-testirovanie","title":{"rendered":"Strategie wdra\u017cania w Kubernetes: rolling, recreate, blue\/green, canary, dark (testy A\/B)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Przyp. t\u0142um.:<\/b> Ten materia\u0142 przegl\u0105dowy od Weaveworks przedstawia najpopularniejsze strategie wdra\u017cania aplikacji i omawia mo\u017cliwo\u015b\u0107 ich zaawansowanej realizacji za pomoc\u0105 operatora Kubernetes Flagger. Zosta\u0142 napisany prostym j\u0119zykiem i zawiera przejrzyste schematy, kt\u00f3re pomagaj\u0105 zrozumie\u0107 temat nawet pocz\u0105tkuj\u0105cym in\u017cynierom.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Strategie wdra\u017cania w Kubernetes: rolling, recreate, blue\/green, canary, dark (testy A\/B)\" src=\"\/wp-content\/uploads\/2019\/11\/8d32d63c9986e9f5b35ccca74a546d42.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Schemat pochodzi z <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.container-solutions.com\/kubernetes-deployment-strategies\">innego przegl\u0105du<\/a><\/noindex> strategii wdra\u017cania, przygotowanego przez Container Solutions<\/i><\/p>\n<p>Jednym z najwi\u0119kszych wyzwa\u0144 przy tworzeniu aplikacji cloud native jest dzi\u015b przyspieszenie procesu wdra\u017cania. Przy podej\u015bciu mikroserwisowym programi\u015bci pracuj\u0105 ju\u017c z ca\u0142kowicie modu\u0142owymi aplikacjami i projektuj\u0105 je, umo\u017cliwiaj\u0105c r\u00f3\u017cnym zespo\u0142om jednoczesne pisanie kodu i wprowadzanie zmian w aplikacji.<\/p>\n<p>Kr\u00f3tsze i cz\u0119stsze wdro\u017cenia maj\u0105 nast\u0119puj\u0105ce zalety:<\/p>\n<ul>\n<li> Skraca si\u0119 czas wprowadzenia na rynek.<\/li>\n<li> Nowe funkcje szybciej trafiaj\u0105 do u\u017cytkownik\u00f3w.<\/li>\n<li> Opinie u\u017cytkownik\u00f3w szybciej docieraj\u0105 do zespo\u0142u deweloper\u00f3w, co oznacza, \u017ce zesp\u00f3\u0142 mo\u017ce szybciej uzupe\u0142nia\u0107 funkcje i naprawia\u0107 problemy.<\/li>\n<li> Zwi\u0119ksza si\u0119 morale programist\u00f3w: z wi\u0119ksz\u0105 liczb\u0105 funkcji w opracowaniu pracuje si\u0119 bardziej interesuj\u0105co.<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nJednak zwi\u0119kszona cz\u0119stotliwo\u015b\u0107 wyda\u0144 podnosi r\u00f3wnie\u017c ryzyko negatywnego wp\u0142ywu na niezawodno\u015b\u0107 aplikacji lub do\u015bwiadczenie u\u017cytkownika. Dlatego zespo\u0142y operacyjne i DevOps musz\u0105 budowa\u0107 procesy i zarz\u0105dza\u0107 strategiami wdra\u017cania w taki spos\u00f3b, aby zminimalizowa\u0107 ryzyko dla produktu i u\u017cytkownik\u00f3w. (Dowiedz si\u0119 wi\u0119cej o automatyzacji pipeline'a CI\/CD <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/assets\/images\/blta8084030436bce24\/CICD_eBook_Web.pdf\">tutaj<\/a><\/noindex>.)<\/p>\n<p>W tej publikacji om\u00f3wimy r\u00f3\u017cne strategie wdra\u017cania w Kubernetes, w tym wdro\u017cenia typu rolling oraz bardziej zaawansowane metody, takie jak wdro\u017cenia kanaryjskie i ich warianty.<\/p>\n<h2>Strategie wdra\u017cania<\/h2>\n<p>\nIstnieje kilka r\u00f3\u017cnych typ\u00f3w strategii wdra\u017cania, kt\u00f3re mo\u017cna wykorzysta\u0107 w zale\u017cno\u015bci od celu. Na przyk\u0142ad, mo\u017ce by\u0107 konieczne wprowadzenie zmian w pewnym \u015brodowisku dla dalszego testowania, w subgrupie u\u017cytkownik\u00f3w\/klient\u00f3w lub przeprowadzenie ograniczonego testu na u\u017cytkownikach przed udost\u0119pnieniem pewnej funkcji <i>publicznie<\/i>.<\/p>\n<h3>Rolling (stopniowe, \"nak\u0142adane\" wdro\u017cenie)<\/h3>\n<p>\nTo standardowa strategia wdra\u017cania w Kubernetes. Stopniowo, jeden po drugim, zast\u0119puje stare pod&#8217;y z poprzedni\u0105 wersj\u0105 aplikacji pod&#8217;ami z now\u0105 wersj\u0105 \u2014 bez przestoju klastra.<\/p>\n<p><img decoding=\"async\" alt=\"Strategie wdra\u017cania w Kubernetes: rolling, recreate, blue\/green, canary, dark (testy A\/B)\" src=\"\/wp-content\/uploads\/2019\/11\/cbd490f1ef8311ff4c242726e947248c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKubernetes czeka na gotowo\u015b\u0107 nowych pod&#8217;\u00f3w do dzia\u0142ania (sprawdzaj\u0105c je za pomoc\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/resilient-apps-with-liveness-and-readiness-probes-in-kubernetes\">test\u00f3w gotowo\u015bci<\/a><\/noindex>), zanim przyst\u0105pi do wygaszania starych. Je\u015bli wyst\u0105pi problem, takie aktualizowane wdro\u017cenie mo\u017cna przerwa\u0107, nie zatrzymuj\u0105c ca\u0142ego klastra. W pliku YAML opisuj\u0105cym typ wdro\u017cenia nowy obraz zast\u0119puje stary obraz:<\/p>\n<pre><code class=\"plaintext\">apiVersion: apps\/v1beta1\nkind: Deployment\nmetadata:\n  name: awesomeapp\nspec:\n  replicas: 3\n  template:\n    metadata:\n      labels:\n        app: awesomeapp\n    spec:\n      containers:\n        - name: awesomeapp\n          image: imagerepo-user\/awesomeapp:new\n          ports:\n            - containerPort: 8080<\/code><\/pre>\n<p>\nParametry wdra\u017cania mo\u017cna sprecyzowa\u0107 w pliku manifestu:<\/p>\n<pre><code class=\"plaintext\">spec:\n  replicas: 3\n  strategy:\n    type: RollingUpdate\n    rollingUpdate:\n       maxSurge: 25%\n       maxUnavailable: 25%  \n  template:\n  ...\n<\/code><\/pre>\n<p><\/p>\n<h3>Recreate (przywr\u00f3cenie)<\/h3>\n<p>\nW tym najprostszym rodzaju wdro\u017cenia stare pod&#8217;y s\u0105 zabijane wszystkie naraz i zast\u0119powane nowymi:<\/p>\n<p><img decoding=\"async\" alt=\"Strategie wdra\u017cania w Kubernetes: rolling, recreate, blue\/green, canary, dark (testy A\/B)\" src=\"\/wp-content\/uploads\/2019\/11\/46168e36b7f44c76bcea40ab3a1a2cad.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOdpowiedni manifest wygl\u0105da mniej wi\u0119cej tak:<\/p>\n<pre><code class=\"plaintext\">spec:\n  replicas: 3\n  strategy:\n    type: Recreate\n  template:\n  ...<\/code><\/pre>\n<p><\/p>\n<h3>Blue\/Green (wdro\u017cenia niebiesko-zielone)<\/h3>\n<p>\nStrategia wdro\u017cenia niebiesko-zielonego (czasami nazywana r\u00f3wnie\u017c czerwono\/czarn\u0105) zak\u0142ada jednoczesne wdro\u017cenie starej (zielonej) i nowej (niebieskiej) wersji aplikacji. Po umieszczeniu obu wersji zwykli u\u017cytkownicy maj\u0105 dost\u0119p do zielonej, podczas gdy niebieska jest dost\u0119pna dla zespo\u0142u QA do automatyzacji test\u00f3w przez oddzieln\u0105 us\u0142ug\u0119 lub bezpo\u015brednie przekierowanie port\u00f3w:<\/p>\n<p><img decoding=\"async\" alt=\"Strategie wdra\u017cania w Kubernetes: rolling, recreate, blue\/green, canary, dark (testy A\/B)\" src=\"\/wp-content\/uploads\/2019\/11\/6664b625c99e089acf01c92edce0b45a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<pre><code class=\"plaintext\">apiVersion: apps\/v1beta1\nkind: Deployment\nmetadata:\n  name: awesomeapp-02\nspec:\n  template:\n    metadata:\n      labels:\n        app: awesomeapp\n        version: \"02\"<\/code><\/pre>\n<p>\nPo przetestowaniu niebieskiej (nowej) wersji i zatwierdzeniu jej wydania, us\u0142uga prze\u0142\u0105cza si\u0119 na ni\u0105, a zielona (stara) jest wycofywana:<\/p>\n<pre><code class=\"plaintext\">apiVersion: v1\nkind: Service\nmetadata:\n  name: awesomeapp\nspec:\n  selector:\n    app: awesomeapp\n    version: \"02\"\n...<\/code><\/pre>\n<p><\/p>\n<h3>Canary (wdro\u017cenia kanarowe)<\/h3>\n<p>\nWdro\u017cenia kanarowe s\u0105 podobne do niebiesko-zielonych, ale lepiej zarz\u0105dzane i wykorzystuj\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/redmonk.com\/jgovernor\/2018\/08\/06\/towards-progressive-delivery\/\">progresywny<\/a><\/noindex> stopniowy podzia\u0142. Do tego typu nale\u017cy kilka r\u00f3\u017cnych strategii, w tym \u00abukryte\u00bb uruchomienia oraz testy A\/B.<\/p>\n<p>Ta strategia jest stosowana, gdy konieczne jest przetestowanie nowej funkcjonalno\u015bci, zazwyczaj w backendzie aplikacji. Istot\u0105 podej\u015bcia jest stworzenie dw\u00f3ch praktycznie identycznych serwer\u00f3w: jeden obs\u0142uguje prawie wszystkich u\u017cytkownik\u00f3w, a drugi, z nowymi funkcjami, obs\u0142uguje tylko ma\u0142\u0105 podgrup\u0119 u\u017cytkownik\u00f3w, po czym wyniki ich pracy s\u0105 por\u00f3wnywane. Je\u015bli wszystko przebiega bez b\u0142\u0119d\u00f3w, nowa wersja jest stopniowo wdra\u017cana w ca\u0142ej infrastrukturze.<\/p>\n<p>Cho\u0107 t\u0119 strategi\u0119 mo\u017cna zrealizowa\u0107 wy\u0142\u0105cznie za pomoc\u0105 narz\u0119dzi Kubernetes, du\u017co wygodniej i pro\u015bciej jest u\u017cywa\u0107 service mesh, takiego jak Istio.<\/p>\n<p>Na przyk\u0142ad mo\u017cesz mie\u0107 dwa r\u00f3\u017cne manifesty w Git: zwyk\u0142y z tagiem 0.1.0 oraz \"kanaryjny\" z tagiem 0.2.0. Zmieniaj\u0105c wagi w manife\u015bcie wirtualnej bramy Istio, mo\u017cna zarz\u0105dza\u0107 rozk\u0142adem ruchu mi\u0119dzy tymi dwoma wdro\u017ceniami:<\/p>\n<p><img decoding=\"async\" alt=\"Strategie wdra\u017cania w Kubernetes: rolling, recreate, blue\/green, canary, dark (testy A\/B)\" src=\"\/wp-content\/uploads\/2019\/11\/d75dc34fea187c4e67879d0f64f9251c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKrok po kroku przewodnik dotycz\u0105cy realizacji kanarkowych wdro\u017ce\u0144 za pomoc\u0105 Istio mo\u017cna znale\u017a\u0107 w materiale <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-workflows-for-istio-canary-deployments\">GitOps Workflows with Istio<\/a><\/noindex>. <i>(<b>Przyp. t\u0142um.<\/b>: Przet\u0142umaczyli\u015bmy r\u00f3wnie\u017c materia\u0142 dotycz\u0105cy kanarkowych wdro\u017ce\u0144 w Istio <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/440378\/\">tutaj<\/a><\/noindex>.)<\/i><\/p>\n<h4>Kanarkowe wdro\u017cenia z Weaveworks Flagger<\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.flagger.app\/\">Weaveworks Flagger<\/a><\/noindex> umo\u017cliwia \u0142atwe i efektywne zarz\u0105dzanie kanarkowymi wdro\u017ceniami.<\/p>\n<p>Flagger automatyzuje ich dzia\u0142anie. Wykorzystuje Istio lub AWS App Mesh do routingu i prze\u0142\u0105czania ruchu, a tak\u017ce metryki Prometheus do analizy wynik\u00f3w. Ponadto, analiz\u0119 kanarkowych wdro\u017ce\u0144 mo\u017cna wzbogaci\u0107 o webhooki do przeprowadzania test\u00f3w akceptacyjnych, obci\u0105\u017ceniowych i innych rodzaj\u00f3w weryfikacji.<\/p>\n<p>Na podstawie wdro\u017cenia Kubernetes i, w razie potrzeby, poziomego skalowania pod&#8217;\u00f3w (HPA), Flagger tworzy zestawy obiekt\u00f3w (wdro\u017cenia Kubernetes, us\u0142ugi ClusterIP i wirtualne us\u0142ugi Istio lub App Mesh) do przeprowadzania analizy i realizacji kanaryjnych wdro\u017ce\u0144:<\/p>\n<p><img decoding=\"async\" alt=\"Strategie wdra\u017cania w Kubernetes: rolling, recreate, blue\/green, canary, dark (testy A\/B)\" src=\"\/wp-content\/uploads\/2019\/11\/99aa426bbcf59edcb70d5637e32d8ff7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWdra\u017caj\u0105c kontur zarz\u0105dzania <i>(control loop)<\/i>, Flagger stopniowo przekierowuje ruch na serwer kanaryjny, r\u00f3wnocze\u015bnie mierz\u0105c kluczowe wska\u017aniki wydajno\u015bci, takie jak wska\u017anik udanych zapyta\u0144 HTTP, \u015bredni czas trwania zapytania oraz stan pod&#8217;\u00f3w. Na podstawie analizy KPI (kluczowych wska\u017anik\u00f3w wydajno\u015bci) cz\u0119\u015b\u0107 kanaryjna either ro\u015bnie, albo si\u0119 zamyka, a wyniki analizy s\u0105 publikowane w Slack. Opis i demonstracj\u0119 tego procesu mo\u017cna znale\u017a\u0107 w materia\u0142ach. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/progressive-delivery-for-aws-app-mesh\">Progressive Delivery for App Mesh<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Strategie wdra\u017cania w Kubernetes: rolling, recreate, blue\/green, canary, dark (testy A\/B)\" src=\"\/wp-content\/uploads\/2019\/11\/f9fa1ba66edecc2b3e971952a318ea40.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Ciemne (ukryte) lub wdro\u017cenia A\/B<\/h3>\n<p>\nUkryte wdro\u017cenie to kolejna wariacja strategii canary (z kt\u00f3r\u0105, nawiasem m\u00f3wi\u0105c, Flagger te\u017c mo\u017ce wsp\u00f3\u0142pracowa\u0107). R\u00f3\u017cnica mi\u0119dzy ukrytym a wdro\u017ceniem canary polega na tym, \u017ce ukryte wdro\u017cenia dotycz\u0105 frontendu, a nie backendu, jak w przypadku canary.<\/p>\n<p>Inna nazwa tych wdro\u017ce\u0144 to testy A\/B. Zamiast udost\u0119pnia\u0107 now\u0105 funkcj\u0119 wszystkim u\u017cytkownikom, oferuje si\u0119 j\u0105 jedynie ograniczonej ich grupie. Zazwyczaj ci u\u017cytkownicy nie zdaj\u0105 sobie sprawy, \u017ce s\u0105 testerami-pionierami (st\u0105d termin \u201eukryte wdro\u017cenie\u201d).<\/p>\n<p>Za pomoc\u0105 prze\u0142\u0105cznik\u00f3w funkcjonalno\u015bci <i>(feature toggles)<\/i> i innych narz\u0119dzi mo\u017cna monitorowa\u0107, jak u\u017cytkownicy wchodz\u0105 w interakcj\u0119 z now\u0105 funkcj\u0105, czy ich przyci\u0105ga, czy uwa\u017caj\u0105 nowy interfejs u\u017cytkownika za nieczytelny oraz inne typy metryk.<\/p>\n<p><img decoding=\"async\" alt=\"Strategie wdra\u017cania w Kubernetes: rolling, recreate, blue\/green, canary, dark (testy A\/B)\" src=\"\/wp-content\/uploads\/2019\/11\/037b5ccca2e1d99ac142d2ce734f954d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>Flagger i wdro\u017cenia A\/B<\/h4>\n<p>\nOpr\u00f3cz routingu na podstawie wag, Flagger mo\u017ce tak\u017ce kierowa\u0107 ruch do serwera canary w zale\u017cno\u015bci od parametr\u00f3w HTTP. W testach A\/B mo\u017cna u\u017cywa\u0107 nag\u0142\u00f3wk\u00f3w HTTP lub plik\u00f3w cookie do przekierowania okre\u015blonego segmentu u\u017cytkownik\u00f3w. Jest to szczeg\u00f3lnie skuteczne w przypadku aplikacji frontendowych, kt\u00f3re wymagaj\u0105 przypisania sesji do serwera <i>(session affinity)<\/i>. Dodatkowe informacje mo\u017cna znale\u017a\u0107 w dokumentacji Flagger.<\/p>\n<p><i>Autor wyra\u017ca wdzi\u0119czno\u015b\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/stefanprodan\">Stefanowi Prodanowi<\/a><\/noindex>, in\u017cynierowi Weaveworks (i tw\u00f3rcy Flaggera), za wszystkie te niesamowite schematy wdro\u017cenia.<\/i><\/p>\n<h2>P.S. od t\u0142umacza<\/h2>\n<p>\nPrzeczytaj tak\u017ce na naszym blogu:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/447180\/\">Przegl\u0105d i por\u00f3wnanie kontroler\u00f3w Ingress dla Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 nasze narz\u0119dzie do CI\/CD w Kubernetes (przegl\u0105d i wideo wyk\u0142adu)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/469541\/\">Budowa i wdro\u017cenie jednorodnych mikrous\u0142ug z werf i GitLab CI<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/458878\/\">Czym jest GitOps?<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/471620\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u042d\u0442\u043e\u0442 \u043e\u0431\u0437\u043e\u0440\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043e\u0442 Weaveworks \u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442 \u0441 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f\u043c\u0438 \u0432\u044b\u043a\u0430\u0442\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0445 \u0438\u0437 \u043d\u0438\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Kubernetes-\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 Flagger. \u041e\u043d \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u044b\u0435 \u0441\u0445\u0435\u043c\u044b, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0432\u043e\u043f\u0440\u043e\u0441\u0435 \u0434\u0430\u0436\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430\u043c. \u0421\u0445\u0435\u043c\u0430 \u0432\u0437\u044f\u0442\u0430 \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043e\u0431\u0437\u043e\u0440\u0430 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0439 \u0432\u044b\u043a\u0430\u0442\u0430, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u0433\u043e \u0432 Container Solutions \u041e\u0434\u043d\u043e\u0439 \u0438\u0437 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-52688","post","type-post","status-publish","format-standard","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=\"\u041f\u0440\u0438\u043c.\" \/>\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\/strategii-deploya-v-kubernetes-rolling-recreate-blue-green-canary-dark-a-b-testirovanie\" \/>\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\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0434\u0435\u043f\u043b\u043e\u044f \u0432 Kubernetes: rolling, recreate, blue\/green, canary, dark (A\/B-\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u043c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/strategii-deploya-v-kubernetes-rolling-recreate-blue-green-canary-dark-a-b-testirovanie\" \/>\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-11-13T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:00:29+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\udd47Strategie wdro\u017cenia w Kubernetes: rolling, recreate, blue\/green, canary, dark (A\/B-testowanie) | ProHoster","description":"Przyk\u0142.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/strategii-deploya-v-kubernetes-rolling-recreate-blue-green-canary-dark-a-b-testirovanie","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\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0434\u0435\u043f\u043b\u043e\u044f \u0432 Kubernetes: rolling, recreate, blue\/green, canary, dark (A\/B-\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435) | ProHoster","og:description":"\u041f\u0440\u0438\u043c.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/strategii-deploya-v-kubernetes-rolling-recreate-blue-green-canary-dark-a-b-testirovanie","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-11-13T21:00:00+00:00","article:modified_time":"2020-02-18T11:00:29+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"52688","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-24 04:27:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:03:32","updated":"2026-01-24 04:27: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\/52688","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=52688"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/52688\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=52688"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=52688"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=52688"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}