{"id":35941,"date":"2019-10-31T22:07:41","date_gmt":"2019-10-31T19:07:41","guid":{"rendered":"https:\/\/prohoster.info\/blog\/chto-zhe-takoe-gitops\/"},"modified":"2019-10-31T22:07:41","modified_gmt":"2019-10-31T19:07:41","slug":"chto-zhe-takoe-gitops","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/chto-zhe-takoe-gitops","title":{"rendered":"Mis on GitOps?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>M\u00e4rkus t\u00f5lke kohta.<\/b>: P\u00e4rast hiljutist avaldust <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/456754\/\">materjalist<\/a><\/noindex> GitOpsi pull- ja push-meetodite kohta n\u00e4gime huvi selle mudeli vastu \u00fcldiselt, kuid venekeelseid avaldusi sellel teemal oli \u00e4\u00e4rmiselt v\u00e4he (Habr\u00e9s pole neid praktiliselt \u00fcldse). Seet\u00f5ttu oleme r\u00f5\u00f5msad, et saame teile pakkuda t\u00f5lget teisest artiklist \u2014 olgu see v\u00f5i peaaegu aastatagune! \u2014 Weaveworksilt, kelle juht m\u00f5tles v\u00e4lja termini \u201eGitOps\u201c. Tekst selgitab l\u00e4henemise olemust ja peamisi erinevusi juba olemasolevatest.<\/i><\/p>\n<p>\nAasta tagasi avaldasime <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-operations-by-pull-request\">sissejuhatus GitOpsi<\/a><\/noindex>. Sel ajal r\u00e4\u00e4kisime, kuidas Weaveworksi meeskond k\u00e4ivitas t\u00e4ielikult Kubernetesel p\u00f5hineva SaaS-i ja t\u00f6\u00f6tas v\u00e4lja hulga parimaid praktikaid juurutamiseks, haldamiseks ja monitoorimiseks cloud native keskkonnas.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Artikkel osutus populaarseks. Teised inimesed hakkasid r\u00e4\u00e4kima GitOpsist, hakati avaldama uusi t\u00f6\u00f6riistu <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/hasura\/gitkube\">git push<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/dzone.com\/articles\/weaveworks-gitops-developer-toolkit-part-one-skaff\">arendamiseks<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/storing-secure-sealed-secrets-using-gitops\">saladuste<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.alexellis.io\/introducing-openfaas-cloud\/\">funktsioonide<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/jenkins.io\/blog\/2018\/03\/19\/introducing-jenkins-x\/\">j\u00e4tkuva integreerimise<\/a><\/noindex> jne. Meie saidile ilmus <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/category\/gitops\/\">suure hulga<\/a><\/noindex> publikatsioone ja GitOpsi kasutusjuhtumeid. Kuid m\u00f5nedel inimestel j\u00e4i endiselt k\u00fcsimusi. Kuidas see mudel erineb traditsioonilisest <noindex><a rel=\"nofollow\" href=\"https:\/\/puppet.com\/blog\/a-deployment-pipeline-for-infrastructure-a-devops-case-study-at-nbn\">infrastruktuuri kui koodi<\/a><\/noindex> ja pidevast tarnimist (<noindex><a rel=\"nofollow\" href=\"https:\/\/puppet.com\/blog\/a-deployment-pipeline-for-infrastructure-a-devops-case-study-at-nbn\">continuous delivery<\/a><\/noindex>)? Kas Kubernetes on vajalik?<\/p>\n<p>Varsti m\u00f5istsime, et on vaja uut m\u00e4\u00e4ratlust, mis pakuks:<\/p>\n<ol>\n<li> Suure hulga n\u00e4iteid ja lugusid;<\/li>\n<li> Konkreetsed m\u00e4\u00e4ratlust GitOpsile;<\/li>\n<li> V\u00f5rdlus traditsioonilise continuous delivery'ga.<\/li>\n<\/ol>\n<p>\nSelles artiklis p\u00fc\u00fcdsime katta k\u00f5ik need teemad. Siit leiate v\u00e4rskendatud sissejuhatuse GitOpsi ja arendajate ning CI\/CD vaatepildi sellele. Keskendume peamiselt Kubernetesile, kuigi mudelit on t\u00e4iesti v\u00f5imalik \u00fcldistada.<\/p>\n<h2>Tere tulemast: GitOps<\/h2>\n<p>\nKujutage ette Alisat. Ta juhib ettev\u00f5tet Family Insurance, mis pakub tervise-, auto-, kinnisvara- ja reisikindlustuse poliise inimestele, kes on liiga h\u00f5ivatud, et ise lepingute n\u00fcanssidega vaeva n\u00e4ha. Tema \u00e4ri alustas k\u00f5rvalprojekti raames, kui Alisa t\u00f6\u00f6tas pangas andmete teadlasena. \u00dchel hetkel taipas ta, et saab kasutada arenenud arvuti algoritme, et andmete anal\u00fc\u00fcsi ja kindlustuspakkumiste koostamise efektiivsust suurendada. Investorid rahastasid projekti ja n\u00fc\u00fcd toob tema ettev\u00f5te \u00fcle 20 miljoni dollari aastas ning kasvab kiiresti. Praegu t\u00f6\u00f6tab selles erinevates ametites 180 inimest. Nende seas on tehnoloogia meeskond, mis tegeleb veebisaidi, andmebaasi arendamise ja kliendibaasi anal\u00fc\u00fcsiga. 60-liikmelist meeskonda juhib Bob \u2013 ettev\u00f5tte tehnoloogiadirektor.<\/p>\n<p>Bobi meeskond juurutab tootmis\u00fcsteeme pilves. Nende peamised rakendused t\u00f6\u00f6tavad GKE-l, kasutades Google Cloudi Kubernetesest saadavaid eeliseid. Lisaks kasutavad nad oma t\u00f6\u00f6s erinevaid andmete ja anal\u00fc\u00fctika t\u00f6\u00f6riistu.<\/p>\n<p>Family Insurance ei plaaninud konteinerite kasutusele v\u00f5tta, kuid sai innustust Dockerist. Varsti avastas ettev\u00f5tte spetsialistid, et GKE v\u00f5imaldab klastreid uusi funktsioone testimiseks kergelt ja vaevata juurutada. Lisati Jenkins CI jaoks ja Quay konteineriregistri haldamiseks, kirjutati Jenkinsile skriptid, mis push&#8217;isid uusi konteineri ja konfiguratsiooni GKE-sse.<\/p>\n<p>M\u00f5ni aeg m\u00f6\u00f6dus. Alice ja Bob olid valitud l\u00e4henemise t\u00f5hususes ja selle m\u00f5ju osas \u00e4ritegevusele pettunud. Konteinerite juurutamine ei parandanud t\u00f5husust nii palju, kui meeskond oli lootsinud. M\u00f5nikord purunesid juurutamised ja polnud selge, kas s\u00fc\u00fcdi olid koodimuudatused. Samuti oli raske j\u00e4lgida konfiguratsioonide muudatusi. Sageli tuli luua uus klaster ja viia sinna rakendused, kuna see oli ainus lihtne viis olukorra, millesse s\u00fcsteem oli lasknud, likvideerida. Alice kartis, et olukord halveneb rakenduse arenedes (lisaks oli ootel uus masin\u00f5ppe projekt). Bob automatiseeris suure osa t\u00f6\u00f6st ning ei m\u00f5istnud, miks torustik on endiselt ebastabiilne, halvasti skaleerub ja n\u00f5uab perioodiliselt k\u00e4sitsi sekkumist.<\/p>\n<p><b>Siis kuulsid nad GitOpsist. See lahendus osutus just selliseks, mida nad vajasid kindlaks edasiviimiseks.<\/b><\/p>\n<p>Alice ja Bob olid juba pikka aega kuulnud Git-p\u00f5histest t\u00f6\u00f6voogudest, DevOpsist ja infrastruktuurist kui koodist. GitOpsi ainulaadsus seisneb selles, et see toob kaasa rida parimaid praktikaid \u2014 kategoorilisi ja regulatiivseid \u2014 nende ideede elluviimiseks Kubernetes kontekstis. See teema <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/search?q=gitops&amp;src=typd\">on korduvalt t\u00f5statatud<\/a><\/noindex>, sealhulgas <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-high-velocity-cicd-for-kubernetes\">Weaveworks'i blogis<\/a><\/noindex>.<\/p>\n<p>Family Insurance otsustab GitOpsi rakendada. N\u00fc\u00fcd on ettev\u00f5ttel automatiseeritud k\u00e4itamisring mudel, mis on \u00fchilduv Kubernetesiga ja \u00fchendab <i>kiirus<\/i> koos <i>stabiilsusega<\/i>, kuna nad:<\/p>\n<ul>\n<li> avastasid, et meeskonna tootlikkus on kahekordistunud ja keegi ei kaota sellega pead;<\/li>\n<li> on l\u00f5petanud skriptide haldamise. Selle asemel saavad nad n\u00fc\u00fcd keskenduda uutele funktsioonidele ja t\u00e4iustada insenerimeetodeid \u2014 n\u00e4iteks rakendada kanarbikuv\u00f5tteid ja parandada testimist;<\/li>\n<li> on t\u00e4iustanud juurutamisprotsessi \u2014 n\u00fc\u00fcd puruneb see harva;<\/li>\n<li> saime v\u00f5imaluse taastada juurutamisi osaliste rikke korral ilma k\u00e4sitsi sekkumiseta;<\/li>\n<li> on omandanud b<i>ilotka<\/i>suurema kindluse tarnes\u00fcsteemides. Alice ja Bob avastasid, et meeskonna saab jagada r\u00fchmadesse, mis tegelevad mikroteenustega ja t\u00f6\u00f6tavad paralleelselt;<\/li>\n<li> saavad iga r\u00fchma j\u00f5upingutuste abil projekti lisada 30-50 muudatust iga p\u00e4ev ja proovida uusi tehnikaid;<\/li>\n<li> lihtsalt kaasavad projekti uusi arendajaid, kes saavad paar tunni p\u00e4rast pull request&#8217;ide kaudu toota uuendusi productionis;<\/li>\n<li> kergesti l\u00e4bivad SOC2 auditi <i>(teenusepakkujate vastavuse kontrollimine andmete turvalise haldamise n\u00f5uetele; loe l\u00e4hemalt n\u00e4iteks <noindex><a rel=\"nofollow\" href=\"https:\/\/www.imperva.com\/learn\/data-security\/soc-2-compliance\/\">siin<\/a><\/noindex> \u2014 toimetaja m\u00e4rkus)<\/i>.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Mis juhtus?<\/h3>\n<p>\nGitOps \u2014 see on kaks asja:<\/p>\n<ol>\n<li> Kubernetes'e ja pilvep\u00f5hine tegevusmudel. See pakub parimate praktikate kogumit konteinerites kokku kogutud klastrite ja rakenduste juurutamiseks, haldamiseks ja j\u00e4lgimiseks. Elegantne m\u00e4\u00e4ratlemine \u00fche slaidi kujul <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/vitorsilva\/status\/999978906903080961\">\u00fche slaidi<\/a><\/noindex> alates <noindex><a rel=\"nofollow\" href=\"https:\/\/2018.agilept.org\/speaker_luis_faceira.html\">Luis Faceira<\/a><\/noindex>:\n<\/li>\n<li> Teekond arendajate keskse keskkonna loomiseks rakenduste haldamiseks. Me rakendame Git t\u00f6\u00f6vooge nii tegevuses kui arenduses. Pange t\u00e4hele, et see ei t\u00e4henda lihtsalt Git push'i, vaid kogu CI\/CD ja UI\/UX t\u00f6\u00f6riistade kompleksi korraldamist.<\/li>\n<\/ol>\n<p><\/p>\n<h3>M\u00f5ned s\u00f5nad Gitist<\/h3>\n<p>\nKui te ei tunne versioonihalduss\u00fcsteeme ja Git-p\u00f5hist t\u00f6\u00f6voogu, soovitame tungivalt nendega tutvuda. Alguses v\u00f5ib t\u00f6\u00f6 harudega ja pull request&#8217;idega tunduda nagu mustkunst, kuid plussid on v\u00e4\u00e4rt vaeva. Siin on <noindex><a rel=\"nofollow\" href=\"https:\/\/codeburst.io\/trunk-based-development-vs-git-flow-a0212a6cae64\">hea artikkel<\/a><\/noindex> alguseks.<\/p>\n<h2>Kuidas Kubernetes t\u00f6\u00f6tab<\/h2>\n<p>\nMeie loos p\u00f6\u00f6rdusid Alice ja Bob GitOps'i poole, olles t\u00f6\u00f6tanud Kubernetes'ega m\u00f5nda aega. T\u00f5epoolest, GitOps on tihedalt seotud Kubernetes'ega \u2014 see on tegevusmudel Kubernetes'e p\u00f5histe infrastruktuuride ja rakenduste jaoks.<\/p>\n<h3>Mida Kubernetes kasutajatele annab?<\/h3>\n<p>\nSiin on m\u00f5ned peamised omadused:<\/p>\n<ol>\n<li> Kubernetes'e mudelis on k\u00f5ik v\u00f5imalik kirjeldada deklareerivas vormis.<\/li>\n<li> Kubernetes'e API-server aktsepteerib sellist deklareerimist sisendina ja seej\u00e4rel \u00fcritab pidevalt tuua klastrit deklareerimisega kirja pandud olekusse.<\/li>\n<li> Deklareeringud on piisavad, et kirjeldada ja hallata suurt hulka t\u00f6\u00f6koormusi \u2014 \"rakendusi\".<\/li>\n<li> Seega toimub rakenduse ja klastrite muutmine j\u00e4rgmiste t\u00f5ttu:\n<ul>\n<li> muutused konteineri piltides;<\/li>\n<li> muutused deklareerivas spetsifikatsioonis;<\/li>\n<li> keskkonna vigade t\u00f5ttu \u2014 n\u00e4iteks konteinerite krahh.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><\/p>\n<h3>Kubernetes'e suurep\u00e4rased konvergentsiv\u00f5imed<\/h3>\n<p>\nKui administraator teeb muudatusi konfiguratsioonis, rakendab Kubernetes'e orkestrator neid klastrisse seni kuni selle olek <i>l\u00e4heneb uuele konfiguratsioonile<\/i>. See mudel t\u00f6\u00f6tab iga Kubernetes'i ressursiga ja seda on v\u00f5imalik laiendada Custom Resource Definitions (CRD-de) abil. Seega on Kubernetes'e juurutustel j\u00e4rgmised imelised omadused:<\/p>\n<ul>\n<li> <b>Automatiseerimine<\/b>: Kubernetes'e uuendused pakuvad mehhanismi muudatuste rakendamise protsessi automatiseerimiseks korrektselt ja \u00f5igeaegselt.<\/li>\n<li> <b>Konvergents<\/b>: Kubernetes j\u00e4tkab uuenduste proovimist, kuni see \u00f5nnestub.<\/li>\n<li> <b>Idempotentsus<\/b>: korduvad konvergentsi rakendused toovad sama tulemuse.<\/li>\n<li> <b>Determinism<\/b>: piisava ressursside olemasolu korral s\u00f5ltub uuendatud klastrite olek ainult soovitud olekust.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Kuidas GitOps t\u00f6\u00f6tab<\/h2>\n<p>\nOleme piisavalt \u00f5ppinud Kubernetes'est, et selgitada GitOps'i t\u00f6\u00f6 p\u00f5him\u00f5tteid.<\/p>\n<p>Naaseme peretihedate kindlustusmeeskondade juurde, mis on seotud mikroteenustega. Mida nad tavaliselt teevad? Vaadake allolevat nimekirja (kui m\u00f5ni punkt tundub kummaline v\u00f5i tundmatu \u2013 palun pidage meeles kriitikat ja j\u00e4\u00e4ge meie juurde). Need on lihtsalt Jenkins'i p\u00f5hised t\u00f6\u00f6vood. On ka palju teisi protsesse erinevate t\u00f6\u00f6riistade kasutamisel.<\/p>\n<p>Peamine on see, et me n\u00e4eme, et iga uuendus l\u00f5ppeb muudatuste tegemisega konfiguratsioonifailides ja Git'i hoidlates. Need muudatused Git'is p\u00f5hjustavad, et \u201eGitOps operaator\u201c uuendab klastrit:<\/p>\n<p>1. T\u00f6\u00f6voog: \u201e<i>Jenkins'i ehitus \u2013 master haru<\/i>\u00bb.<br \/>\n\u00dclesannete nimekiri:<\/p>\n<ul>\n<li> Jenkins push&#8217;ib m\u00e4rgistatud pildid Quay-sse;<\/li>\n<li> Jenkins push&#8217;ib konfigureerimise ja Helm-diagrammid master-hoidla baketti;<\/li>\n<li> Pilvefunktsioon kopeerib konfi ja graafikud master-hoidla \u00e4mbrist Git'i hoidla masterisse;<\/li>\n<li> GitOps operaator uuendab klastrit.<\/li>\n<\/ul>\n<p>\n2. <i>Jenkins'i ehitus \u2013 release v\u00f5i hotfix haru<\/i>:<\/p>\n<ul>\n<li> Jenkins push&#8217;ib m\u00e4rgistamata pilte Quay-sse;<\/li>\n<li> Jenkins push&#8217;ib konfigureerimise ja Helm-diagrammid staging-hoidla baketti;<\/li>\n<li> Pilvefunktsioon kopeerib konfi ja graafikud staging-hoidla \u00e4mbrist Git'i hoidla stagingusse;<\/li>\n<li> GitOps operaator uuendab klastrit.<\/li>\n<\/ul>\n<p>\n3. <i>Jenkins'i ehitus \u2013 develop v\u00f5i feature haru<\/i>:<\/p>\n<ul>\n<li> Jenkins push&#8217;ib m\u00e4rgistamata pilte Quay-sse;<\/li>\n<li> Jenkins push&#8217;ib konfigureerimise ja Helm-diagrammid arendus-hoidla baketti;<\/li>\n<li> Pilvefunktsioon kopeerib konfi ja graafikud develop-hoidla \u00e4mbrist Git'i hoidla developisse;<\/li>\n<li>GitOps operaator uuendab klastrit.<\/li>\n<\/ul>\n<p>\n4. <i>Uue kliendi lisamine<\/i>:<\/p>\n<ul>\n<li> Juhendaja v\u00f5i administraator (LCM\/ops) kutsub Gradle'i v\u00e4lja esialgseks juurutamiseks ja v\u00f5rgu koormuse tasakaalustajate (NLB) seadistamiseks;<\/li>\n<li> LCM\/ops committib uue konfigureeringu deployment&#8217;ile v\u00e4rskenduste ettevalmistamiseks;<\/li>\n<li> GitOps operaator uuendab klastrit.<\/li>\n<\/ul>\n<p><\/p>\n<h3>GitOps'i l\u00fchike \u00fclevaade<\/h3>\n<p><\/p>\n<ol>\n<li> Kirjeldage soovitud s\u00fcsteemi seisu, kasutades deklareerivaid spetsifikatsioone iga keskkonna jaoks (meie loos m\u00e4\u00e4rab Bobi meeskond kogu s\u00fcsteemi konfiguratsiooni Git'is).\n<ul>\n<li> Git-repositoorium on ainus t\u00f5e allikas kogu s\u00fcsteemi soovitud seisu kohta.<\/li>\n<li> K\u00f5ik muudatused soovitud seisu saavutatakse Git'i commit'ide kaudu.<\/li>\n<li> K\u00f5ik soovitud klastriparameetrid on samuti j\u00e4lgitavad klastris. Seega saame m\u00e4\u00e4rata, kas need on \u00fchtsed (konvergents), <i>converge<\/i>) v\u00f5i erinevad (divergens) <i>diverge<\/i>) soovitud ja j\u00e4lgitava olukorra vahel.<\/li>\n<\/ul>\n<\/li>\n<li> Kui soovitud ja j\u00e4lgitav seis on erinevad, siis:\n<ul>\n<li> Eksisteerib konvergentsimehhanism, mis l\u00f5puks automaatselt s\u00fcnkroniseerib siht- ja j\u00e4lgitavad olekud. Klastris tegeleb sellega Kubernetes.<\/li>\n<li> Protsess algatatakse kohe koos teatega \"muutus kinnitatud\".<\/li>\n<li> M\u00f5ne konfigureeritava ajavahemiku p\u00e4rast v\u00f5ib saata teate \"diff\", kui olekud on erinevad.<\/li>\n<\/ul>\n<\/li>\n<li> Seega kutsuvad k\u00f5ik commit'id Git'is esile kontrollitavad ja idempotentsed uuendused klastris.\n<ul>\n<li>Tagasiminek on konvergents varasemasse soovitud seisu.<\/li>\n<\/ul>\n<\/li>\n<li> Konvergents on l\u00f5plik. Selle toimumise t\u00f5enditeks on:\n<ul>\n<li> Teatavate ajavahemike jooksul \"diff\" teadete puudumine.<\/li>\n<li> Teade \"konvergeeritud\" (n\u00e4iteks webhook, Git'i kirjutamise \u00fcritus).<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><\/p>\n<h3>Mis on divergents?<\/h3>\n<p>\nKorrake veel kord: <i>k\u00f5ik soovitud klastriparameetrid peaksid olema j\u00e4lgitavad klastris<\/i>.<\/p>\n<p>M\u00f5ned divergentsi n\u00e4ited:<\/p>\n<ul>\n<li> Konfigureerimisfaili muutmine, mis tuleneb Git'i harude \u00fchendamisest.<\/li>\n<li> Konfigureerimisfaili muutmine, mis tuleneb Git'i commit'ist, tehtud GUI-klientide kaudu.<\/li>\n<li> Mitmed muudatused soovitud seisus Git'i PR kaudu koos konteineripildi koostamise ja konfi muutustega.<\/li>\n<li> Klastri oleku muutmine vea, ressursside konflikti t\u00f5ttu, mis p\u00f5hjustab \"halba k\u00e4itumist\", v\u00f5i lihtsalt juhuslik k\u00f5rvalekalle algsest seisust.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Mis on konvergentsimehhanism?<\/h3>\n<p>\nM\u00f5ned n\u00e4ited:<\/p>\n<ul>\n<li> Konteinerite ja klastrite jaoks pakub konvergentsimehhanismi Kubernetes.<\/li>\n<li> Sama mehhanismi saab kasutada rakenduste ja Kubernetes'e alusel ehitatud struktuuride haldamiseks (n\u00e4iteks Istio ja Kubeflow).<\/li>\n<li> Mehhanism t\u00f6\u00f6liste haldamiseks Kubernetes'i, pildi hoidlate ja Git'i vahel pakub <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/weaveworks\/flux\">GitOps-operator Weave Flux<\/a><\/noindex>, mis on osa <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.weave.works\/\">Weave Cloud<\/a><\/noindex>.<\/li>\n<li> Tavamasinate puhul peab konvergentsimehhanism olema deklareeritav ja autonoomne. Oma kogemustest v\u00f5ime \u00f6elda, et <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.gruntwork.io\/why-we-use-terraform-and-not-chef-puppet-ansible-saltstack-or-cloudformation-7989dad2865c\">Terraform<\/a><\/noindex> on sellele m\u00e4\u00e4ratlusele k\u00f5ige l\u00e4hemal, kuid siiski vajab inimkontrolli. Sel m\u00f5eldes laiendab GitOps traditsioone Infrastructure as Code.<\/li>\n<\/ul>\n<p>\nGitOps \u00fchendab Giti suurep\u00e4rase Kubernetes'i konvergentsimehhanismiga, pakkudes mudelit t\u00f6\u00f6sse rakendamiseks.<\/p>\n<p>GitOps lubab meil v\u00e4ita: <i>automatisatsioon ja kontroll on v\u00f5imalik vaid nende s\u00fcsteemide osas, mida saab kirjeldada ja j\u00e4lgida<\/i>.<\/p>\n<h3>GitOps on m\u00f5eldud kogu cloud native-virnale (nt Terraform jne)<\/h3>\n<p>\nGitOps ei t\u00e4henda ainult Kubernetes'i. Soovime, et kogu s\u00fcsteem oleks deklareeritavalt hallatav ja kasutaks konvergentsi. Kogu s\u00fcsteem h\u00f5lmab erinevaid keskkondi, mis t\u00f6\u00f6tavad Kubernetes'ega \u2014 n\u00e4iteks \"dev cluster 1\", \"production\" jms. Iga keskkond sisaldab masinaid, klustreid, rakendusi ja ka liideseid v\u00e4liste teenustega, mis tagavad andmed, j\u00e4lgimise jne.<\/p>\n<p>T\u00e4helepanu, kui oluline Terraform on bootstrapping'i probleemide jaoks. Kubernetes peab olema kuskil juurutatud ja Terraformi kasutamine t\u00e4hendab, et saame rakendada samu GitOps'i t\u00f6\u00f6vooge Kubernetes'i ja rakenduste juhtimise kihina. See on kasulik parim tava.<\/p>\n<p>Suur r\u00f5hk on asetatud GitOps'i kontseptsioonide rakendamisele Kubernetes'ele j\u00e4rgnevatel kihtidel. Praegu on olemas GitOps-t\u00fc\u00fcpi lahendusi Istio, Helm, Ksonnet, OpenFaaS ja Kubeflow, samuti n\u00e4iteks Pulumi jaoks, mis loovad arendusse kihti cloud native'i jaoks.<\/p>\n<h2>Kubernetes CI\/CD: GitOps'i v\u00f5rdlemine teiste l\u00e4henemistega<\/h2>\n<p>\nNagu mainitud, on GitOps kaks asja:<\/p>\n<ol>\n<li> T\u00f6\u00f6mudel Kubernetes'i ja cloud native'i jaoks, nagu eelpool kirjeldatud.<\/li>\n<li> Teekond arendajate keskse keskkonna loomiseks rakenduste haldamiseks.<\/li>\n<\/ol>\n<p>\nPaljude jaoks on GitOps peamiselt Git push'ide p\u00f5hine t\u00f6\u00f6voog. Meile meeldib see ka. Kuid see ei ole k\u00f5ik: vaatame n\u00fc\u00fcd CI\/CD torustikke.<\/p>\n<h3>GitOps tagab pideva juurutamise (CD) Kubernetes'ile<\/h3>\n<p>\nGitOps pakub pideva juurutamise mehhanismi, mis k\u00f5rvaldab vajaduse eraldi 'juurutamiss\u00fcsteemide' j\u00e4rele. Kogu t\u00f6\u00f6 teeb teie eest Kubernetes.<\/p>\n<ul>\n<li> Rakenduse uuendamine n\u00f5uab uuendamist Git'is. See on tehinguline uuendus soovitud seisundisse. \u00abJuurutamine\u00bb toimub seej\u00e4rel Kubernetes'i sees uuendatud kirjelduse p\u00f5hjal.<\/li>\n<li> Kubernetes\u2019e t\u00f6\u00f6 erip\u00e4ra t\u00f5ttu on need v\u00e4rskendused konvergeerivad. See tagab mehhanismi pidevaks kasutuselev\u00f5tuks, kus k\u00f5ik v\u00e4rskendused on aatomilised.<\/li>\n<li> M\u00e4rkus: <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.weave.works\/\">Weave Cloud<\/a><\/noindex> pakub GitOps operaatorit, mis integreerib Git\u2019i ja Kubernetes\u2019e, v\u00f5imaldades teostada CD-d soovitud ja praeguse klastriseisundi vastavusse viimise kaudu.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Ilma kubectl\u2019i ja skripte.<\/h3>\n<p>\nTuleb v\u00e4ltida Kubectl\u2019i kasutamist klastrite v\u00e4rskendamiseks, eriti skripte kubectl\u2019i k\u00e4skude r\u00fchmitamiseks. Selle asemel saab kasutaja GitOps torustiku abil v\u00e4rskendada oma Kubernetes\u2019e klastrit l\u00e4bi Giti.<\/p>\n<p>Eelised on j\u00e4rgmised:<\/p>\n<ol>\n<li> <b>\u00d5igsus.<\/b>. Uuendusgruppi saab rakendada, konvergeerida ja l\u00f5puks valideerida, mis viib meid l\u00e4hemale aatomilise kasutuselev\u00f5tu eesm\u00e4rgile. Vastupidiselt sellele ei anna skriptide kasutamine mingeid konvergentsi garantiisid (p\u00f5hjalikumalt allpool).<\/li>\n<li> <b>Turvalisus<\/b>. <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/kelseyhightower\/status\/939003832805179392?lang=en\">Tsiteerides<\/a><\/noindex> Kelsey Hightower: \"Piirake juurdep\u00e4\u00e4su Kubernetes\u2019e klastrile automatiseerimise t\u00f6\u00f6riistadele ja administraatoritele, kelle kohustuseks on selle t\u00f5rkeotsing v\u00f5i t\u00f6\u00f6kindluse tagamine.\" Vaata ka <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-compliance-and-secure-cicd\">minu postitust<\/a><\/noindex> turvalisusest ja tehniliste n\u00f5uete j\u00e4rgimisest, samuti <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@vesirin\/how-i-gained-commit-access-to-homebrew-in-30-minutes-2ae314df03ab\">artiklit Homebrew\u2019i h\u00e4kkimisest<\/a><\/noindex> kontode andmete varguse kaudu halvasti koostatud Jenkins\u2019i skripti kaudu.<\/li>\n<li> <b>Kasutajakogemus<\/b>. Kubectl paljastab Kubernetes\u2019e objekti mudeli mehhanika, mis on \u00fcsna keeruline. Ideaalis peaksid kasutajad s\u00fcsteemiga suhtlema k\u00f5rgemal abstraktsiooni tasemel. Siinkohal viitan taas Kelsey\u2019le ja soovitan vaadata <noindex><a rel=\"nofollow\" href=\"http:\/\/superuser.openstack.org\/articles\/kubernetes-boring\/\">sellist kokkuv\u00f5tet<\/a><\/noindex>.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Erinevus CI ja CD vahel.<\/h3>\n<p>\nGitOps t\u00e4iustab olemasolevaid CI\/CD mudeleid.<\/p>\n<p>Kaasaegne CI-server on orkestreerimise t\u00f6\u00f6riist. T\u00e4psemalt on see CI torustike orkestreerimise t\u00f6\u00f6riist. Need h\u00f5lmavad ehitamist, testimist, trunk'i \u00fchendamist jne. CI-serverid automatiseerivad keeruliste mitmeastmeliste torustike haldamist. Levinud kiusatus on luua skript Kubernetes'i v\u00e4rskenduste kogumiseks ja t\u00e4ita see push'ide muutuste klastrisse viimiseks. T\u00f5epoolest, paljud spetsialistid teevad just nii. Kuid see ei ole optimaalselt t\u00f5hus ja siin on p\u00f5hjus.<\/p>\n<p>CI-d tuleb kasutada trunk'i v\u00e4rskendamiseks, ja Kubernetes'i klaster peaks muutma iseennast nende v\u00e4rskenduste p\u00f5hjal, et hallata CD 'sisemiselt'. Me nimetame seda <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-compliance-and-secure-cicd\">pull-mudeliks CD jaoks<\/a><\/noindex>, erinevalt CI push-mudelist. CD on osa <i>runtime-orchestratsioonist<\/i>.<\/p>\n<h3>Miks CI-serverid ei peaks CD-d tegema otse v\u00e4rskendusi Kubernetes'i kaudu<\/h3>\n<p>\n<i>\u00c4rge kasutage CI-serverit otse v\u00e4rskenduste orkestreerimiseks Kubernetes'is CI-\u00fclesannete komplekti kujul. See on antipatter, millest me <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/kubernetes-anti-patterns-let-s-do-gitops-not-ciops\">oleme juba r\u00e4\u00e4kinud<\/a><\/noindex> oma blogis.<\/i><\/p>\n<p>L\u00e4hme tagasi Alisse ja Bobi juurde.<\/p>\n<p>Millistele probleemidele nad silmitsi seisavad? Bobi CI-server rakendab muudatused klastrisse, kuid kui protsessi k\u00e4igus see kokku kukub, ei tea Bob, mis seisundis klaster on (v\u00f5i peaks olema) ja kuidas seda taastada. Sama kehtib ka juhul, kui k\u00f5ik sujub.<\/p>\n<p>Oletame, et Bobi meeskond l\u00f5i uue pildi ja seej\u00e4rel parandas oma juurutusi, et juurutada pilti (k\u00f5ik see CI torustikust).<\/p>\n<p>Kui pilt koostatakse korralikult, kuid pipeline kukub kokku, peab meeskond v\u00e4lja selgitama:<\/p>\n<ul>\n<li> Kas v\u00e4rskendus juurutati?<\/li>\n<li> Kas me t\u00f5stame uusi ehitusi? Kas see toob kaasa soovimatuid k\u00f5rvaltoimeid \u2013 n\u00e4iteks, et meil on kaks sama muutumatut pilti? <\/li>\n<li> Kas peaksime ootama j\u00e4rgmise v\u00e4rskenduse saabumist, enne kui k\u00e4ivitame ehituse?<\/li>\n<li> Mis t\u00e4pselt l\u00e4ks valesti? Milliseid samme tuleb korrata (ja milliseid neist on turvaline korrata)?<\/li>\n<\/ul>\n<p>\n<i>Git'i baasil t\u00f6\u00f6tava t\u00f6\u00f6voo korraldamine ei garanteeri, et Bobi meeskond ei puutu selliste probleemidega kokku. Nad v\u00f5ivad ikka veel eksida commit'i push'imisel, sildi v\u00f5i m\u00f5ne muu parameetri osas; siiski on see l\u00e4henemine sellel tasemel palju l\u00e4hemal selgele k\u00f5ike-v\u00f5i-mitte midagi.<\/i><\/p>\n<p>Kokkuv\u00f5tteks, siin on p\u00f5hjused, miks CI-serverid ei tohiks tegeleda CD-ga:<\/p>\n<ul>\n<li> Uuenduste skriptid ei ole alati deterministlikud; neis on lihtne eksida.<\/li>\n<li> CI-serverid ei konvergentsi deklaratiivse klastrimudeli suunas.<\/li>\n<li> Idempotentsuse tagamine on keeruline. Kasutajad peavad s\u00fcvenema s\u00fcsteemi s\u00fcgissemaatikasse.<\/li>\n<li> Osalise eba\u00f5nnestumise korral taastamine on keerulisem.<\/li>\n<\/ul>\n<p>\n<i>M\u00e4rkus Helm'i kohta: kui soovite kasutada Helmi, siis soovitame seda kombineerida GitOps operaatoriga, nagu <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/managing-helm-releases-the-gitops-way\">Flux-Helm<\/a><\/noindex>. See aitab tagada konvergentsi. \u00dcksik Helmi ei ole ei deterministlik ega aatomaarne.<\/i><\/p>\n<h2>GitOps kui parim viis Kubernetes'i jaoks pidevaks kohaletoimetamiseks<\/h2>\n<p>\nAlice'i ja Bobi meeskond rakendab GitOps'i ning avastab, et tarkvaratoodetega on n\u00fc\u00fcd palju lihtsam t\u00f6\u00f6tada ning tagada k\u00f5rge j\u00f5udlus ja stabiilsus. L\u00f5petame selle artikli joonistega, mis n\u00e4itavad, milline v\u00e4lja n\u00e4eb nende uus l\u00e4henemine. Pidage meeles, et r\u00e4\u00e4gime peamiselt rakendustest ja teenustest, kuid GitOps'i saab kasutada ka kogu platvormi haldamiseks.<\/p>\n<h3>Kubernetes'e t\u00f6\u00f6mudel<\/h3>\n<p>\nVaadake j\u00e4rgmist diagrammi. See esindab Giti ja konteineripiltide hoidlat kui \u00fchiseid ressursse kahe orkestreeritud eluts\u00fckli jaoks:<\/p>\n<ul>\n<li> Pideva integreerimise toru, mis loeb ja kirjutab faile Gitis ning suudab v\u00e4rskendada konteineripiltide hoidlat.<\/li>\n<li> Runtime'i GitOps toru, mis \u00fchendab juurutamise, haldamise ja j\u00e4lgimise. See loeb ja kirjutab faile Gitis ning suudab laadida konteineripilte.<\/li>\n<\/ul>\n<h3>Millised on peamised j\u00e4reldused?<\/h3>\n<p><\/p>\n<ol>\n<li> <b>Probleemide jaotamine<\/b>: Pange t\u00e4hele, et m\u00f5lemad torud saavad andmeid vahetada ainult Giti v\u00f5i piltide hoidla v\u00e4rskendamise kaudu. Teisis\u00f5nu, CI ja runtime keskkonna vahel on tulem\u00fc\u00fcr. Me nimetame seda 'muutumatuse tulem\u00fc\u00fcriks' <i>(immutability firewall)<\/i>, kuna k\u00f5ik hoidla v\u00e4rskendused loovad uusi versioone. T\u00e4iendava teabe saamiseks vaadake slaide 72\u201387 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.slideshare.net\/weaveworks\/continuous-lifecycle-london-2018-event-keynote-97418556\">selles esitluses<\/a><\/noindex>.<\/li>\n<li> <b>V\u00f5ib kasutada igasuguseid CI- ja Git-serve<\/b>: GitOps t\u00f6\u00f6tab igasuguste komponentidega. V\u00f5ite j\u00e4tkata oma lemmik CI- ja Git-serverite, piltide hoidlate ja testikomplektide kasutamist. Peaaegu k\u00f5ik teised pideva kohaletoimetamise t\u00f6\u00f6riistad turul n\u00f5uavad oma CI- \/ Git-serverit v\u00f5i piltide hoidlat. See v\u00f5ib osutuda takistuseks cloud native arendamiseks. GitOps'i puhul saate kasutada tuttavaid t\u00f6\u00f6riistu.<\/li>\n<li> <b>S\u00fcndmused kui integreerimise t\u00f6\u00f6riist<\/b>: Kui andmed Gitis uuendatakse, teavitab Weave Flux (v\u00f5i Weave Cloud'i operaator) sellega seotud runtime'i. Iga kord, kui Kubernetes aktsepteerib muudatusi, uuendatakse Giti. See tagab lihtsa integreerimismudeli GitOps'i t\u00f6\u00f6voogude korraldamiseks, nagu on n\u00e4idatud allpool.<\/li>\n<\/ol>\n<h2>Kokkuv\u00f5te<\/h2>\n<p>\nGitOps pakub olulisi uuenduse garantiisid, mis on vajalikud igale kaasaegsele CI\/CD t\u00f6\u00f6riistale:<\/p>\n<ul>\n<li> automaatika;<\/li>\n<li> konvergents;<\/li>\n<li> idempotentsus;<\/li>\n<li> determinism.<\/li>\n<\/ul>\n<p>\nSee on oluline, kuna see pakub pilvep\u00f5histe arendajate jaoks t\u00f6\u00f6korralduse mudelit.<\/p>\n<ul>\n<li> Traditsioonilised s\u00fcsteemide haldamise ja j\u00e4lgimise t\u00f6\u00f6riistad on seotud v\u00e4ljat\u00f5mbe meeskondadega, kes tegutsevad runbook'i raames <i>(rutiinsete protseduuride ja operatsioonide kogum \u2014 t\u00f5lk.)<\/i>, mis on seotud konkreetse juurutusega.<\/li>\n<li> Pilvep\u00f5histe s\u00fcsteemide haldamisel on j\u00e4lgimise t\u00f6\u00f6riistade kasutamine parim viis v\u00e4ljaande tulemuste hindamiseks, et arendajate meeskond saaks kiiresti reageerida.<\/li>\n<\/ul>\n<p>\nKujutage ette paljusid klustreid, mis on hajutatud erinevatesse pilvedesse, ja palju teenuseid, millel on oma meeskonnad ja v\u00e4ljastusplaanid. GitOps pakub ulatuslikku invarianti mudelit kogu selle k\u00fclluse haldamiseks.<\/p>\n<h2>P.S. t\u00f5lkijalt<\/h2>\n<p>\nLugege ka meie blogist:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/456754\/\">GitOps: Pull ja Push meetodite v\u00f5rdlus<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/434160\/\">Tutvustame kubedogi raamatukogu Kubernetes ressursside j\u00e4lgimiseks<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">T\u00e4iendame ja t\u00e4iustame Kubernetes\u2019t (\u00fclevaade ja videodoklad)<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p class=\"for_users_only_msg\">Ainult registreeritud kasutajad saavad k\u00fcsitluses osaleda. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Logige sisse<\/a><\/noindex>, palun.<\/p>\n<h2 class=\"default-block__polling-title\">Kas teadsite GitOpsist enne, kui need kaks t\u00f5lget Habrisse ilmusid?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Jah, ma teadsin seda.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ainult pinnapealselt.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ei<\/p>\n<\/li>\n<\/ul>\n<p>    35 kasutajat h\u00e4\u00e4letas, 10 kasutajat j\u00e4i erapooletuks.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/458878\/\">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.: \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043e \u043c\u0435\u0442\u043e\u0434\u0430\u0445 pull \u0438 push \u0432 GitOps \u043c\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043a \u044d\u0442\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u0446\u0435\u043b\u043e\u043c, \u043e\u0434\u043d\u0430\u043a\u043e \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0445 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u043c\u0430\u043b\u043e (\u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0438\u0445 \u043f\u043e\u043f\u0440\u043e\u0441\u0442\u0443 \u043d\u0435\u0442). \u041f\u043e\u0441\u0435\u043c\u0443 \u0440\u0430\u0434\u044b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u043f\u0443\u0441\u0442\u044c \u0438 \u0443\u0436\u0435 \u043f\u043e\u0447\u0442\u0438 \u0433\u043e\u0434\u0438\u0447\u043d\u043e\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438! \u2014 \u043e\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Weaveworks, \u0433\u043b\u0430\u0432\u0430 [&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-35941","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\/et\/blog\/administrirovanie\/chto-zhe-takoe-gitops\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\u0427\u0442\u043e \u0436\u0435 \u0442\u0430\u043a\u043e\u0435 GitOps? | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u043c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/chto-zhe-takoe-gitops\" \/>\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:07:41+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:07:41+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\udd47Mis on GitOps? | ProHoster","description":"M\u00e4rkus.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/chto-zhe-takoe-gitops","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\u0427\u0442\u043e \u0436\u0435 \u0442\u0430\u043a\u043e\u0435 GitOps? | ProHoster","og:description":"\u041f\u0440\u0438\u043c.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/chto-zhe-takoe-gitops","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:07:41+00:00","article:modified_time":"2019-10-31T19:07:41+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35941","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 01:21:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:53:31","updated":"2026-01-22 01:21:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/35941","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=35941"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/35941\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=35941"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=35941"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=35941"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}