{"id":35594,"date":"2019-10-31T22:05:15","date_gmt":"2019-10-31T19:05:15","guid":{"rendered":"https:\/\/prohoster.info\/blog\/gitops-sravnenie-metodov-pull-i-push\/"},"modified":"2019-10-31T22:05:15","modified_gmt":"2019-10-31T19:05:15","slug":"gitops-sravnenie-metodov-pull-i-push","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push","title":{"rendered":"GitOps: srovn\u00e1n\u00ed metod Pull a Push","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Pozn. p\u0159ek.<\/b>: V komunit\u011b Kubernetes z\u00edsk\u00e1v\u00e1 na popularit\u011b trend zvan\u00fd GitOps, \u010demu\u017e jsme se osobn\u011b p\u0159esv\u011bd\u010dili, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/454184\/\">kdy\u017e jsme nav\u0161t\u00edvili<\/a><\/noindex> KubeCon Europe 2019. Tento term\u00edn byl relativn\u011b ned\u00e1vno <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-operations-by-pull-request\">vynalezen<\/a><\/noindex> \u0161\u00e9fem spole\u010dnosti Weaveworks \u2014 Alexisem Richardstonem \u2014 a znamen\u00e1 vyu\u017eit\u00ed b\u011b\u017en\u00fdch n\u00e1stroj\u016f pro v\u00fdvoj\u00e1\u0159e (p\u0159edev\u0161\u00edm Git, odtud i n\u00e1zev) pro \u0159e\u0161en\u00ed provozn\u00edch \u00fakol\u016f. Konkr\u00e9tn\u011b jde o provoz Kubernetes prost\u0159ednictv\u00edm ukl\u00e1d\u00e1n\u00ed jeho konfigurac\u00ed v Gitu a automatick\u00e9ho nasazen\u00ed zm\u011bn do clusteru. O dvou p\u0159\u00edstupech k tomuto nasazen\u00ed hovo\u0159\u00ed Matthias Jg v tomto \u010dl\u00e1nku.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"GitOps: srovn\u00e1n\u00ed metod Pull a Push\" src=\"\/wp-content\/uploads\/2862627cedb4347679d0c14876a24869.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV lo\u0148sk\u00e9m roce <i>(ve skute\u010dnosti se to form\u00e1ln\u011b stalo v srpnu 2017 \u2014 pozn. p\u0159ekl.)<\/i> Objevil se nov\u00fd p\u0159\u00edstup k nasazen\u00ed aplikac\u00ed v Kubernetes. Jmenuje se GitOps a jeho z\u00e1kladem je z\u00e1kladn\u00ed p\u0159edstava, \u017ee sledov\u00e1n\u00ed verz\u00ed deployment\u016f prob\u00edh\u00e1 v bezpe\u010dn\u00e9m prost\u0159ed\u00ed Git repozit\u00e1\u0159e.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><b>Hlavn\u00ed v\u00fdhody tohoto p\u0159\u00edstupu jsou n\u00e1sleduj\u00edc\u00ed<\/b>:<\/p>\n<ol>\n<li> <b>Verzionov\u00e1n\u00ed deployment\u016f a historie zm\u011bn<\/b>. Stav cel\u00e9ho clusteru je uchov\u00e1v\u00e1n v Git repozit\u00e1\u0159i a deploymenty se aktualizuj\u00ed pouze prost\u0159ednictv\u00edm commit\u016f. Krom\u011b toho lze v\u0161echny zm\u011bny sledovat pomoc\u00ed historie commit\u016f.<\/li>\n<li> <b>Vr\u00e1tit pomoc\u00ed b\u011b\u017en\u00fdch gitov\u00fdch p\u0159\u00edkaz\u016f<\/b>. Snadn\u00e9 <code>git reset<\/code> umo\u017e\u0148uje vr\u00e1tit zm\u011bny v deploymentech; v\u017edy jsou k dispozici p\u0159edchoz\u00ed stavy.<\/li>\n<li> <b>Hotov\u00e1 kontrola p\u0159\u00edstupu<\/b>. V\u011bt\u0161ina Git syst\u00e9m\u016f obsahuje mnoho d\u016fv\u011brn\u00fdch \u00fadaj\u016f, proto v\u011bt\u0161ina firem v\u011bnuje zv\u00fd\u0161enou pozornost jejich ochran\u011b. Tato ochrana se samoz\u0159ejm\u011b vztahuje i na operace s deploymenty.<\/li>\n<li> <b>Politiky pro nasazen\u00ed<\/b>. V\u011bt\u0161ina Git syst\u00e9m\u016f od za\u010d\u00e1tku podporuje politiky pro r\u016fzn\u00e9 v\u011btve \u2013 nap\u0159\u00edklad pouze pull requesty mohou aktualizovat master, a zm\u011bny mus\u00ed b\u00fdt zkontrolov\u00e1ny a schv\u00e1leny jin\u00fdm \u010dlenem t\u00fdmu. Stejn\u00e9 politiky se uplat\u0148uj\u00ed na aktualizace deployment\u016f, jak je tomu u \u0159\u00edzen\u00ed p\u0159\u00edstupu.<\/li>\n<\/ol>\n<p>\nJak vid\u00edte, metoda GitOps m\u00e1 \u0159adu v\u00fdhod. B\u011bhem posledn\u00edho roku z\u00edskaly zvl\u00e1\u0161tn\u00ed popularitu dva p\u0159\u00edstupy. Jeden je zalo\u017een na push, druh\u00fd na pull. Ne\u017e se na n\u011b pod\u00edv\u00e1me, pod\u00edvejme se nejprve, jak vypadaj\u00ed typick\u00e9 deploymenty Kubernetes.<\/p>\n<h2>Zp\u016fsoby nasazen\u00ed<\/h2>\n<p>\nV posledn\u00edch letech se v Kubernetes ust\u00e1lily r\u016fzn\u00e9 zp\u016fsoby a n\u00e1stroje pro nasazen\u00ed:<\/p>\n<ol>\n<li> <b>Na z\u00e1klad\u011b dom\u00e1c\u00edch \u0161ablon Kubernetes\/Kustomize<\/b>. To je nejjednodu\u0161\u0161\u00ed zp\u016fsob nasazen\u00ed aplikac\u00ed na Kubernetes. V\u00fdvoj\u00e1\u0159 vytv\u00e1\u0159\u00ed z\u00e1kladn\u00ed YAML soubory a aplikuje je. Aby se zbavil neust\u00e1l\u00e9ho p\u0159episov\u00e1n\u00ed stejn\u00fdch \u0161ablon, byl vyvinut Kustomize (ten p\u0159etv\u00e1\u0159\u00ed \u0161ablony Kubernetes na moduly). <i><b>Pozn. p\u0159ek.<\/b>: Kustomize byl integrov\u00e1n do kubectl s <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/445196\/\">verz\u00ed Kubernetes 1.14<\/a><\/noindex>.<\/i><\/li>\n<li> <b>Helm Charts<\/b>. Helm chartry umo\u017e\u0148uj\u00ed vytv\u00e1\u0159et sady \u0161ablon, init kontejner\u016f, sidecar\u016f atd., kter\u00e9 se pou\u017e\u00edvaj\u00ed pro nasazen\u00ed aplikac\u00ed s flexibiln\u011bj\u0161\u00edmi mo\u017enostmi konfigurace ne\u017e v p\u0159\u00edstupu zalo\u017een\u00e9m na \u0161ablon\u00e1ch. Tento p\u0159\u00edstup je zalo\u017een na \u0161ablonizovan\u00fdch YAML souborech. Helm je vypl\u0148uje r\u016fzn\u00fdmi parametry a pot\u00e9 je odes\u00edl\u00e1 Tillerovi \u2014 clusterov\u00e9mu komponentu, kter\u00fd je nasazuje v clusteru a umo\u017e\u0148uje prov\u00e1d\u011bt aktualizace a vracen\u00ed zp\u011bt. D\u016fle\u017eit\u00e9 je, \u017ee Helm v podstat\u011b jednodu\u0161e vkl\u00e1d\u00e1 pot\u0159ebn\u00e9 hodnoty do \u0161ablon a pot\u00e9 je aplikuje stejn\u011b, jako se to d\u011bl\u00e1 v tradi\u010dn\u00edm p\u0159\u00edstupu <i>(v\u00edce o tom, jak to v\u0161echno funguje a jak to lze pou\u017e\u00edt, si p\u0159e\u010dt\u011bte v na\u0161\u00ed <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/423239\/\">\u010dl\u00e1nku o Helmu<\/a><\/noindex> \u2014 pozn. p\u0159ekl.)<\/i>. Existuje velk\u00e9 mno\u017estv\u00ed hotov\u00fdch Helm chart\u016f, pokr\u00fdvaj\u00edc\u00edch \u0161irok\u00e9 spektrum \u00fakol\u016f.<\/li>\n<li> <b>Alternativn\u00ed n\u00e1stroje<\/b>. Existuje mnoho alternativn\u00edch n\u00e1stroj\u016f. V\u0161echny spojuje to, \u017ee p\u0159ev\u00e1d\u011bj\u00ed ur\u010dit\u00e9 \u0161ablonov\u00e9 soubory na srozumiteln\u00e9 Kubernetes YAML soubory a n\u00e1sledn\u011b je aplikuj\u00ed.<\/li>\n<\/ol>\n<p>\nVe sv\u00e9 pr\u00e1ci neust\u00e1le pou\u017e\u00edv\u00e1me Helm chart pro d\u016fle\u017eit\u00e9 n\u00e1stroje (proto\u017ee v nich je ji\u017e mnoho p\u0159ipraveno, co\u017e zna\u010dn\u011b usnad\u0148uje \u017eivot) a '\u010dist\u00e9' YAML soubory Kubernetes pro nasazen\u00ed vlastn\u00edch aplikac\u00ed.<\/p>\n<h2>Pull &amp; Push<\/h2>\n<p>\nV jednom ze sv\u00fdch ned\u00e1vn\u00fdch p\u0159\u00edsp\u011bvk\u016f na blogu jsem p\u0159edstavil n\u00e1stroj <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/weaveworks\/flux\">Weave Flux<\/a><\/noindex>, co\u017e umo\u017e\u0148uje commitov\u00e1n\u00ed \u0161ablon do Git repozit\u00e1\u0159e a aktualizaci deploymentu po ka\u017ed\u00e9m commitu nebo pushi kontejneru. Moje zku\u0161enosti ukazuj\u00ed, \u017ee tento n\u00e1stroj je jedn\u00edm z hlavn\u00edch v propagaci pull p\u0159\u00edstupu, proto na n\u011bj budu \u010dasto odkazovat. Pokud chcete v\u011bd\u011bt v\u00edce o jeho pou\u017eit\u00ed, zde je <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@m.k.joerg\/gitops-weave-flux-in-detail-77ce36945646\">odkaz na \u010dl\u00e1nek<\/a><\/noindex>.<\/p>\n<p><i><b>NB!<\/b> V\u0161echny v\u00fdhody pou\u017e\u00edv\u00e1n\u00ed GitOps z\u016fst\u00e1vaj\u00ed pro oba p\u0159\u00edstupy.<\/i><\/p>\n<h2>Pull p\u0159\u00edstup<\/h2>\n<p>\n<img decoding=\"async\" alt=\"GitOps: srovn\u00e1n\u00ed metod Pull a Push\" src=\"\/wp-content\/uploads\/4ed8e6de36bc37d0e747ff99027f8399.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZ\u00e1kladn\u00ed my\u0161lenka p\u0159\u00edstupu pull spo\u010d\u00edv\u00e1 v tom, \u017ee v\u0161echny zm\u011bny se aplikuj\u00ed zevnit\u0159 clusteru. Uvnit\u0159 clusteru je oper\u00e1tor, kter\u00fd pravideln\u011b kontroluje souvisej\u00edc\u00ed repozit\u00e1\u0159e Git a Docker Registry. Pokud dojde k jak\u00fdmkoli zm\u011bn\u00e1m, stav clusteru se aktualizuje zevnit\u0159. Obvykle se pova\u017euje, \u017ee tento proces je pom\u011brn\u011b bezpe\u010dn\u00fd, proto\u017ee \u017e\u00e1dn\u00fd extern\u00ed klient nem\u00e1 p\u0159\u00edstup k administr\u00e1torsk\u00fdm pr\u00e1v\u016fm clusteru.<\/p>\n<p><b>Plusy:<\/b><\/p>\n<ol>\n<li> \u017d\u00e1dn\u00fd extern\u00ed klient nem\u00e1 pr\u00e1va prov\u00e1d\u011bt zm\u011bny v clusteru, ve\u0161ker\u00e9 aktualizace se prov\u00e1d\u011bj\u00ed zevnit\u0159.<\/li>\n<li> N\u011bkter\u00e9 n\u00e1stroje tak\u00e9 umo\u017e\u0148uj\u00ed synchronizaci aktualizac\u00ed Helm chart\u016f a jejich p\u0159i\u0159azen\u00ed k clusteru.<\/li>\n<li> Docker Registry lze skenovat na nov\u00e9 verze. Pokud se objev\u00ed nov\u00fd obraz, Git repozit\u00e1\u0159 a deployment se aktualizuj\u00ed na novou verzi.<\/li>\n<li> Pull n\u00e1stroje mohou b\u00fdt distribuov\u00e1ny mezi r\u016fzn\u00fdmi jmenn\u00fdmi prostory s r\u016fzn\u00fdmi repozit\u00e1\u0159i Git a p\u0159\u00edstupov\u00fdmi pr\u00e1vy. D\u00edky tomu lze pou\u017e\u00edt multitenantn\u00ed model. Nap\u0159\u00edklad t\u00fdm A m\u016f\u017ee pou\u017e\u00edvat jmenn\u00fd prostor A, t\u00fdm B jmenn\u00fd prostor B, a t\u00fdm zab\u00fdvaj\u00edc\u00ed se infrastrukturou m\u016f\u017ee pou\u017e\u00edvat glob\u00e1ln\u00ed prostor.<\/li>\n<li> Obecn\u011b jsou n\u00e1stroje velmi lehk\u00e9.<\/li>\n<li> V kombinaci s n\u00e1stroji jako je oper\u00e1tor <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bitnami-labs\/sealed-secrets\">Bitnami Sealed Secrets<\/a><\/noindex>, mohou b\u00fdt tajemstv\u00ed uchov\u00e1v\u00e1na v za\u0161ifrovan\u00e9 podob\u011b v Git repozit\u00e1\u0159i a vyta\u017eena uvnit\u0159 clusteru.<\/li>\n<li> Nen\u00ed zde \u017e\u00e1dn\u00e1 vazba na CD pipeline, nebo\u0165 nasazen\u00ed prob\u00edh\u00e1 uvnit\u0159 clusteru.<\/li>\n<\/ol>\n<p>\n<b>Nev\u00fdhody<\/b>:<\/p>\n<ol>\n<li> Spr\u00e1va tajemstv\u00ed nasazen\u00ed z Helm chart\u016f je slo\u017eit\u011bj\u0161\u00ed ne\u017e s obvykl\u00fdmi, proto\u017ee mus\u00ed b\u00fdt nejprve generov\u00e1na jako nap\u0159\u00edklad sealed secrets, pot\u00e9 de\u0161ifrov\u00e1na intern\u00edm oper\u00e1torem a teprve pot\u00e9 jsou k dispozici pro n\u00e1stroj pull. Pot\u00e9 lze spustit release v Helmu s hodnotami v ji\u017e nasazen\u00fdch tajemstv\u00edch. Nejjednodu\u0161\u0161\u00ed zp\u016fsob je vytvo\u0159it tajemstv\u00ed se v\u0161emi hodnotami Helm pou\u017e\u00edvan\u00fdmi pro nasazen\u00ed, de\u0161ifrovat je a commitnout je do Gitu.<\/li>\n<li> P\u0159i pou\u017eit\u00ed pull p\u0159\u00edstupu jste v\u00e1z\u00e1ni na n\u00e1stroje, kter\u00e9 operuj\u00ed s pull. To omezuje mo\u017enosti konfigurace procesu nasazen\u00ed v clusteru. Nap\u0159\u00edklad pr\u00e1ce s Kustomize je komplikovan\u00e1 t\u00edm, \u017ee mus\u00ed b\u00fdt provedena p\u0159ed t\u00edm, ne\u017e kone\u010dn\u00e9 \u0161ablony p\u0159ijdou do Gitu. Ne\u0159\u00edk\u00e1m, \u017ee nelze pou\u017e\u00edt jednotliv\u00e9 n\u00e1stroje, ale jejich integrace do nasazovac\u00edho procesu je slo\u017eit\u011bj\u0161\u00ed.<\/li>\n<\/ol>\n<p><\/p>\n<h2>P\u0159\u00edstup na z\u00e1klad\u011b Push<\/h2>\n<p>\n<img decoding=\"async\" alt=\"GitOps: srovn\u00e1n\u00ed metod Pull a Push\" src=\"\/wp-content\/uploads\/533fc0bd107c3338d323e908ae9e75ab.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVe vzd\u00e1len\u00e9m p\u0159\u00edstupu spou\u0161t\u00ed extern\u00ed syst\u00e9m (p\u0159ev\u00e1\u017en\u011b CD pipeline) nasazen\u00ed v clusteru po commitu do Git repozit\u00e1\u0159e nebo v p\u0159\u00edpad\u011b \u00fasp\u011b\u0161n\u00e9ho dokon\u010den\u00ed p\u0159edchoz\u00edho CI pipeline. V tomto p\u0159\u00edstupu m\u00e1 syst\u00e9m p\u0159\u00edstup do clusteru.<\/p>\n<p><b>V\u00fdhody<\/b>:<\/p>\n<ol>\n<li> Bezpe\u010dnost je ur\u010dena Git repozit\u00e1\u0159em a build pipeline.<\/li>\n<li> Nasazen\u00ed Helm chart\u016f je snaz\u0161\u00ed, existuje podpora pro Helm pluginy.<\/li>\n<li> Spr\u00e1va tajemstv\u00ed je snaz\u0161\u00ed, proto\u017ee je mo\u017en\u00e9 je pou\u017e\u00edvat v pipelines a tak\u00e9 je uchov\u00e1vat v Gitu v za\u0161ifrovan\u00e9 podob\u011b (v z\u00e1vislosti na preferenc\u00edch u\u017eivatele).<\/li>\n<li> Nen\u00ed zde v\u00e1zanost na konkr\u00e9tn\u00ed n\u00e1stroj, proto\u017ee lze pou\u017e\u00edt jak\u00fdkoliv jejich typ.<\/li>\n<li> Aktualizace verz\u00ed kontejner\u016f mohou b\u00fdt iniciov\u00e1ny build pipeline.<\/li>\n<\/ol>\n<p>\n<b>Nev\u00fdhody<\/b>:<\/p>\n<ol>\n<li> \u00dadaje pro p\u0159\u00edstup k clustru se nach\u00e1zej\u00ed uvnit\u0159 build syst\u00e9mu.<\/li>\n<li> Aktualizace kontejner\u016f nasazen\u00ed je st\u00e1le snaz\u0161\u00ed prov\u00e1d\u011bt pomoc\u00ed pull procesu.<\/li>\n<li> Siln\u00e1 z\u00e1vislost na CD syst\u00e9mu, proto\u017ee pot\u0159ebn\u00e9 pipeline byly mo\u017en\u00e1 p\u016fvodn\u011b naps\u00e1ny pro Gitlab Runners, a pot\u00e9 se t\u00fdm rozhodne p\u0159ej\u00edt na Azure DevOps nebo Jenkins... a bude nutn\u00e9 migrovat velk\u00e9 mno\u017estv\u00ed build pipeline.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Shrnut\u00ed: Push nebo Pull?<\/h2>\n<p>\nJak to obvykle b\u00fdv\u00e1, ka\u017ed\u00fd p\u0159\u00edstup m\u00e1 sv\u00e9 klady a z\u00e1pory. N\u011bkter\u00e9 \u00fakoly se l\u00e9pe pln\u00ed jedn\u00edm zp\u016fsobem a slo\u017eit\u011bji druh\u00fdm. Zpo\u010d\u00e1tku jsem prov\u00e1d\u011bl nasazen\u00ed ru\u010dn\u011b, ale pot\u00e9, co jsem narazil na n\u011bkolik \u010dl\u00e1nk\u016f o Weave Flux, jsem se rozhodl zav\u00e9st procesy GitOps pro v\u0161echny projekty. Pro z\u00e1kladn\u00ed \u0161ablony to bylo snadn\u00e9, ale pak jsem za\u010dal nar\u00e1\u017eet na obt\u00ed\u017ee p\u0159i pr\u00e1ci s Helm chartami. V t\u00e9 dob\u011b Weave Flux nab\u00edzel pouze z\u00e1kladn\u00ed verzi Helm Chart Operatoru, ale i dnes jsou n\u011bkter\u00e9 \u00fakoly slo\u017eit\u011bj\u0161\u00ed kv\u016fli nutnosti ru\u010dn\u011b vytv\u00e1\u0159et tajemstv\u00ed a aplikovat je. M\u016f\u017eete \u0159\u00edci, \u017ee pull p\u0159\u00edstup je mnohem bezpe\u010dn\u011bj\u0161\u00ed, proto\u017ee p\u0159ihla\u0161ovac\u00ed \u00fadaje k clustru nejsou dostupn\u00e9 mimo n\u011bj, co\u017e zvy\u0161uje bezpe\u010dnost natolik, \u017ee to stoj\u00ed za dodate\u010dn\u00e9 \u00fasil\u00ed.<\/p>\n<p>Po chv\u00edli p\u0159em\u00fd\u0161len\u00ed jsem dosp\u011bl k p\u0159ekvapiv\u00e9mu z\u00e1v\u011bru, \u017ee tomu tak nen\u00ed. Pokud jde o komponenty, kter\u00e9 vy\u017eaduj\u00ed maxim\u00e1ln\u00ed ochranu, do takov\u00e9ho seznamu by m\u011bly pat\u0159it \u00falo\u017ei\u0161t\u011b tajemstv\u00ed a CI\/CD syst\u00e9my, Git repozit\u00e1\u0159e. Informace uvnit\u0159 nich jsou velmi zraniteln\u00e9 a pot\u0159ebuj\u00ed maxim\u00e1ln\u00ed ochranu. Krom\u011b toho, pokud se n\u011bkdo dostane do va\u0161eho Git repozit\u00e1\u0159e a bude moci tam pushnout k\u00f3d, bude schopen nasadit cokoliv si p\u0159eje (bez ohledu na to, zda je to pull nebo push) a proniknout do syst\u00e9m\u016f clusteru. Nejkriti\u010dt\u011bj\u0161\u00edmi komponentami, kter\u00e9 pot\u0159ebuj\u00ed ochranu, jsou Git repozit\u00e1\u0159 a CI\/CD syst\u00e9my, nikoliv pov\u011b\u0159en\u00ed clusteru. Pokud m\u00e1te dob\u0159e nastaven\u00e9 politiky a bezpe\u010dnostn\u00ed opat\u0159en\u00ed pro syst\u00e9my tohoto typu, a pov\u011b\u0159en\u00ed clusteru jsou v pipelinech extrahov\u00e1na pouze jako tajemstv\u00ed, m\u016f\u017ee b\u00fdt dodate\u010dn\u00e1 bezpe\u010dnost pull p\u0159\u00edstupu m\u00e9n\u011b cenn\u00e1, ne\u017e se p\u016fvodn\u011b p\u0159edpokl\u00e1dalo.<\/p>\n<p>Pokud je tedy pull p\u0159\u00edstup pracn\u011bj\u0161\u00ed a nep\u0159in\u00e1\u0161\u00ed \u017e\u00e1dn\u00e9 v\u00fdhody z hlediska bezpe\u010dnosti, nen\u00ed logick\u00e9 pou\u017e\u00edvat pouze push p\u0159\u00edstup? Ale n\u011bkdo by mohl \u0159\u00edci, \u017ee v push p\u0159\u00edstupu jste p\u0159\u00edli\u0161 z\u00e1visl\u00ed na CD syst\u00e9mu a mo\u017en\u00e1 by bylo lep\u0161\u00ed to ned\u011blat, abyste v budoucnu usnadnili migrace.<\/p>\n<p>Podle m\u00e9ho n\u00e1zoru (jako v\u017edy) by se m\u011blo pou\u017e\u00edvat to, co nejl\u00e9pe vyhovuje konkr\u00e9tn\u00ed situaci, nebo kombinovat r\u016fzn\u00e9 p\u0159\u00edstupy. Osobn\u011b pou\u017e\u00edv\u00e1m ob\u011b metody: Weave Flux pro nasazen\u00ed zalo\u017een\u00e1 na pull, kter\u00e9 v\u011bt\u0161inou zahrnuj\u00ed na\u0161e vlastn\u00ed slu\u017eby, a push p\u0159\u00edstup s Helmem a pluginy, kter\u00e9 usnad\u0148uj\u00ed aplikaci Helm chart\u016f na klastr a umo\u017e\u0148uj\u00ed bezprobl\u00e9mov\u00e9 vytv\u00e1\u0159en\u00ed tajemstv\u00ed. Mysl\u00edm, \u017ee nikdy nebude jedin\u00e9 \u0159e\u0161en\u00ed vyhovuj\u00edc\u00ed v\u0161em situac\u00edm, proto\u017ee je zde v\u017edy mnoho nuanc\u00ed a ty z\u00e1vis\u00ed na konkr\u00e9tn\u00ed aplikaci. P\u0159esto d\u016frazn\u011b doporu\u010duji GitOps \u2014 v\u00fdrazn\u011b usnad\u0148uje \u017eivot a zvy\u0161uje bezpe\u010dnost.<\/p>\n<p>Douf\u00e1m, \u017ee m\u00e9 zku\u0161enosti ohledn\u011b tohoto t\u00e9matu pomohou ur\u010dit, kter\u00fd zp\u016fsob nejl\u00e9pe vyhovuje va\u0161emu typu nasazen\u00ed, a r\u00e1d se dozv\u00edm v\u00e1\u0161 n\u00e1zor.<\/p>\n<h2>P.S. Pozn\u00e1mka od p\u0159ekladatele<\/h2>\n<p>\nMezi nev\u00fdhodami pull modelu je bod, \u017ee je obt\u00ed\u017en\u00e9 ulo\u017eit v Gitu renderovan\u00e9 manifesty, nicm\u00e9n\u011b nen\u00ed nev\u00fdhodou, \u017ee CD pipeline v pull modelu \u017eije odd\u011blen\u011b od nasazen\u00ed a v podstat\u011b se st\u00e1v\u00e1 pipeline kategorie <i>Continuous Apply<\/i>. Proto bude zapot\u0159eb\u00ed je\u0161t\u011b v\u00edce \u00fasil\u00ed k tomu, aby bylo mo\u017en\u00e9 shroma\u017e\u010fovat stav ze v\u0161ech nasazen\u00ed a n\u011bjak\u00fdm zp\u016fsobem poskytovat p\u0159\u00edstup k log\u016fm\/stavu, ide\u00e1ln\u011b s vazbou na CD syst\u00e9m.<\/p>\n<p>V tomto smyslu push model umo\u017e\u0148uje poskytnout alespo\u0148 n\u011bjak\u00e9 z\u00e1ruky nasazen\u00ed, proto\u017ee doba \u017eivota pipeline m\u016f\u017ee b\u00fdt nastavena na dobu \u017eivota nasazen\u00ed.<\/p>\n<p>Otestovali jsme ob\u011b modely a do\u0161li jsme k t\u011bmto stejn\u00fdm z\u00e1v\u011br\u016fm jako autor \u010dl\u00e1nku:<\/p>\n<ol>\n<li> Pull model n\u00e1m vyhovuje pro organizaci aktualizac\u00ed syst\u00e9mov\u00fdch komponent na velk\u00e9m mno\u017estv\u00ed cluster\u016f (viz) <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/455543\/\">\u010dl\u00e1nek o addon-operatoru<\/a><\/noindex>).<\/li>\n<li> Push model zalo\u017een\u00fd na GitLab CI je dob\u0159e p\u0159izp\u016fsoben pro nasazen\u00ed aplikac\u00ed pomoc\u00ed Helm chart\u016f. P\u0159i tom je nasazen\u00ed v r\u00e1mci pipeline sledov\u00e1no pomoc\u00ed n\u00e1stroje <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex>. Mimochodem, v kontextu tohoto na\u0161eho projektu jsme pravideln\u011b sl\u00fdchali \"GitOps\", kdy\u017e jsme diskutovali o aktu\u00e1ln\u00edch probl\u00e9mech DevOps in\u017een\u00fdr\u016f u na\u0161eho st\u00e1nku na KubeCon Europe 19.<\/li>\n<\/ol>\n<p><\/p>\n<h2>P.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\/441964\/\">Kubernetes tipy a triky: p\u0159eklad pracovn\u00edch zdroj\u016f v clusteru pod spr\u00e1vou Helm 2<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/434160\/\">P\u0159edstavujeme knihovnu kubedog pro sledov\u00e1n\u00ed zdroj\u016f Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">Roz\u0161i\u0159ujeme a dopl\u0148ujeme Kubernetes (p\u0159ehled a video z p\u0159edn\u00e1\u0161ky)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436910\/\">Tipy pro vytv\u00e1\u0159en\u00ed nestandardn\u00edch pracovn\u00edch postup\u016f v GitLab CI<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p class=\"for_users_only_msg\">Pouze registrovan\u00ed u\u017eivatel\u00e9 se mohou \u00fa\u010dastnit ankety. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">P\u0159ihlaste se<\/a><\/noindex>, pros\u00edm.<\/p>\n<h2 class=\"default-block__polling-title\">Pou\u017e\u00edv\u00e1te GitOps?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ano, pull p\u0159\u00edstup<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ano, push<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ano, pull + push<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ano, n\u011bco jin\u00e9ho<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ne<\/p>\n<\/li>\n<\/ul>\n<p>    Hlasovalo 30 u\u017eivatel\u016f. 10 u\u017eivatel\u016f se zdr\u017eelo.<br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/456754\/\">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.: \u0412 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435 Kubernetes \u044f\u0432\u043d\u0443\u044e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u0440\u0435\u043d\u0434 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c GitOps, \u0432 \u0447\u0451\u043c \u043c\u044b \u043b\u0438\u0447\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u043b\u0438\u0441\u044c, \u043f\u043e\u0441\u0435\u0442\u0438\u0432 KubeCon Europe 2019. \u042d\u0442\u043e\u0442 \u0442\u0435\u0440\u043c\u0438\u043d \u0431\u044b\u043b \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043d \u0433\u043b\u0430\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Weaveworks \u2014 Alexis Richardson \u2014 \u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 (\u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u2014 Git, \u043e\u0442\u043a\u0443\u0434\u0430 \u0438 \u0441\u0430\u043c\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435) \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438. \u0412 [&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-35594","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\/gitops-sravnenie-metodov-pull-i-push\" \/>\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\udd47GitOps: \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 Pull \u0438 Push | 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\/gitops-sravnenie-metodov-pull-i-push\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:05:15+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:05:15+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\udd47GitOps: srovn\u00e1n\u00ed metod Pull a Push | ProHoster","description":"Pozn.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push","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\udd47GitOps: \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 Pull \u0438 Push | ProHoster","og:description":"\u041f\u0440\u0438\u043c.","og:url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/gitops-sravnenie-metodov-pull-i-push","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:05:15+00:00","article:modified_time":"2019-10-31T19:05:15+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35594","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-21 23:54:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:05:10","updated":"2026-01-21 23:54:19","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\/35594","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=35594"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/35594\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=35594"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=35594"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=35594"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}