{"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\u00e4rk. t\u00f5lge.<\/b>: P\u00e4rast hiljutist avaldust <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/456754\/\">materjali<\/a><\/noindex> GitOpsi pull ja push meetodite kohta oleme n\u00e4inud huvi selle mudeli vastu, kuid venekeelseid publitseeringuid sellel teemal on v\u00e4ga v\u00e4he (Habrast ei leia neid \u00fcldse). Seet\u00f5ttu oleme r\u00f5\u00f5msad, et saame teile pakkuda teise artikli t\u00f5lget \u2014 ehkki see on juba peaaegu aasta vana! \u2014 ettev\u00f5ttelt Weaveworks, kelle juht leiutas termini \u201eGitOps\u201d. Artiklis selgitatakse l\u00e4henemise olemust ja peamisi erinevusi juba olemasolevatest lahendustest.<\/i><\/p>\n<p>\nAasta tagasi avaldasime <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-operations-by-pull-request\">sissejuhatuse GitOpsi<\/a><\/noindex>. Siis r\u00e4\u00e4kisime, kuidas Weaveworksi meeskond k\u00e4ivitas SaaS-i, mis p\u00f5hineb t\u00e4ielikult Kubernetesel, ning t\u00f6\u00f6tas v\u00e4lja parimate praktikate komplekti, et juurutada, hallata ja j\u00e4lgida pilvep\u00f5hises keskkonnas.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Artikkel osutus populaarseks. Teised inimesed hakkasid r\u00e4\u00e4kima GitOpsist, ja 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\">saladused<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.alexellis.io\/introducing-openfaas-cloud\/\">funktsiooni<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/jenkins.io\/blog\/2018\/03\/19\/introducing-jenkins-x\/\">katkematule integreerimisele<\/a><\/noindex> jne. Meie veebisaidile ilmus <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/category\/gitops\/\">suure hulga<\/a><\/noindex> publikatsioone ja kasutusjuhtumeid GitOpsi kohta. Kuid m\u00f5nede inimeste jaoks on siiski j\u00e4\u00e4nud k\u00fcsimusi. Kuidas mudel erineb traditsioonilisest <noindex><a rel=\"nofollow\" href=\"https:\/\/puppet.com\/blog\/a-deployment-pipeline-for-infrastructure-a-devops-case-study-at-nbn\">infrastructure as code<\/a><\/noindex> ja pidevast tarnimisest (<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 h\u00e4davajalik?<\/p>\n<p>Varsti m\u00f5istsime, et on vajalik uus kirjeldus, mis pakub:<\/p>\n<ol>\n<li> Suurt hulka n\u00e4iteid ja lugusid;<\/li>\n<li> Konkreetsed m\u00e4\u00e4ratlus GitOps'i kohta;<\/li>\n<li> V\u00f5rdlus traditsioonilise pideva tarnimisega.<\/li>\n<\/ol>\n<p>\nSelles artiklis p\u00fc\u00fcdsime kattuda nende k\u00f5igi teemadega. Leiate uuendatud \u00fclevaate GitOps'ist ja arendajate ning CI\/CD vaatenurga. Me keskendume peamiselt Kubernetes'ele, kuigi mudelit on v\u00f5imalik \u00fcldistada.<\/p>\n<h2>Tutvuge: GitOps<\/h2>\n<p>\nKujutage ette Alice'i. Ta juhib Family Insurance'i, mis pakub tervise-, auto-, kinnisvara- ja reisikindlustuspolisse inimestele, kes on liiga h\u00f5ivatud, et ise lepingute n\u00fcanssidega tegeleda. Tema \u00e4ri algas k\u00f5rvalprojektina, kui Alice t\u00f6\u00f6tas pangas andmete teadlasena. \u00dchel p\u00e4eval taipas ta, et saab kasutada tipptasemel arvutialgoritme andmete t\u00f5husamaks anal\u00fc\u00fcsimiseks ja kindlustuspakkumiste koostamiseks. Investorid finantseerisid projekti, ja n\u00fc\u00fcd teenib tema ettev\u00f5te \u00fcle 20 miljoni dollari aastas ning kasvab kiiresti. Hetkel t\u00f6\u00f6tab seal erinevatel ametikohtadel 180 inimest. Nende seas on tehniline meeskond, mis tegeleb veebisaidi, andmebaasi arendamise ja kliendibaasi anal\u00fc\u00fcsiga. 60 inimese meeskonda juhib Bob, ettev\u00f5tte tehnoloogia direktor.<\/p>\n<p>Bob'i meeskond k\u00e4itab produzirimiss\u00fcsteeme pilves. Nende peamised rakendused t\u00f6\u00f6tavad GKE-l, kasutades Kubernetes'i eeliseid Google Cloudis. Lisaks kasutavad nad erinevaid t\u00f6\u00f6riistu andmete t\u00f6\u00f6tlemiseks ja anal\u00fc\u00fcsiks.<\/p>\n<p>Family Insurance ei kavatsenud konteinerite kasutamist, kuid nakkus Dockerist saadud entusiasmiga. Peagi avastasid ettev\u00f5tte spetsialistid, et GKE v\u00f5imaldab uusi funktsioone testimiseks klastreid h\u00f5lpsasti ja mugavalt juurutada. Lisati Jenkins CI jaoks ja Quay konteineriregistri haldamiseks, kirjutati Jenkinsile skriptid, mis edastasid uusi konteinerite ja konfiguratsioonide GKE.<\/p>\n<p>M\u00f6\u00f6dus natuke aega. Alice ja Bob olid pettunud valitud l\u00e4henemise tulemuslikkuses ja selle m\u00f5jude osas \u00e4ritegevusele. Konteinerite rakendamine ei parandanud tulemuslikkust nii, nagu meeskond lootas. M\u00f5nikord purunesid deployment'id ja ei olnud selge, kas probleemid olid seotud koodimuudatustega. Samuti oli keeruline j\u00e4lgida konfiguratsioonide muudatusi. Tihti tuli luua uus klaster ja viia rakendused sellesse, kuna see oli k\u00f5ige lihtsam viis lahendada segadust, milleks s\u00fcsteem oli muutunud. Alice kartis, et olukord halveneb rakenduse arendamise k\u00e4igus (lisaks oli arengus uus masin\u00f5ppel p\u00f5hinev projekt). Bob automatiseeris suure osa t\u00f6\u00f6st ja ei saanud aru, miks pipeline on siiski ebastabiilne, halvasti skaleeruv ja aeg-ajalt n\u00f5uab k\u00e4sitsi sekkumist.<\/p>\n<p><b>Siis said nad teada GitOps'ist. See lahendus osutus just selleks, mida nad vajusid kindlalt edasi liikumiseks.<\/b><\/p>\n<p>Aliisa ja Bob on juba aastaid kuulnud Git, DevOps ja infrastructure as code t\u00f6\u00f6protsessidest. GitOps'i erip\u00e4ra on see, et see toob kaasa rida parimaid praktikaid \u2014 kategoorilisi ja regulatiivseid \u2014 nende ideede elluviimiseks Kubernetes'i kontekstis. See teema <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/search?q=gitops&amp;src=typd\">on korduvalt t\u00f5statunud<\/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 rakendada GitOps'i. N\u00fc\u00fcd on ettev\u00f5ttel automatiseeritud t\u00f6\u00f6mudel, mis on kokku sobiv Kubernetes'iga ja \u00fchendab <i>kiiruse<\/i> ja <i>stabiilsuse<\/i>, kuna nad:<\/p>\n<ul>\n<li> avastasid, et meeskonna tootlikkus on kahekordistunud ning keegi ei l\u00e4he seet\u00f5ttu hulluks;<\/li>\n<li> on l\u00f5petanud skriptide hooldamise. Selle asemel saavad nad n\u00fc\u00fcd keskenduda uutele funktsioonidele ja t\u00e4iustada insenerimeetodeid \u2014 n\u00e4iteks rakendada kanarullide v\u00e4ljaandeid ja parandada testimist;<\/li>\n<li> on t\u00e4iustanud juurutamisprotsessi \u2014 see katkeb n\u00fc\u00fcd harva;<\/li>\n<li> said v\u00f5imaluse taastada deployment'id osaliste rikete j\u00e4rel ilma k\u00e4sitsi sekkumiseta;<\/li>\n<li> on saavutanud suurema kindluse tarnes\u00fcsteemides. Aliisa ja Bob avastasid, et meeskonna saab jagada r\u00fchmadesse, mis tegelevad mikroteenustega ja t\u00f6\u00f6tavad paralleelselt;<i>o<\/i>suuremat kindlustunnet tarnes\u00fcsteemides. Alice ja Bob avastasid, et meeskonna saab jagada gruppideks, kes tegelevad mikroteenustega ja t\u00f6\u00f6tavad paralleelselt;<\/li>\n<li> iga p\u00e4ev iga meeskonna j\u00f5ududega saavad teha 30-50 muudatust projektis ja katsetada uusi tehnikaid;<\/li>\n<li> kergesti meelitab projekti uusi arendajaid, kes saavad kiiresti toota uuendusi tootmiskeskkonnas pull-requests'ide abil juba m\u00f5ne tunni jooksul;<\/li>\n<li> l\u00e4bivad SOC2 raames auditi lihtsasti <i>(teenusepakkujate vastavuse tagamine andmete turvalise haldamise n\u00f5uetele; lisainfot leiate n\u00e4iteks <noindex><a rel=\"nofollow\" href=\"https:\/\/www.imperva.com\/learn\/data-security\/soc-2-compliance\/\">siit<\/a><\/noindex> \u2014 kt. t\u00f5lge)<\/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 pilvetehnoloogia t\u00f6\u00f6mudel. See pakub parimate praktikate kogumit konteinerisse pakitud klastrite ja rakenduste juurutamiseks, haldamiseks ja j\u00e4lgimiseks. Elegantne m\u00e4\u00e4ratlemine \u00fchel slaidil. <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/vitorsilva\/status\/999978906903080961\">\u00fcks slaid<\/a><\/noindex> alates <noindex><a rel=\"nofollow\" href=\"https:\/\/2018.agilept.org\/speaker_luis_faceira.html\">Luis Faceira<\/a><\/noindex>:\n<\/li>\n<li> Tee arendajakeskse keskkonna loomiseni rakenduste haldamiseks. Kasutame Git'i t\u00f6\u00f6voogu nii tootmises kui ka arenduses. Pange t\u00e4hele, et see ei puuduta ainult Git push'i, vaid kogu CI\/CD ja UI\/UX t\u00f6\u00f6riistade komplekti organiseerimist.<\/li>\n<\/ol>\n<p><\/p>\n<h3>M\u00f5ned s\u00f5nad Git-ist<\/h3>\n<p>\nKui te ei tunne versioonihalduss\u00fcsteemide ja Git-p\u00f5hise t\u00f6\u00f6vooga, soovitame tungivalt nende uurimist. Alguses v\u00f5ib harjutamine harude ja pull-requests'ide kasutamisega tunduda musta maagiana, kuid eelised v\u00e4\u00e4rivad vaeva. Siin on <noindex><a rel=\"nofollow\" href=\"https:\/\/codeburst.io\/trunk-based-development-vs-git-flow-a0212a6cae64\">hea artikkel<\/a><\/noindex> alustamiseks.<\/p>\n<h2>Kuidas Kubernetes t\u00f6\u00f6tab<\/h2>\n<p>\nMeie loos p\u00f6\u00f6rdusid Alice ja Bob GitOps'i poole, p\u00e4rast pikka t\u00f6\u00f6tamist Kubernetesega. T\u00f5epoolest, GitOps on tihedalt seotud Kubernetesega \u2014 see on Kubernetesel p\u00f5hinevate infrastruktuuri ja rakenduste haldamise mudel.<\/p>\n<h3>Mida Kubernetes kasutajatele pakub?<\/h3>\n<p>\nSiin on m\u00f5ned p\u00f5hifunktsioonid:<\/p>\n<ol>\n<li> Kubernetes mudelis saab k\u00f5ike kirjeldada deklaratiivsel viisil.<\/li>\n<li> Kubernetes API-server v\u00f5tab sellise deklaratsiooni sisendina ja p\u00fc\u00fcab pidevalt tuua klastrit seisundisse, mis on kirjeldatud deklaratsioonis.<\/li>\n<li> Deklaratsioonid on piisavad, et kirjeldada ja hallata laia valikut t\u00f6\u00f6koormusi \u2014 'rakendusi'.<\/li>\n<li> Tulemusena toimub rakenduste ja klastrite muutmine j\u00e4rgmiste t\u00f5ttu:\n<ul>\n<li> muutused konteineripiltides;<\/li>\n<li> muutused deklaratiivses spetsifikatsioonis;<\/li>\n<li> vead keskkonnas \u2014 n\u00e4iteks konteinerite kokku kukkumised.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><\/p>\n<h3>Kubernetes'e iseloomulikud suurep\u00e4rased konvergentsi v\u00f5imed<\/h3>\n<p>\nKui haldur muudab seadistusi, rakendab Kubernetes'i orkestreerija neid klastrisse, kuni selle seisund <i>l\u00e4heneb uuele seadistusele<\/i>. See mudel t\u00f6\u00f6tab igasuguste Kubernetes'i ressursside jaoks ja seda saab laiendada Custom Resource Definitions (CRD) abil. Seet\u00f5ttu omavad Kubernetes'i juurutamised j\u00e4rgmisi suurep\u00e4raseid omadusi:<\/p>\n<ul>\n<li> <b>Automatiseerimine<\/b>: Kubernetes'i uuendused pakuvad mehhanismi muutuste rakendamise protsessi automatiseerimiseks korrektselt ja \u00f5igeaegselt.<\/li>\n<li> <b>Konvergents<\/b>: Kubernetes j\u00e4tkab uuenduste katsetamist, kuni need \u00f5nnestuvad.<\/li>\n<li> <b>Idempotentsus<\/b>: korduvad konvergeerimised viivad sama tulemuse juurde.<\/li>\n<li> <b>Determinism<\/b>: piisavate ressursside korral s\u00f5ltub v\u00e4rskendatud klastriseisund ainult soovitud olekust.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Kuidas GitOps t\u00f6\u00f6tab<\/h2>\n<p>\nOleme piisavalt palju teada saanud Kubernetes'ist, et selgitada GitOps'i t\u00f6\u00f6p\u00f5him\u00f5tteid.<\/p>\n<p>Naasime tagasi pereliikmete kindlustusmeeskondade juurde, mis tegelevad mikroteenustega. Mida nad tavaliselt teevad? Vaadake allolevat loetelu (kui m\u00f5ni punkt tundub kummaline v\u00f5i tundmatu, palun \u00e4rge kiirustage kriitikaga ning j\u00e4\u00e4ge meiega). Need on vaid n\u00e4ited t\u00f6\u00f6protsessidest, mis p\u00f5hinevad Jenkinsil. Samuti on olemas palju muid protsesse, mis kasutavad erinevaid t\u00f6\u00f6riistu.<\/p>\n<p>Peamine on see, et iga v\u00e4rskendus l\u00f5peb konfiguratsiooni failide ja Git repode muutmisega. Need muudatused Gitis toovad kaasa selle, et 'GitOps operaator' v\u00e4rskendab klastrit:<\/p>\n<p>1. T\u00f6\u00f6protsess: '<i>Jenkinsi ehitus \u2014 master haru<\/i>\u00bb.<br \/>\n\u00dclesannete loetelu:<\/p>\n<ul>\n<li> Jenkins saadab t\u00f5ukega silditud kujutisi Quay'sse;<\/li>\n<li> Jenkins saadab t\u00f5ukega konfigureerimise ja Helm-i diagrammid master-hoidla baketisse;<\/li>\n<li> Pilveteenus kopeerib konfiguratsiooni ja graafikud master-hoidla \u00e4mbrist Git reposse master;<\/li>\n<li> GitOps operaator v\u00e4rskendab klastrit.<\/li>\n<\/ul>\n<p>\n2. <i>Jenkinsi ehitus \u2014 release v\u00f5i hotfix haru<\/i>:<\/p>\n<ul>\n<li> Jenkins saadab t\u00f5ukega sildimata kujutisi Quay'sse;<\/li>\n<li> Jenkins saadab t\u00f5ukega konfigureerimise ja Helm-i diagrammid staging-hoidla baketisse;<\/li>\n<li> Pilveteenus kopeerib konfiguratsiooni ja graafikud staging-hoidla \u00e4mbrist Git reposse staging;<\/li>\n<li> GitOps operaator v\u00e4rskendab klastrit.<\/li>\n<\/ul>\n<p>\n3. <i>Jenkinsi ehitus \u2014 develop v\u00f5i feature haru<\/i>:<\/p>\n<ul>\n<li> Jenkins saadab t\u00f5ukega sildimata kujutisi Quay'sse;<\/li>\n<li> Jenkins saadab t\u00f5ukega konfigureerimise ja Helm-i diagrammid develop-hoidla baketisse;<\/li>\n<li> Pilvefunktsioon kopeerib konfiguratsiooni ja graafikud develop-hoidla anumast Git-repositsiooni develop;<\/li>\n<li>GitOps operaator v\u00e4rskendab klastrit.<\/li>\n<\/ul>\n<p>\n4. <i>Uue kliendi lisamine<\/i>:<\/p>\n<ul>\n<li> Juhataja v\u00f5i administraator (LCM\/ops) kutsub esile Gradle'i esialgseks paigaldamiseks ja v\u00f5rgu ko-load tasakaalustajate (NLB) seadistamiseks;<\/li>\n<li> LCM\/ops kommitab uue konfigureerimise juurutamise ettevalmistamiseks uuenduste jaoks;<\/li>\n<li> GitOps operaator v\u00e4rskendab klastrit.<\/li>\n<\/ul>\n<p><\/p>\n<h3>L\u00fchike \u00fclevaade GitOps'ist<\/h3>\n<p><\/p>\n<ol>\n<li> Kirjeldage kogu s\u00fcsteemi soovitud seisundit, kasutades deklaratiivseid spetsifikatsioone iga keskkonna jaoks (meie loos m\u00e4\u00e4rab Bobi meeskond kogu s\u00fcsteemi konfiguratsiooni Git'is).\n<ul>\n<li> Git-repositsioon on ainus t\u00f5e allikas kogu s\u00fcsteemi soovitud seisundi osas.<\/li>\n<li> K\u00f5ik muudatused soovitud seisundisse viiakse ellu Git'isse komiteerimise teel.<\/li>\n<li> K\u00f5ik soovitud klastriparametrid on samuti n\u00e4htavad klastris endas. Seega saame m\u00e4\u00e4rata, kas soovitud ja n\u00e4htud seisundid on koosk\u00f5las (konvergivad, <i>converge<\/i>) v\u00f5i erinevad (diverge, <i>diverge<\/i>) soovitud ja n\u00e4htud seisunditest.<\/li>\n<\/ul>\n<\/li>\n<li> Kui soovitud ja n\u00e4htud seisundid erinevad, siis:\n<ul>\n<li> On olemas konvergentsimehhanism, mis s\u00fcnkroniseerib sihitud ja t\u00e4heldatud olekud varem v\u00f5i hiljem automaatselt. Klastri sees tegeleb sellega Kubernetes.<\/li>\n<li> Protsess algab koheselt teatega \"change committed\".<\/li>\n<li> M\u00f5ne konfigureeritava ajavahemiku jooksul v\u00f5ib saadetud olla teade \"diff\", kui olekud erinevad.<\/li>\n<\/ul>\n<\/li>\n<li> Seega p\u00f5hjustavad k\u00f5ik Git'i commitid kontrollitavaid ja idempotentseid uuendusi klastris.\n<ul>\n<li>Tagasiulatuv on konvergents varasema, soovitud oleku juurde.<\/li>\n<\/ul>\n<\/li>\n<li> Konvergents on l\u00f5plik. Selle toimumise n\u00e4itajad on:\n<ul>\n<li> Teadete \"diff\" puudumine teatud ajavahemiku jooksul.<\/li>\n<li> Teade \"converged\" (n\u00e4iteks webhook, Git writeback'i s\u00fcndmus).<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><\/p>\n<h3>Mis on divergeerumine?<\/h3>\n<p>\nKorratakse veel kord: <i>k\u00f5ik soovitud omadused peavad olema klastris n\u00e4htavad<\/i>.<\/p>\n<p>M\u00f5ned n\u00e4ited divergeerumisest:<\/p>\n<ul>\n<li> Konfiguratsioonifaili muutmine Git'i harude \u00fchendamise t\u00f5ttu.<\/li>\n<li> Konfiguratsioonifaili muutmine Git'i commit'i t\u00f5ttu, mis tehti GUI-klientidega.<\/li>\n<li> Mitmed soovitud oleku muutused Git'i PR t\u00f5ttu, mille j\u00e4rgselt ehitati konteineri pilt ja muudeti konfiguratsiooni.<\/li>\n<li> Klastri oleku muutmine vigade, ressursside konfliktide, 'halva k\u00e4itumise' v\u00f5i lihtsalt algse oleku juhusliku k\u00f5rvalekalde t\u00f5ttu.<\/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 konvergentsimehhanism Kubernetes.<\/li>\n<li> Sama mehhanismi saab kasutada rakenduste ja Kubernetesel p\u00f5hinevate konstruktide haldamiseks (nt Istio ja Kubeflow).<\/li>\n<li> Mehhanism Kubernetes'e, piltide hoidlate ja Giti vahelise t\u00f6\u00f6korralduse haldamiseks tagab <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/weaveworks\/flux\">GitOps operaator Weave Flux<\/a><\/noindex>, mis on osa <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.weave.works\/\">Weave Cloud<\/a><\/noindex>.<\/li>\n<li> Baasmachines peab konvergentsimehhanism olema deklaratiivne ja autonoomne. Oma kogemuste p\u00f5hjal 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> see on l\u00e4him sellele m\u00e4\u00e4ratlemisele, siiski n\u00f5uab see siiski inimkontrolli. Selle m\u00f5ttes laiendab GitOps traditsioone Infrastructure as Code.<\/li>\n<\/ul>\n<p>\nGitOps \u00fchendab Git'i suurep\u00e4rase Kubernetes'e konvergentsimehhanismi, pakkudes ekspluateerimise mudelit.<\/p>\n<p>GitOps v\u00f5imaldab meil kinnitada: <i>automaatika ja kontrollitavad on ainult need s\u00fcsteemid, mida saab kirjeldada ja j\u00e4lgida.<\/i>.<\/p>\n<h3>GitOps on m\u00f5eldud kogu cloud native-\u00f6ko\u00fcstele (nt Terraform jne).<\/h3>\n<p>\nGitOps ei t\u00e4henda ainult Kubernetes't. Me tahame, et kogu s\u00fcsteem oleks deklareeritud juhtimise alusel ning kasutaks konvergentsi. Aluses m\u00f5istame kogu s\u00fcsteemi, mis koosneb Kubernetes'ega t\u00f6\u00f6tavatest keskondadest \u2014 n\u00e4iteks \"dev cluster 1\", \"production\" jne. Igas keskkonnas on masinad, klastrid, rakendused ning liidesed, mis \u00fchendavad v\u00e4liseid teenuseid andmete, j\u00e4lgimise jne jaoks.<\/p>\n<p>Pange t\u00e4hele, kui oluline on Terraform bootstrapping'u probleemi puhul. Kubernetes peab olema kuskil juurutatud ja Terraformi kasutamine t\u00e4hendab, et saame rakendada samu GitOps t\u00f6\u00f6vooge Kubernetes'e ja rakenduste halduskihi loomiseks. See on kasulik parim praktika.<\/p>\n<p>Suurt t\u00e4helepanu p\u00f6\u00f6ratakse GitOps kontseptsioonide rakendamisele Kubernetes'e kohal olevates kihtides. Praegu on olemas GitOps-t\u00fc\u00fcpi lahendusi Istio, Helm, Ksonnet, OpenFaaS ja Kubeflow jaoks, samuti n\u00e4iteks Pulumi, mis loovad kihtide arendamiseks cloud native.<\/p>\n<h2>Kubernetes CI\/CD: GitOps'i ja teiste l\u00e4henemisviiside v\u00f5rdlus.<\/h2>\n<p>\nNagu varem mainitud, on GitOps kaks asja:<\/p>\n<ol>\n<li> K\u00e4itamismudel Kubernetes'e ja cloud native jaoks, nagu eespool kirjeldatud.<\/li>\n<li> Arendatud keskkonna loomine rakenduste haldamiseks arendajatele.<\/li>\n<\/ol>\n<p>\nPaljude jaoks on GitOps eelk\u00f5ige Git push'ide p\u00f5hine t\u00f6\u00f6protsess. Meile meeldib see samuti. Kuid see pole k\u00f5ik: vaatame n\u00fc\u00fcd CI\/CD torujuhtmeid.<\/p>\n<h3>GitOps tagab pideva juurutamise (CD) Kubernetes'e all.<\/h3>\n<p>\nGitOps pakub pideva juurutamise mehhanismi, mis elimineerib vajaduse eraldi 'juurutamiss\u00fcsteemide' j\u00e4rele. Kogu t\u00f6\u00f6 teeb teie eest Kubernetes.<\/p>\n<ul>\n<li> Rakenduse v\u00e4rskendamine n\u00f5uab v\u00e4rskendamist Git'is. See on tehinguline v\u00e4rskendus soovitud olekusse. 'Juurutamine' toimub seej\u00e4rel klastris ise Kubernetes'e poolt v\u00e4rskendatud kirjelduse alusel.<\/li>\n<li> Kubernetes'e t\u00f6\u00f6p\u00f5him\u00f5tete t\u00f5ttu on need v\u00e4rskendused konvergentsed. See tagab mehhanismi pidevaks juurutamiseks, kus k\u00f5ik v\u00e4rskendused on aatomaarne.<\/li>\n<li> M\u00e4rkus: <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.weave.works\/\">Weave Cloud<\/a><\/noindex> pakub GitOps'i operaatorit, mis integreerib Git'i ja Kubernetes'e, v\u00f5imaldades CD-d, sobitades klastris soovitud ja praegust olekut.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Ilma kubectl'i ja skriptideta.<\/h3>\n<p>\nV\u00e4ltida tuleks Kubectli kasutamist klastri v\u00e4rskendamiseks, eriti kubectl k\u00e4skude r\u00fchmitamise skripte. Selle asemel saab kasutaja GitOps torustiku kaudu oma Kubernetes klastrit Git'i kaudu uuendada.<\/p>\n<p>Eelised h\u00f5lmavad:<\/p>\n<ol>\n<li> <b>\u00d5igsus<\/b>. Uuenduste gruppi saab rakendada, konvergida ja l\u00f5puks valideerida, mis viib meid l\u00e4hemale aatomse paigaldamise eesm\u00e4rgile. Vastupidiselt ei paku skriptide kasutamine mingeid konvergentsi garantiisid (rohkem sellest allpool).<\/li>\n<li> <b>Ohutus<\/b>. <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/kelseyhightower\/status\/939003832805179392?lang=en\">Tsiteerides<\/a><\/noindex> Kelsey Hightowerit: \u00abPiira juurdep\u00e4\u00e4s Kubernetes klastri t\u00f6\u00f6riistadele ja administratoridele, kellele kuulub selle t\u00f5rkeotsing v\u00f5i t\u00f6\u00f6korras hoidmine\u00bb. Vaata ka <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-compliance-and-secure-cicd\">minu postitust<\/a><\/noindex> turbe ja tehniliste n\u00f5uete t\u00e4itmise kohta, samuti <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@vesirin\/how-i-gained-commit-access-to-homebrew-in-30-minutes-2ae314df03ab\">artiklit Homebrew\u00b4 h\u00e4kkimise kohta<\/a><\/noindex> kasutajakontode varastamise kaudu hoolimatult koostatud Jenkins skripti kaudu.<\/li>\n<li> <b>Kasutajakogemus<\/b>. Kubectl paljastab Kubernetes objekti mudeli mehhanismi, mis on \u00fcsna keeruline. Ideaalis peaksid kasutajad s\u00fcsteemiga suhtlema k\u00f5rgemal abstraktsiooni tasemel. Siin viitan taas Kelsey'le ja soovitan vaadata <noindex><a rel=\"nofollow\" href=\"http:\/\/superuser.openstack.org\/articles\/kubernetes-boring\/\">selline CV<\/a><\/noindex>.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Erinevus CI ja CD vahel<\/h3>\n<p>\nGitOps parandab olemasolevaid CI\/CD mudeleid.<\/p>\n<p>Kaasaegne CI-server on t\u00f6\u00f6riist orkestreerimiseks. Eriti on see CI-pipeline'ide orkestreerimise t\u00f6\u00f6riist. Nende hulka kuuluvad build, test, trunk'i sulandumine jne. CI-serverid automatiseerivad keeruliste mitmeastmeliste pipeline'ide haldamist. Levinud kiusatus on luua skript Kubernetes'i v\u00e4rskenduste seadmise jaoks ja k\u00e4ivitada see pipeline'i elemendina muutuste pushimiseks klastrisse. Tegelikult toimivad paljud spetsialistid nii. Kuid see ei ole optimaalne, ja siin on miks.<\/p>\n<p>CI peaks olema kasutusel muudatuste tegemiseks peaharusse, samas kui Kubernetes'i klaster peaks oma muutusi p\u00f5hjal nende muudatuste alusel juhtima, et hallata CD-d \"sisemiselt\". Me nimetame seda <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-compliance-and-secure-cicd\">cd-mudelis t\u00f5mbamise mudeliks<\/a><\/noindex>, erinevalt CI t\u00f5ukemudelidest. CD on osa <i>runtime-orkestreerimisest<\/i>.<\/p>\n<h3>Miks CI-serverid ei tohiks teha CD-d otseuuenduste kaudu Kubernetes's<\/h3>\n<p>\n<i>\u00c4rge kasutage CI-serverit, et orkestreerida otseseid uuendusi Kubernetes's CI-t\u00f6\u00f6de komplekti kujul. See on anti-pattern, 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>Na l\u00e4hme tagasi Alisse ja Bobisse.<\/p>\n<p>Milliste probleemidega nad silmitsi seisavad? Bobi CI-server rakendab muudatused klastrisse, kuid kui see protsessi k\u00e4igus kokku kukub, ei tea Bob, millises seisundis klaster on (v\u00f5i peaks olema) ja kuidas seda parandada. Sama kehtib ka siis, kui j\u00e4tkub edukalt.<\/p>\n<p>Oletame, et Bobi meeskond on v\u00e4lja toonud uue pildi ja seej\u00e4rel v\u00e4rskendanud oma kerakogumisi, et rakendada pilti (k\u00f5ik see CI-pipeline'ist).<\/p>\n<p>Kui pilt koostatakse normaalselt, kuid protsess kukub kokku, peab meeskond v\u00e4lja selgitama:<\/p>\n<ul>\n<li> Kas uuendus on rakendatud?<\/li>\n<li> Kas me k\u00e4ivitame uut kogumist? Kas see toob kaasa soovimatuid k\u00f5rvalm\u00f5jusid \u2014 n\u00e4iteks kaht erinevat sama muutumatut pilti? <\/li>\n<li> Kas peaksime ootama j\u00e4rgmist uuendust, enne kui k\u00e4ivitame kogumise?<\/li>\n<li> Mis t\u00e4pselt valesti l\u00e4ks? Milliseid samme tuleb korrata (ja milliseid on ohutu korrata)?<\/li>\n<\/ul>\n<p>\n<i>Git-p\u00f5hise t\u00f6\u00f6voo korraldamine ei taga, et Bobi meeskond ei kohtu nende probleemidega. Nad v\u00f5ivad ikkagi valetada commit'i push'is, sildistamises v\u00f5i m\u00f5nes muus parameetris; siiski on see l\u00e4henemine siiski palju l\u00e4hemal \u00fchem\u00f5ttelisele k\u00f5ik v\u00f5i mitte.<\/i><\/p>\n<p>Kokkuv\u00f5tteks, siin on p\u00f5hjused, miks CI-serverid ei peaks tegelema CD-ga:<\/p>\n<ul>\n<li> Uuendusskriptid ei ole alati m\u00e4\u00e4ratavad; need on kergesti eksitavad.<\/li>\n<li> CI-serverid ei konvergeeru deklareeriva klastrimudeliga.<\/li>\n<li> Isemoodulite tagamise kindel tagamine on keeruline. Kasutajad peavad olema s\u00fcgava s\u00fcsteemi semantika osas teadlikud.<\/li>\n<li> Osalise eba\u00f5nnestumise korral on taastamine keerulisem.<\/li>\n<\/ul>\n<p>\n<i>M\u00e4rkus Helm'i kohta: kui soovite kasutada Helm'i, soovitame seda kombineerida GitOps operaatoriga, n\u00e4iteks <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/managing-helm-releases-the-gitops-way\">Flux-Helm<\/a><\/noindex>. See aitab tagada konvergentsi. \u00dcksinda Helm ei ole ei m\u00e4\u00e4ratletud ega atomaarne.<\/i><\/p>\n<h2>GitOps on parim viis teostada pidevat kohaletoimetamist Kuberneteses.<\/h2>\n<p>\nAlice'i ja Bob'i meeskond rakendab GitOps'i ning avastab, et on palju lihtsam t\u00f6\u00f6tada tarkvaratoodetega, s\u00e4ilitades k\u00f5rge j\u00f5udluse ja stabiilsuse. L\u00f5petame selle artikli illustreerimisena, mis n\u00e4itab, kuidas nende uus l\u00e4henemine v\u00e4lja n\u00e4eb. Pidage meeles, et r\u00e4\u00e4gime peamiselt rakendustest ja teenustest, kuid GitOps'i saab kasutada kogu platvormi haldamiseks.<\/p>\n<h3>Kubernetes'e t\u00f6\u00f6mudel<\/h3>\n<p>\nVaadake j\u00e4rgmist diagrammi. See esindab Git'i ja konteineripiltide hoidlat kui \u00fchiseid ressursse kahele orkestreeritud eluts\u00fcklile:<\/p>\n<ul>\n<li> J\u00e4tkuva integreerimise t\u00f6\u00f6voogu, mis loeb ja kirjutab faile Git'i ning v\u00f5ib v\u00e4rskendada konteineripiltide hoidlat.<\/li>\n<li> Runtime GitOps t\u00f6\u00f6voogu, mis \u00fchendab paigaldamise haldamise ja j\u00e4lgimisega. See loeb ja kirjutab faile Git'i ning v\u00f5ib \u00fcles laadida konteineripilte.<\/li>\n<\/ul>\n<h3>Millised on peamised j\u00e4reldused?<\/h3>\n<p><\/p>\n<ol>\n<li> <b>Probleemide eristamine<\/b>: Pange t\u00e4hele, et m\u00f5lemad t\u00f6\u00f6vood saavad andmeid vahetada, v\u00e4rskendades ainult Git'i v\u00f5i piltide hoidlat. Teisis\u00f5nu, CI ja runtime keskkonna vahel on tulem\u00fc\u00fcr. Me nimetame seda \"immutability firewall'iks\" <i>(immutability firewall)<\/i>, kuna k\u00f5ik hoidlate v\u00e4rskendused loovad uusi versioone. T\u00e4iendava teabe saamiseks selle teema kohta vaadake slaide 72-87. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.slideshare.net\/weaveworks\/continuous-lifecycle-london-2018-event-keynote-97418556\">selles esituses<\/a><\/noindex>.<\/li>\n<li> <b>V\u00f5ib kasutada k\u00f5iki CI ja Git servereid.<\/b>: GitOps t\u00f6\u00f6tab k\u00f5igi komponentidega. Saate j\u00e4tkata oma lemmik CI- ja Git-serverite, pildirepositooride ja testimistsetide kasutamist. Peaaegu k\u00f5ik \u00fclej\u00e4\u00e4nud pideva toimetamise t\u00f6\u00f6riistad turul n\u00f5uavad oma CI-\/Git-serverit v\u00f5i pildihoidlat. See v\u00f5ib osutuda takistuseks cloud native arendamisel. GitOps-i puhul v\u00f5ite kasutada tuttavaid t\u00f6\u00f6riistu.<\/li>\n<li> <b>\u00dcritused kui integreerimisvahend<\/b>: Kui andmed Git-is uuendatakse, teavitab Weave Flux (v\u00f5i Weave Cloud'i operaator) sellest runtime'i. Igakord, kui Kubernetes aktsepteerib muudatusi, uuendatakse Git-i. See tagab lihtsa integreerimismodelli t\u00f6\u00f6voogude korraldamiseks GitOps-i jaoks, nagu on n\u00e4idatud allpool.<\/li>\n<\/ol>\n<h2>Kokkuv\u00f5te<\/h2>\n<p>\nGitOps pakub olulisi uuendamise garantiisid, mis on vajalikud igale modernse CI\/CD t\u00f6\u00f6riistale:<\/p>\n<ul>\n<li> automaatika;<\/li>\n<li> konvergents;<\/li>\n<li> idempotsents;<\/li>\n<li> determinism.<\/li>\n<\/ul>\n<p>\nSee on oluline, kuna see pakub t\u00f6\u00f6korraldusmudelit arendajatele cloud native valdkonnas.<\/p>\n<ul>\n<li> Traditsioonilised t\u00f6\u00f6riistad s\u00fcsteemide haldamiseks ja j\u00e4lgimiseks on seotud operatiivmeeskondadega, kes tegutsevad runbook'iga <i>(rutiinsete protseduuride ja toimingute komplekt \u2014 tlk.)<\/i>, mis on seotud konkreetse deployment'iga.<\/li>\n<li> Pilv-native s\u00fcsteemide haldamisel on j\u00e4lgimist\u00f6\u00f6riist parim viis deploymendide tulemuste hindamiseks, et arendustiim saaks kiiresti reageerida.<\/li>\n<\/ul>\n<p>\nKujutage ette mitmeid klastreid, mis on hajutatud erinevatesse pilvedesse ja hulganisti teenuseid, millel on omad meeskonnad ja deploymendi plaanid. GitOps pakub skaala-invariantset mudelit kogu selle k\u00fclluse haldamiseks.<\/p>\n<h2>P.S. t\u00f5lkija m\u00e4rkused<\/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: Pulli ja Pushi 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 Kubernetesi ressursside j\u00e4lgimiseks<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">Kubernetesi laiendamine ja t\u00e4iendamine (\u00fclevaade ja video ettekandest)<\/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 nende kahe t\u00f5lke ilmumist Habr's?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Jah, ma teadsin k\u00f5igest<\/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>    H\u00e4\u00e4letas 35 kasutajat. 10 kasutajat hoidusid.<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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\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\" \/>\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) 4.9.10\" \/>\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. \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\" \/>\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\u00e4rkuseks: P\u00e4rast hiljutist artikli avaldamist GitOpsi pull- ja push-menetlustest n\u00e4gime huvi selle mudeli vastu, kuid venekeelseid publikatsioone sellel teemal on peaaegu mitte \u00fcldse (Habr's ei ole neid praktiliselt). Seet\u00f5ttu oleme r\u00f5\u00f5msad pakkuda teie t\u00e4helepanu t\u00f5lget teisele artiklile \u2014 kuigi see on peaaegu aasta vana! \u2014 ettev\u00f5ttelt Weaveworks, peat\u00fckk","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. \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","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"},"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}]}}