{"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\/cs\/blog\/administrirovanie\/strategii-deploya-v-kubernetes-rolling-recreate-blue-green-canary-dark-a-b-testirovanie","title":{"rendered":"Strategie nasazen\u00ed v Kubernetes: rolling, recreate, blue\/green, canary, dark (A\/B testov\u00e1n\u00ed)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>P\u0159evod:<\/b> Tento p\u0159ehledov\u00fd materi\u00e1l od Weaveworks seznamuje s nejpopul\u00e1rn\u011bj\u0161\u00edmi strategiemi nasazen\u00ed aplikac\u00ed a vysv\u011btluje, jak implementovat ty nejpokro\u010dilej\u0161\u00ed z nich pomoc\u00ed Kubernetes oper\u00e1tora Flagger. Je naps\u00e1n jednoduch\u00fdm jazykem a obsahuje n\u00e1zorn\u00e9 diagramy, kter\u00e9 pomohou porozum\u011bt t\u00e9matu i za\u010d\u00ednaj\u00edc\u00edm in\u017een\u00fdr\u016fm.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Strategie nasazen\u00ed v Kubernetes: rolling, recreate, blue\/green, canary, dark (A\/B testov\u00e1n\u00ed)\" src=\"\/wp-content\/uploads\/2019\/11\/8d32d63c9986e9f5b35ccca74a546d42.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Diagram je p\u0159evzat z <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.container-solutions.com\/kubernetes-deployment-strategies\">jin\u00e9ho p\u0159ehledu<\/a><\/noindex> strategi\u00ed nasazen\u00ed, kter\u00fd vytvo\u0159il Container Solutions<\/i><\/p>\n<p>Jedn\u00edm z nejv\u011bt\u0161\u00edch probl\u00e9m\u016f p\u0159i v\u00fdvoji cloud-native aplikac\u00ed dnes je zrychlen\u00ed nasazen\u00ed. P\u0159i mikroslu\u017ebov\u00e9m p\u0159\u00edstupu ji\u017e v\u00fdvoj\u00e1\u0159i pracuj\u00ed s pln\u011b modul\u00e1rn\u00edmi aplikacemi a navrhuj\u00ed je tak, aby r\u016fzn\u00e9 t\u00fdmy mohly sou\u010dasn\u011b ps\u00e1t k\u00f3d a prov\u00e1d\u011bt zm\u011bny v aplikaci.<\/p>\n<p>Krat\u0161\u00ed a \u010dast\u011bj\u0161\u00ed nasazen\u00ed maj\u00ed n\u00e1sleduj\u00edc\u00ed v\u00fdhody:<\/p>\n<ul>\n<li> Zkracuje se doba uveden\u00ed na trh.<\/li>\n<li> Nov\u00e9 funkce se rychleji dost\u00e1vaj\u00ed k u\u017eivatel\u016fm.<\/li>\n<li> Zp\u011btn\u00e1 vazba od u\u017eivatel\u016f se rychleji dost\u00e1v\u00e1 k t\u00fdmu v\u00fdvoj\u00e1\u0159\u016f. To znamen\u00e1, \u017ee t\u00fdm m\u016f\u017ee funkce dopl\u0148ovat a opravovat probl\u00e9my rychleji.<\/li>\n<li> Zvy\u0161uje se mor\u00e1lka v\u00fdvoj\u00e1\u0159\u016f: p\u0159i v\u011bt\u0161\u00edm mno\u017estv\u00ed funkc\u00ed v v\u00fdvoji se pracuje zaj\u00edmav\u011bji.<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nAle s rostouc\u00ed frekvenc\u00ed vyd\u00e1n\u00ed tak\u00e9 roste pravd\u011bpodobnost negativn\u00edho vlivu na spolehlivost aplikace nebo u\u017eivatelskou zku\u0161enost. Proto je pro t\u00fdmy provozu a DevOps d\u016fle\u017eit\u00e9 budovat procesy a \u0159\u00eddit strategie nasazen\u00ed tak, aby minimalizovaly riziko pro produkt a u\u017eivatele. (Zjistit v\u00edce o automatizaci CI\/CD pipeline m\u016f\u017eete <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/assets\/images\/blta8084030436bce24\/CICD_eBook_Web.pdf\">zde<\/a><\/noindex>.)<\/p>\n<p>V t\u00e9to publikaci budeme diskutovat o r\u016fzn\u00fdch strategi\u00edch nasazen\u00ed v Kubernetes, v\u010detn\u011b rolling nasazen\u00ed a pokro\u010dilej\u0161\u00edch metod, jako jsou kan\u00e1rkov\u00e9 nasazen\u00ed a jejich variace.<\/p>\n<h2>Strategie nasazen\u00ed<\/h2>\n<p>\nExistuje n\u011bkolik r\u016fzn\u00fdch typ\u016f strategi\u00ed nasazen\u00ed, kter\u00e9 m\u016f\u017eete vyu\u017e\u00edt v z\u00e1vislosti na c\u00edli. M\u016f\u017ee b\u00fdt nap\u0159\u00edklad pot\u0159eba prov\u00e9st zm\u011bny v ur\u010dit\u00e9m prost\u0159ed\u00ed pro dal\u0161\u00ed testov\u00e1n\u00ed, nebo v podmno\u017ein\u011b u\u017eivatel\u016f\/klient\u016f, nebo m\u016f\u017ee b\u00fdt nutn\u00e9 prov\u00e9st omezen\u00e9 testov\u00e1n\u00ed na u\u017eivatel\u00edch, ne\u017e bude n\u011bjak\u00e1 funkce <i>ve\u0159ejn\u011b dostupn\u00e1<\/i>.<\/p>\n<h3>Rolling (postupn\u00e9, \"navr\u0161en\u00e9\" nasazen\u00ed)<\/h3>\n<p>\nTo je standardn\u00ed strategie nasazen\u00ed v Kubernetes. Postupn\u011b, jeden po druh\u00e9m, nahrazuje pod&#8217;y se starou verz\u00ed aplikace pod&#8217;y s novou verz\u00ed \u2014 bez v\u00fdpadku clusteru.<\/p>\n<p><img decoding=\"async\" alt=\"Strategie nasazen\u00ed v Kubernetes: rolling, recreate, blue\/green, canary, dark (A\/B testov\u00e1n\u00ed)\" src=\"\/wp-content\/uploads\/2019\/11\/cbd490f1ef8311ff4c242726e947248c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKubernetes \u010dek\u00e1, a\u017e budou nov\u00e9 pod&#8217;y p\u0159ipraveny k pr\u00e1ci (kontroluje je pomoc\u00ed <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/resilient-apps-with-liveness-and-readiness-probes-in-kubernetes\">test\u016f p\u0159ipravenosti<\/a><\/noindex>), ne\u017e za\u010dne s odstra\u0148ov\u00e1n\u00edm star\u00fdch. Pokud dojde k probl\u00e9mu, tento typ aktualizace lze p\u0159eru\u0161it, ani\u017e by se zastavil cel\u00fd cluster. V YAML souboru s popisem typu deployment&#8217;u nov\u00fd obraz nahrazuje star\u00fd 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 aktualizace lze up\u0159esnit v manifestov\u00e9m souboru:<\/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 (znovu vytvo\u0159en\u00ed)<\/h3>\n<p>\nV tomto nejjednodu\u0161\u0161\u00edm typu nasazen\u00ed jsou star\u00e9 pod&#8217;y odstran\u011bny v\u0161echny najednou a nahrazeny nov\u00fdmi:<\/p>\n<p><img decoding=\"async\" alt=\"Strategie nasazen\u00ed v Kubernetes: rolling, recreate, blue\/green, canary, dark (A\/B testov\u00e1n\u00ed)\" src=\"\/wp-content\/uploads\/2019\/11\/46168e36b7f44c76bcea40ab3a1a2cad.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOdpov\u00eddaj\u00edc\u00ed manifest vypad\u00e1 p\u0159ibli\u017en\u011b takto:<\/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 (modro-zelen\u00e1 nasazen\u00ed)<\/h3>\n<p>\nStrategie modro-zelen\u00e9ho nasazen\u00ed (n\u011bkdy tak\u00e9 naz\u00fdv\u00e1na \u010derveno-\u010dern\u00e1) p\u0159edpokl\u00e1d\u00e1 sou\u010dasn\u00e9 nasazen\u00ed star\u00e9 (zelen\u00e9) a nov\u00e9 (modr\u00e9) verze aplikace. Po um\u00edst\u011bn\u00ed obou verz\u00ed maj\u00ed b\u011b\u017en\u00ed u\u017eivatel\u00e9 p\u0159\u00edstup k zelen\u00e9, zat\u00edmco modr\u00e1 je dostupn\u00e1 pro QA t\u00fdm pro automatizaci test\u016f p\u0159es samostatnou slu\u017ebu nebo p\u0159\u00edm\u00fd p\u0159\u00edstup port\u016f:<\/p>\n<p><img decoding=\"async\" alt=\"Strategie nasazen\u00ed v Kubernetes: rolling, recreate, blue\/green, canary, dark (A\/B testov\u00e1n\u00ed)\" 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>\nJakmile byla modr\u00e1 (nov\u00e1) verze otestov\u00e1na a jej\u00ed vyd\u00e1n\u00ed bylo schv\u00e1leno, slu\u017eba se p\u0159epne na ni, zat\u00edmco zelen\u00e1 (star\u0161\u00ed) se ukon\u010d\u00ed:<\/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 (kan\u00e1rkov\u00e1 nasazen\u00ed)<\/h3>\n<p>\nCan\u00e1rkov\u00e1 nasazen\u00ed jsou podobn\u00e1 modro-zelen\u00fdm, ale l\u00e9pe \u0159\u00edzena a vyu\u017e\u00edvaj\u00ed <noindex><a rel=\"nofollow\" href=\"https:\/\/redmonk.com\/jgovernor\/2018\/08\/06\/towards-progressive-delivery\/\">progresivn\u00ed<\/a><\/noindex> postupn\u00fd p\u0159\u00edstup. Tento typ zahrnuje n\u011bkolik r\u016fzn\u00fdch strategi\u00ed, v\u010detn\u011b \"skryt\u00fdch\" spu\u0161t\u011bn\u00ed a A\/B testov\u00e1n\u00ed.<\/p>\n<p>Tato strategie se pou\u017e\u00edv\u00e1, kdy\u017e je pot\u0159eba otestovat novou funk\u010dnost, obvykle na backendu aplikace. Podstatou p\u0159\u00edstupu je vytvo\u0159it dva t\u00e9m\u011b\u0159 identick\u00e9 servery: jeden obsluhuje t\u00e9m\u011b\u0159 v\u0161echny u\u017eivatele, zat\u00edmco druh\u00fd, se nov\u00fdmi funkcemi, obsluhuje pouze malou skupinu u\u017eivatel\u016f, po \u010dem\u017e jsou porovn\u00e1ny v\u00fdsledky jejich \u010dinnosti. Pokud v\u0161e prob\u00edh\u00e1 bez chyb, nov\u00e1 verze se postupn\u011b nasazuje na celou infrastrukturu.<\/p>\n<p>A\u010dkoli tuto strategii lze realizovat v\u00fdhradn\u011b prost\u0159edky Kubernetes, je mnohem pohodln\u011bj\u0161\u00ed a jednodu\u0161\u0161\u00ed pou\u017e\u00edvat service mesh, jako je Istio.<\/p>\n<p>Nap\u0159\u00edklad m\u016f\u017eete m\u00edt dva r\u016fzn\u00e9 manifesty v Gitu: b\u011b\u017en\u00fd s ozna\u010den\u00edm 0.1.0 a \"kan\u00e1rkov\u00fd\" s ozna\u010den\u00edm 0.2.0. Zm\u011bnou v\u00e1hy v manifestu virtu\u00e1ln\u00edho br\u00e1ny Istio m\u016f\u017eete \u0159\u00eddit rozd\u011blen\u00ed provozu mezi t\u011bmito dv\u011bma nasazen\u00edmi:<\/p>\n<p><img decoding=\"async\" alt=\"Strategie nasazen\u00ed v Kubernetes: rolling, recreate, blue\/green, canary, dark (A\/B testov\u00e1n\u00ed)\" src=\"\/wp-content\/uploads\/2019\/11\/d75dc34fea187c4e67879d0f64f9251c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKrokov\u00fd n\u00e1vod na realizaci kan\u00e1rkov\u00fdch nasazen\u00ed pomoc\u00ed Istio naleznete v materi\u00e1lu <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-workflows-for-istio-canary-deployments\">GitOps Workflows with Istio<\/a><\/noindex>. <i>(<b>Pozn. p\u0159ek.<\/b>: Tak\u00e9 jsme p\u0159ekl\u00e1dali materi\u00e1l o kan\u00e1rkov\u00fdch nasazen\u00edch v Istio <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/440378\/\">zde<\/a><\/noindex>.)<\/i><\/p>\n<h4>Kan\u00e1rkov\u00e1 nasazen\u00ed s Weaveworks Flagger<\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.flagger.app\/\">Weaveworks Flagger<\/a><\/noindex> usnad\u0148uje a efektivn\u011b spravuje kan\u00e1rkov\u00e1 nasazen\u00ed.<\/p>\n<p>Flagger automatizuje pr\u00e1ci s nimi. Pou\u017e\u00edv\u00e1 Istio nebo AWS App Mesh pro sm\u011brov\u00e1n\u00ed a p\u0159ep\u00edn\u00e1n\u00ed provozu a tak\u00e9 metriky Prometheus pro anal\u00fdzu v\u00fdsledk\u016f. D\u00e1le lze anal\u00fdzu kan\u00e1rkov\u00fdch nasazen\u00ed doplnit webhooky pro prov\u00e1d\u011bn\u00ed akcepta\u010dn\u00edch test\u016f, z\u00e1t\u011b\u017eov\u00fdch a dal\u0161\u00edch typ\u016f kontrol.<\/p>\n<p>Na z\u00e1klad\u011b nasazen\u00ed Kubernetes a, pokud je to nutn\u00e9, horizont\u00e1ln\u00edho \u0161k\u00e1lov\u00e1n\u00ed pod&#8217;\u016f (HPA), Flagger vytv\u00e1\u0159\u00ed sady objekt\u016f (nasazen\u00ed Kubernetes, slu\u017eby ClusterIP a virtu\u00e1ln\u00ed slu\u017eby Istio nebo App Mesh) pro prov\u00e1d\u011bn\u00ed anal\u00fdzy a realizaci kan\u00e1rkov\u00fdch nasazen\u00ed:<\/p>\n<p><img decoding=\"async\" alt=\"Strategie nasazen\u00ed v Kubernetes: rolling, recreate, blue\/green, canary, dark (A\/B testov\u00e1n\u00ed)\" src=\"\/wp-content\/uploads\/2019\/11\/99aa426bbcf59edcb70d5637e32d8ff7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRealizuj\u00ed ovl\u00e1dac\u00ed smy\u010dku <i>(control loop)<\/i>, Flagger postupn\u011b p\u0159ep\u00edn\u00e1 provoz na kan\u00e1rkov\u00fd server a p\u0159itom m\u011b\u0159\u00ed kl\u00ed\u010dov\u00e9 ukazatele v\u00fdkonnosti, jako je pod\u00edl \u00fasp\u011b\u0161n\u00fdch HTTP po\u017eadavk\u016f, pr\u016fm\u011brn\u00e1 doba po\u017eadavku a zdrav\u00ed pod&#8217;\u016f. Na z\u00e1klad\u011b anal\u00fdzy KPI (kl\u00ed\u010dov\u00fdch ukazatel\u016f v\u00fdkonnosti) se kan\u00e1rkov\u00e1 \u010d\u00e1st bu\u010f zv\u011bt\u0161uje, nebo zmen\u0161uje a v\u00fdsledky anal\u00fdzy jsou publikov\u00e1ny na Slacku. Popis a demonstraci tohoto procesu je mo\u017en\u00e9 nal\u00e9zt v materi\u00e1lu <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 nasazen\u00ed v Kubernetes: rolling, recreate, blue\/green, canary, dark (A\/B testov\u00e1n\u00ed)\" src=\"\/wp-content\/uploads\/2019\/11\/f9fa1ba66edecc2b3e971952a318ea40.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Tmav\u00e9 (skryt\u00e9) nebo A\/B nasazen\u00ed<\/h3>\n<p>\nSkryt\u00e9 nasazen\u00ed je dal\u0161\u00ed variace kan\u00e1rkov\u00e9 strategie (s n\u00ed mimochodem m\u016f\u017ee fungovat tak\u00e9 Flagger). Rozd\u00edl mezi skryt\u00fdm a kan\u00e1rkov\u00fdm nasazen\u00edm spo\u010d\u00edv\u00e1 v tom, \u017ee skryt\u00e1 nasazen\u00ed se t\u00fdkaj\u00ed frontendov\u00e9 \u010d\u00e1sti, nikoli backendu, jako je tomu u kan\u00e1rkov\u00fdch.<\/p>\n<p>Dal\u0161\u00ed n\u00e1zev t\u011bchto nasazen\u00ed je A\/B testov\u00e1n\u00ed. M\u00edsto toho, aby byla nov\u00e1 funkce zp\u0159\u00edstupn\u011bna v\u0161em u\u017eivatel\u016fm, je nab\u00edzena pouze omezen\u00e9 \u010d\u00e1sti z nich. Obvykle tito u\u017eivatel\u00e9 nev\u011bd\u00ed, \u017ee se pod\u00edl\u00ed na testov\u00e1n\u00ed jako prv\u00ed, a proto se pou\u017e\u00edv\u00e1 term\u00edn \"skryt\u00e9 nasazen\u00ed\".<\/p>\n<p>Pomoc\u00ed funk\u010dn\u00edch p\u0159ep\u00edna\u010d\u016f <i>(feature toggles)<\/i> a dal\u0161\u00edch n\u00e1stroj\u016f lze sledovat, jak u\u017eivatel\u00e9 interaguj\u00ed s novou funkc\u00ed, zda je zaujme, nebo zda pova\u017euj\u00ed nov\u00e9 u\u017eivatelsk\u00e9 rozhran\u00ed za zmaten\u00e9, a dal\u0161\u00ed typy metrik.<\/p>\n<p><img decoding=\"async\" alt=\"Strategie nasazen\u00ed v Kubernetes: rolling, recreate, blue\/green, canary, dark (A\/B testov\u00e1n\u00ed)\" src=\"\/wp-content\/uploads\/2019\/11\/037b5ccca2e1d99ac142d2ce734f954d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>Flagger a A\/B nasazen\u00ed<\/h4>\n<p>\nKrom\u011b v\u00e1hov\u00e9ho sm\u011brov\u00e1n\u00ed m\u016f\u017ee Flagger tak\u00e9 sm\u011brovat provoz na kan\u00e1rkov\u00fd server na z\u00e1klad\u011b HTTP parametr\u016f. P\u0159i A\/B testov\u00e1n\u00ed lze pou\u017e\u00edt HTTP hlavi\u010dky nebo cookies k p\u0159esm\u011brov\u00e1n\u00ed ur\u010dit\u00e9ho segmentu u\u017eivatel\u016f. To je zvl\u00e1\u0161\u0165 efektivn\u00ed u frontendov\u00fdch aplikac\u00ed, kter\u00e9 vy\u017eaduj\u00ed afinitu relac\u00ed k serveru <i>(session affinity)<\/i>. Dal\u0161\u00ed informace naleznete v dokumentaci Flagger.<\/p>\n<p><i>Autor vyjad\u0159uje vd\u011b\u010dnost <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/stefanprodan\">Stefan Prodan<\/a><\/noindex>, in\u017een\u00fdru Weaveworks (a tv\u016frci Flaggera), za v\u0161echny skv\u011bl\u00e9 diagramy nasazen\u00ed.<\/i><\/p>\n<h2>P.S. od p\u0159ekladatele<\/h2>\n<p>\nP\u0159e\u010dt\u011bte si tak\u00e9 n\u00e1\u0161 blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/447180\/\">P\u0159ehled a porovn\u00e1n\u00ed Ingress kontrol\u00e9r\u016f pro Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 n\u00e1\u0161 n\u00e1stroj pro CI\/CD v Kubernetes (p\u0159ehled a video p\u0159edn\u00e1\u0161ky)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/469541\/\">Sestaven\u00ed a nasazen\u00ed typick\u00fdch mikroslu\u017eeb s werf a GitLab CI<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/458878\/\">Co je GitOps?<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Zdroj: <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.3 - 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\/cs\/blog\/administrirovanie\/strategii-deploya-v-kubernetes-rolling-recreate-blue-green-canary-dark-a-b-testirovanie\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\/cs\/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 nasazen\u00ed v Kubernetes: rolling, recreate, blue\/green, canary, dark (A\/B testov\u00e1n\u00ed) | ProHoster","description":"Pozn.","canonical_url":"https:\/\/prohoster.info\/cs\/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":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/52688","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=52688"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/52688\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=52688"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=52688"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=52688"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}