{"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\/sl\/blog\/administrirovanie\/chto-zhe-takoe-gitops","title":{"rendered":"Kaj je GitOps?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Op. prev.<\/b>: Po nedavni objavi <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/456754\/\">gradiva<\/a><\/noindex> o metodah pull in push v GitOps smo opazili zanimanje za ta model kot celoto, vendar je bilo v sloven\u0161\u010dini objav na to temo zelo malo (na Habu sploh ni). Zato z veseljem ponujamo va\u0161emuu vidiku prevod drugega \u010dlanka \u2014 \u010deprav je skoraj eno leto star! \u2014 podjetja Weaveworks, katerega vodja je skoval izraz 'GitOps'. V besedilu so pojasnjeni bistvo pristopa in klju\u010dne razlike od obstoje\u010dih.<\/i><\/p>\n<p>\nPred letom dni smo objavili <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-operations-by-pull-request\">uvod v GitOps<\/a><\/noindex>. Takrat smo opisali, kako je ekipa Weaveworks zagnala SaaS, popolnoma temelje\u010d na Kubernetes, ter razvila nabor priporo\u010denih najbolj\u0161ih praks za uvajanje, upravljanje in spremljanje v okolju cloud native.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>\u010clanek je bil priljubljen. Drugi so za\u010deli govoriti o GitOpsu, objavljali nove pripomo\u010dke za <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\">razvoj<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/storing-secure-sealed-secrets-using-gitops\">skrivnosti<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.alexellis.io\/introducing-openfaas-cloud\/\">funkcij<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/jenkins.io\/blog\/2018\/03\/19\/introducing-jenkins-x\/\">neprekinjene integracije<\/a><\/noindex> itd. Na na\u0161i spletni strani se je pojavilo <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/category\/gitops\/\">veliko \u0161tevilo<\/a><\/noindex> objav in primerov uporabe GitOps. Vendar pa so nekateri ljudje imeli \u0161e vedno vpra\u0161anja. Kako se model razlikuje od tradicionalne <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> in neprekinjene dostave (<noindex><a rel=\"nofollow\" href=\"https:\/\/puppet.com\/blog\/a-deployment-pipeline-for-infrastructure-a-devops-case-study-at-nbn\">continuous delivery<\/a><\/noindex>)? Je nujno uporabljati Kubernetes?<\/p>\n<p>Kmalu smo spoznali, da je potrebno novo opisovanje, ki ponuja:<\/p>\n<ol>\n<li> Veliko primerov in zgodb;<\/li>\n<li> Konkreten opis GitOps;<\/li>\n<li> Primerjavo s tradicionalno neprekinjeno dostavo.<\/li>\n<\/ol>\n<p>\nV tem \u010dlanku smo posku\u0161ali zajeti vse te teme. V njem boste na\u0161li posodobljen uvod v GitOps in pogled nanj z vidika razvijalcev in CI\/CD. Prevladujo\u010de se osredoto\u010damo na Kubernetes, vendar se model lahko povsem posplo\u0161i.<\/p>\n<h2>Spoznajte: GitOps<\/h2>\n<p>\nPredstavljajte si Aliso. Upravljala bo podjetjem Family Insurance, ki nudi zavarovalne police za zdravje, avtomobile, nepremi\u010dnine in potovanj zavarovanja ljudem, ki so preve\u010d zaposleni, da bi se sami ukvarjali s podrobnostmi pogodb. Njen posel se je za\u010del kot stranski projekt, ko je Alisa delala v banki kot podatkovna znanstvenica. Nekega dne je spoznala, da lahko uporabi napredne ra\u010dunalni\u0161ke algoritem za u\u010dinkovitej\u0161o analizo podatkov in oblikovanje zavarovalnih paketov. Investitorji so financirali projekt, in zdaj njeno podjetje prina\u0161a ve\u010d kot 20 milijonov dolarjev na leto in hitro raste. Trenutno zaposluje 180 ljudi na razli\u010dnih delovnih mestih. Med njimi je tehnolo\u0161ka ekipa, ki skrbi za razvoj, vzdr\u017eevanje spletne strani, baze podatkov in analizo strank. Ekipo, ki jo sestavlja 60 ljudi, vodi Bob \u2014 tehni\u010dni direktor podjetja.<\/p>\n<p>Bobova ekipa uvaja produkcijske sisteme v oblaku. Njihove glavne aplikacije delujejo na GKE in izkori\u0161\u010dajo prednosti Kubernetes v Google Cloud. Poleg tega pri svojem delu uporabljajo razli\u010dna orodja za obdelavo podatkov in analitiko.<\/p>\n<p>Family Insurance ni je imela namena uporabljati kontejnerje, a se je navdu\u0161ila nad Dockerjem. Kmalu so strokovnjaki podjetja odkrili, da GKE omogo\u010da hitro in enostavno uvajanje clusterjev za testiranje novih funkcionalnosti. Dodali so Jenkins za CI in Quay za organizacijo registra kontejnerjev, napisali so skripte za Jenkins, ki so pushali nove kontejnerje in konfiguracije v GKE.<\/p>\n<p>Minilo je nekaj \u010dasa. Alisa in Bob sta bila razo\u010darana nad zmogljivostjo izbrane metode in njenim vplivom na poslovanje. Uvajanje kontejnerjev ni tako pove\u010dalo zmogljivosti, kot je upala ekipa. V\u010dasih so se deploymenti podirali, in ni bilo jasno, ali so za to krive spremembe kode. Prav tako je bilo te\u017eko spremljati spremembe konfiguracij. Pogosto je bilo potrebno ustvariti nov cluster in preseliti aplikacije vanj, saj je bilo to najbolj enostaven na\u010din za odpravo kaosa, v katerega je padel sistem. Alisa se je bala, da se bo situacija poslab\u0161ala, ko se bo aplikacija razvijala (poleg tega se je obetala nov projekt na osnovi strojnega u\u010denja). Bob je avtomatiziral velik del dela in ni razumel, zakaj je pipeline \u0161e vedno nestabilen, slabo skalira in ob\u010dasno zahteva ro\u010dno posredovanje.<\/p>\n<p><b>Nato sta izvedela za GitOps. To re\u0161itev se je izkazala za tisto, kar sta potrebovala za samozavestno napredovanje.<\/b><\/p>\n<p>Alisa in Bob sta \u017ee vrsto let sli\u0161ala za delovne tokove, ki temeljijo na Gitu, DevOps in infrastrukturo kot kodo. Edinstvena lastnost GitOps je, da prina\u0161a vrsto najbolj\u0161ih praks \u2014 kategoriy\u010dnih in normativnih \u2014 za uresni\u010devanje teh idej v kontekstu Kubernetes. Ta tematika <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/search?q=gitops&amp;src=typd\">je bila ve\u010dkrat omenjena<\/a><\/noindex>, vklju\u010dno z <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-high-velocity-cicd-for-kubernetes\">blogom Weaveworks<\/a><\/noindex>.<\/p>\n<p>Family Insurance se odlo\u010da za uvajanje GitOps. Zdaj ima podjetje avtomatiziran model delovanja, ki je zdru\u017eljiv s Kubernetes in zdru\u017euje <i>hitrost<\/i> z <i>stabilnostjo<\/i>, saj so:<\/p>\n<ul>\n<li> odkrili, da je produktivnost ekipe dvakrat ve\u010dja in nih\u010de pri tem ne izgublja zdrave pameti;<\/li>\n<li> prenehali oskrbovati skripte. Namesto tega se sedaj lahko osredoto\u010dijo na nove funkcije in izbolj\u0161ajo in\u017eenirske metode \u2014 na primer, uvedli so kanarjevo uvajanje in izbolj\u0161ali testiranje;<\/li>\n<li> izbolj\u0161ali proces uvajanja \u2014 sedaj redko odpove;<\/li>\n<li> so dobili sposobnost obnavljanja deploymentov po delnih napakah brez ro\u010dnega posredovanja;<\/li>\n<li> pridobili b<i>o<\/i>olj\u0161o zaupanje v dobavne sisteme. Alisa in Bob sta odkrila, da lahko ekipo razdelita na skupine, ki se ukvarjajo z mikroservisi in delajo vzporedno;<\/li>\n<li> lahko uvedeta 30-50 sprememb v projekt vsak dan s prizadevanji vsake skupine in preizku\u0161ata nove tehnike;<\/li>\n<li> lahko enostavno vklju\u010dijo nove razvijalce v projekt, ki lahko na produkcijo uvajajo posodobitve preko pull requestov \u017ee v nekaj urah;<\/li>\n<li> enostavno opravijo revizijo v okviru SOC2 <i>(v skladu s zahtevami ponudnikov storitev za varno upravljanje podatkov; ve\u010d o tem lahko preberete na primer, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.imperva.com\/learn\/data-security\/soc-2-compliance\/\">ovde<\/a><\/noindex> \u2014 op. prev.)<\/i>.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Kaj se je zgodilo?<\/h3>\n<p>\nGitOps \u2014 to sta dve stvari:<\/p>\n<ol>\n<li> Model delovanja za Kubernetes in cloud native. Ponuja nabor najbolj\u0161ih praks za name\u0161\u010danje, upravljanje in spremljanje aplikacij in klasterjev, zbranih v kontejnerje. Eleganten opis v obliki <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/vitorsilva\/status\/999978906903080961\">enega diapozitiva<\/a><\/noindex> od <noindex><a rel=\"nofollow\" href=\"https:\/\/2018.agilept.org\/speaker_luis_faceira.html\">Luis Faceira<\/a><\/noindex>:\n<\/li>\n<li> Pot do ustvarjanja okolja, usmerjenega v razvijalce, za upravljanje aplikacij. Uporabljamo delovni postopek Git tako za delovanje kot za razvoj. Upo\u0161tevajte, da ne gre le za Git push, temve\u010d za organizacijo celotnega nabora orodij CI\/CD in UI\/UX.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Nekaj besed o Gitu<\/h3>\n<p>\n\u010ce niste seznanjeni s sistemi za nadzor razli\u010dic in delovnim tokom, ki temelji na Gitu, vam toplo priporo\u010damo, da jih preu\u010dite. Na za\u010detku se lahko delo z vejami in pull requesti zdi kot \u010darovni\u0161tvo, vendar so koristi vredne vlo\u017eenega truda. Tukaj je <noindex><a rel=\"nofollow\" href=\"https:\/\/codeburst.io\/trunk-based-development-vs-git-flow-a0212a6cae64\">dober \u010dlanek<\/a><\/noindex> za za\u010detek.<\/p>\n<h2>Kako deluje Kubernetes<\/h2>\n<p>\nV na\u0161i zgodbi sta Alice in Bob pre\u0161la na GitOps po nekem \u010dasu dela s Kubernetesom. GitOps je dejansko tesno povezan s Kubernetesom \u2014 to je model delovanja za infrastrukturo in aplikacije, ki temeljijo na Kubernetesu.<\/p>\n<h3>Kaj Kubernetes nudi uporabnikom?<\/h3>\n<p>\nTukaj je nekaj klju\u010dnih zna\u010dilnosti:<\/p>\n<ol>\n<li> V modelu Kubernetes je vse mogo\u010de opisati v deklarativni obliki.<\/li>\n<li> API stre\u017enik Kubernetes sprejema tak\u0161no deklaracijo kot vhodne podatke in nato nenehno posku\u0161a pripeljati klaster v stanje, opisano v deklaraciji.<\/li>\n<li> Deklaracije so zadostne za opis in upravljanje \u0161irokega spektra delovnih obremenitev - 'aplikacij'.<\/li>\n<li> Zaradi tega se spremembe v aplikaciji in klastru zgodijo zaradi:\n<ul>\n<li> sprememb v slikah kontejnerjev;<\/li>\n<li> sprememb v deklarativni specifikaciji;<\/li>\n<li> napak v okolju - na primer, padcev kontejnerjev.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><\/p>\n<h3>\u010cudovite sposobnosti Kubernetes za konvergenco<\/h3>\n<p>\nKo administrator spremeni konfiguracijo, bo orkestrator Kubernetes te spremembe uporabil na klastru, dokler njegovo stanje <i>ne dose\u017ee nove konfiguracije.<\/i>. Ta model deluje za vsak vir Kubernetes in se raz\u0161iri s pomo\u010djo Custom Resource Definitions (CRD). Zato imajo deploymenti Kubernetes naslednje \u010dudovite lastnosti:<\/p>\n<ul>\n<li> <b>Avtomatizacija<\/b>: posodobitve Kubernetes ponujajo mehanizem za avtomatizacijo postopka pravilne in pravo\u010dasne uporabe sprememb.<\/li>\n<li> <b>Konvergenca<\/b>: Kubernetes bo \u0161e naprej posku\u0161al posodobitve, dokler ne bo uspe\u0161en.<\/li>\n<li> <b>Idempotentnost<\/b>: ponovna uporaba konvergence vodi do istega rezultata.<\/li>\n<li> <b>Detereminiranost<\/b>: ob zadostnih virih stanje posodobljenega grozda temelji le na \u017eelenem stanju.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Kako deluje GitOps<\/h2>\n<p>\nDovolj smo spoznali Kubernetes, da pojasnimo principe delovanja GitOps.<\/p>\n<p>Vrnimo se k skupinam Family Insurance, povezanih z mikroservisi. S \u010dim se obi\u010dajno ukvarjajo? Oglejte si seznam spodaj (\u010de se vam katera od postavk zdi \u010dudna ali nepoznana \u2014 prosimo, po\u010dakajte s kritiko in ostanite z nami). To so le primeri delovnih procesov na podlagi Jenkins. Obstaja \u0161e mnoge druge procese, ko delate z drugimi orodji.<\/p>\n<p>Najpomembnej\u0161e je, da vidimo, da se vsaka posodobitev kon\u010da s spremembami v konfiguracijskih datotekah in Git repozitorijih. Te spremembe v Gitu povzro\u010dijo, da \"GitOps operater\" posodobi grozd:<\/p>\n<p>1. Delovni proces: \"<i>Gradnja Jenkins \u2014 veja master<\/i>\u00bb.<br \/>\nSeznam nalog:<\/p>\n<ul>\n<li> Jenkins pushuje ozna\u010dene slike v Quay;<\/li>\n<li> Jenkins pushuje konfiguracijo in Helm \u0161arte v glavni skladi\u0161\u010dni prostor;<\/li>\n<li> Obla\u010dna funkcija kopira konfiguracijo in grafikone iz vedra master skladi\u0161\u010da v Git repozitorij master;<\/li>\n<li> GitOps operater posodobi grozd.<\/li>\n<\/ul>\n<p>\n2. <i>Gradnja Jenkins \u2014 veja release ali hotfix<\/i>:<\/p>\n<ul>\n<li> Jenkins pushuje neozna\u010dene slike v Quay;<\/li>\n<li> Jenkins pushuje konfiguracijo in Helm \u0161arte v skladi\u0161\u010dni prostor za staging;<\/li>\n<li> Obla\u010dna funkcija kopira konfiguracijo in grafikone iz vedra staging skladi\u0161\u010da v Git repozitorij staging;<\/li>\n<li> GitOps operater posodobi grozd.<\/li>\n<\/ul>\n<p>\n3. <i>Gradnja Jenkins \u2014 veja develop ali feature<\/i>:<\/p>\n<ul>\n<li> Jenkins pushuje neozna\u010dene slike v Quay;<\/li>\n<li> Jenkins pushuje konfiguracijo in Helm \u0161arte v skladi\u0161\u010dni prostor za razvoj;<\/li>\n<li> Obla\u010dna funkcija kopira konfiguracijo in grafikone iz vedra develop skladi\u0161\u010da v Git repozitorij develop;<\/li>\n<li>GitOps operater posodobi grozd.<\/li>\n<\/ul>\n<p>\n4. <i>Dodajanje novega klienta<\/i>:<\/p>\n<ul>\n<li> Manager ali skrbnik (LCM\/ops) pokli\u010de Gradle za prvotno implementacijo in nastavitev omre\u017enih uravnote\u017eevalnikov obremenitve (NLB);<\/li>\n<li> LCM\/ops commita novo konfiguracijo za pripravo deploymenta na posodobitve;<\/li>\n<li> GitOps operater posodobi grozd.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Kratki opis GitOps<\/h3>\n<p><\/p>\n<ol>\n<li> Opi\u0161ite \u017eeljeno stanje cijelog sistema koriste\u0107i deklarativne specifikacije za svako okru\u017eenje (u na\u0161oj pri\u010di Bobov tim definira cijelu konfiguraciju sistema u Gitu).\n<ul>\n<li> Git repozitorij je jedini izvor istine u vezi sa \u017eeljenim stanjem cijelog sistema.<\/li>\n<li> Sve promjene \u017eeljenog stanja vr\u0161e se putem commit-a u Git.<\/li>\n<li> Svi \u017eeljeni parametri klastera tako\u0111er su vidljivi u samom klasteru. Tako mo\u017eemo utvrditi da li se \u017eeljeno i promatrano stanje podudaraju (konvergiraju, <i>converge<\/i>) ili razlikuju (divergiraju, <i>diverge<\/i>) od \u017eeljenog i promatranog stanja.<\/li>\n<\/ul>\n<\/li>\n<li> Ako se \u017eeljeno i promatrano stanje razlikuju, tada:\n<ul>\n<li> Postoji mehanizam konvergencije koji \u0107e prije ili kasnije automatski uskladiti ciljno i promatrano stanje. Unutar klastera, tim se bavi Kubernetes.<\/li>\n<li> Proces se pokre\u0107e odmah s obavje\u0161tenjem \u201epromjena je izvr\u0161ena\u201d.<\/li>\n<li> Nakon odre\u0111enog prilagodljivog vremenskog razdoblja mo\u017ee biti poslato obavje\u0161tenje \u201ediff\u201d, ako se stanja razlikuju.<\/li>\n<\/ul>\n<\/li>\n<li> Tako svi commit-i u Git pokre\u0107u provjerljive i idempotentne nadogradnje u klasteru.\n<ul>\n<li>Rollback je konvergencija na prethodno \u017eeljeno stanje.<\/li>\n<\/ul>\n<\/li>\n<li> Konvergencija je kona\u010dna. O njenom postizanju svjedo\u010de:\n<ul>\n<li> Nedostatak obavje\u0161tenja \u201ediff\u201d tokom odre\u0111enog vremenskog perioda.<\/li>\n<li> Obavje\u0161tenje \u201ekonvergirano\u201d (na primjer, webhook, doga\u0111aj Git writeback).<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><\/p>\n<h3>\u0160ta je divergencija?<\/h3>\n<p>\nPonovimo jo\u0161 jednom: <i>sva \u017eeljena svojstva klastera moraju biti vidljiva u samom klasteru<\/i>.<\/p>\n<p>Nekoliko primjera divergencije:<\/p>\n<ul>\n<li> Promjena u konfiguracijskoj datoteci zbog spajanja grana u Gitu.<\/li>\n<li> Promjena u konfiguracijskoj datoteci zbog commit-a u Gitu, napravljenog putem GUI klijenta.<\/li>\n<li> Vi\u0161estruke promjene u \u017eeljenom stanju uslijed PR-a u Gitu uz naknadnu izradu kontejnerske slike i promjenama u konfiguraciji.<\/li>\n<li> Promjena stanja klastera zbog gre\u0161ke, sukoba resursa koji dovodi do \u201elo\u0161eg pona\u0161anja\u201d, ili jednostavno slu\u010dajnog odstupanja od originalnog stanja.<\/li>\n<\/ul>\n<p><\/p>\n<h3>\u0160ta predstavlja mehanizam konvergencije?<\/h3>\n<p>\nNekoliko primjera:<\/p>\n<ul>\n<li> Za kontejnere i klastere, mehanizam konvergencije pru\u017ea Kubernetes.<\/li>\n<li> Isti mehanizam se mo\u017ee koristiti za upravljanje aplikacijama i konstrukcijama temeljenim na Kubernetes-u (na primjer, Istio i Kubeflow).<\/li>\n<li> Mehanizem za upravljanje delovnim sodelovanjem med Kubernetesom, repozitoriji slik in Gitom zagotavlja <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/weaveworks\/flux\">GitOps-operator Weave Flux<\/a><\/noindex>, ki je del <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.weave.works\/\">Weave Cloud<\/a><\/noindex>.<\/li>\n<li> Za osnovne naprave mora biti mehanizem konvergence deklarativen in avtonomen. Po na\u0161ih izku\u0161njah lahko re\u010demo, da <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> je najbli\u017eje tej definiciji, vendar \u0161e vedno zahteva nadzor \u010dloveka. V tem smislu GitOps \u0161iri tradicije Infrastructure as Code.<\/li>\n<\/ul>\n<p>\nGitOps zdru\u017euje Git s odli\u010dnim mehanizmom konvergence Kubernetes, ponuja model za delovanje.<\/p>\n<p>GitOps nam omogo\u010da, da izjavimo: <i>avtomatizaciji in nadzoru podrejene samo tiste sisteme, ki jih je mogo\u010de opisati in opazovati<\/i>.<\/p>\n<h3>GitOps je namenjen celotnemu cloud native-\u5806 (na primer, Terraform itd.)<\/h3>\n<p>\nGitOps ni samo Kubernetes. \u017delimo, da bi bil celoten sistem upravljan deklarativno in uporabljal konvergenco. Pod celotnim sistemom razumemo nabor okolij, ki delujejo s Kubernetesom - na primer 'dev cluster 1', 'produkcija' itd. Vsako okolje vklju\u010duje naprave, klastre, aplikacije ter vmesnike za zunanje storitve, ki zagotavljajo podatke, spremljanje itd.<\/p>\n<p>Opazite, kako pomemben je v tem primeru Terraform za te\u017eavo z uvajanjem. Kubernetes mora biti nekje name\u0161\u010den, in uporaba Terraforma pomeni, da lahko uporabimo iste delovne tokove GitOps za oblikovanje upravljalske plasti, ki le\u017ei na osnovi Kubernetesa in aplikacij. To je koristna najbolj\u0161a praksa.<\/p>\n<p>Veliko pozornosti je namenjeno uporabi konceptov GitOps za sloje nad Kubernetesom. V tem trenutku so na voljo re\u0161itve tipa GitOps za Istio, Helm, Ksonnet, OpenFaaS in Kubeflow ter na primer za Pulumi, ki ustvarjajo sloj za razvoj aplikacij za cloud native.<\/p>\n<h2>Kubernetes CI\/CD: primerjava GitOps z drugimi pristopi<\/h2>\n<p>\nKot je bilo omenjeno, je GitOps dva stvari:<\/p>\n<ol>\n<li> Model delovanja za Kubernetes in cloud native, opisan zgoraj.<\/li>\n<li> Pot do organizirane okolice, usmerjene v razvijalce, za upravljanje aplikacij.<\/li>\n<\/ol>\n<p>\nZa mnoge je GitOps predvsem delovni proces, ki temelji na Git push. Tudi mi ga imamo radi. A to \u0161e ni vse: poglejmo zdaj CI\/CD pipeline.<\/p>\n<h3>GitOps zagotavlja neprekinjeno uvajanje (CD) pod Kubernetesom<\/h3>\n<p>\nGitOps ponuja mehanizem neprekinjenega uvajanja, ki odpravlja potrebo po lo\u010denih 'sistemih za upravljanje uvajanj'. Vso delo opravi za vas Kubernetes.<\/p>\n<ul>\n<li> Posodobitev aplikacije zahteva posodobitev v Gitu. To je transakcijska posodobitev do \u017eelenega stanja. 'Monta\u017ea' se nato izvede znotraj klasterja sam z Kubernetesom na podlagi posodobljenega opisa.<\/li>\n<li> Zaradi specifi\u010dnosti delovanja Kubernetesa so te posodobitve konvergentne. Tako je zagotovljen mehanizem za neprekinjeno uvajanje, v katerem so vse posodobitve atomske.<\/li>\n<li> Opomba: <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.weave.works\/\">Weave Cloud<\/a><\/noindex> ponuja GitOps operator, ki integrira Git in Kubernetes ter omogo\u010da izvajanje CD s usklajevanjem \u017eelene in trenutne state grozda.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Brez kubectl in skriptov<\/h3>\n<p>\nIzogibati se je treba uporabi Kubectl za posodobitev grozda, zlasti pa skriptom za grupiranje ukazov kubectl. Namesto tega lahko uporabnik posodobi svoj grozd Kubernetes prek GitOps pipeline.<\/p>\n<p>Prednosti vklju\u010dujejo:<\/p>\n<ol>\n<li> <b>Pravilnost<\/b>. Skupino posodobitev lahko uporabimo, konvergiramo in na koncu validiramo, kar nas pribli\u017ea cilju atomske implementacije. Nasprotno, uporaba skriptov ne zagotavlja nobenih jamstev konvergence (ve\u010d o tem spodaj).<\/li>\n<li> <b>Sigurnost<\/b>. <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/kelseyhightower\/status\/939003832805179392?lang=en\">Citiram<\/a><\/noindex> Kelsey Hightower: \u201eOmejite dostop do grozda Kubernetes orodjem za avtomatizacijo in skrbnikom, katerih odgovornost je njegova odpravljanje napak ali vzdr\u017eevanje delovanja\u201c. Glejte tudi <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-compliance-and-secure-cicd\">moj \u010dlanek<\/a><\/noindex> o varnosti in skladnosti s tehni\u010dnimi zahtevami, ter <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@vesirin\/how-i-gained-commit-access-to-homebrew-in-30-minutes-2ae314df03ab\">\u010dlanek o kr\u0161itvi Homebrew<\/a><\/noindex> s krajo poverilnic iz slabo napisanega Jenkins skripta.<\/li>\n<li> <b>Uporabni\u0161ka izku\u0161nja<\/b>. Kubectl razkriva mehaniko objektnega modela Kubernetesa, ki je precej zapleten. V idealnem primeru bi morali uporabniki interagirati s sistemom na vi\u0161ji ravni abstrakcije. Tukaj se spet sklicujem na Kelseyja in priporo\u010dam, da si ogledate <noindex><a rel=\"nofollow\" href=\"http:\/\/superuser.openstack.org\/articles\/kubernetes-boring\/\">to\u010den pregled<\/a><\/noindex>.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Razlika med CI in CD<\/h3>\n<p>\nGitOps izbolj\u0161uje obstoje\u010de CI\/CD modele.<\/p>\n<p>Moderen CI stre\u017enik je orodje za orkestracijo. Zlasti je to orodje za orkestracijo CI pipeline-ov. Ti vklju\u010dujejo gradnjo, testiranje, zdru\u017eevanje v trunk itd. CI stre\u017eniki avtomatizirajo upravljanje zapletenih ve\u010dstopenjskih pipeline-ov. Pogost sku\u0161njavi je, da ustvarite skript za niz posodobitev Kubernetesa in ga izvedete kot del pipeline-a za push sprememb v klaster. Pravzaprav se tako ravnajo mnogi strokovnjaki. Vendar to ni optimalno, in to je razlog.<\/p>\n<p>CI naj bi se uporabljal za uvajanje posodobitev v trunk, medtem ko se mora Kubernetes klaster spreminjati na podlagi teh posodobitev, da upravlja CD \u201enotranje\u201c. To imenujemo <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-compliance-and-secure-cicd\">pull-model za CD<\/a><\/noindex>, kar se razlikuje od CI push-modela. CD je del <i>runtime-orchestracije<\/i>.<\/p>\n<h3>Zakaj CI stre\u017eniki ne bi smeli izvajati CD prek neposrednih posodobitev v Kubernetes<\/h3>\n<p>\n<i>Ne uporabljajte CI stre\u017enika za orkestracijo neposrednih posodobitev v Kubernetes v obliki niza CI nalog. To je protikoren, o katerem smo <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/kubernetes-anti-patterns-let-s-do-gitops-not-ciops\">\u017ee smo \u017ee govorili<\/a><\/noindex> v na\u0161em blogu.<\/i><\/p>\n<p>Poglejmo Aliso in Boba.<\/p>\n<p>S katerimi te\u017eavami sta se sre\u010dala? CI stre\u017enik Boba uporablja spremembe v klastru, toda \u010de med postopkom pade, Bob ne bo vedel, v katerem stanju je (ali bi moral biti) klaster in kako ga popraviti. Enako velja v primeru uspeha.<\/p>\n<p>Predpostavimo, da je Bobova ekipa zgradila novo sliko in nato popravila svoje deployment, da bi razgradila sliko (vse to iz CI pipeline-a).<\/p>\n<p>\u010ce se slika sestavi normalno, vendar cev pade, se bo ekipa morala spra\u0161evati:<\/p>\n<ul>\n<li> Ali je bila posodobitev razporejena?<\/li>\n<li> Ali izvajamo novo gradnjo? Bo to povzro\u010dilo nepotrebne stranske u\u010dinke \u2014 mo\u017enost pridobitve dveh gradenj iste nespremenjene slike? <\/li>\n<li> Ali naj po\u010dakamo na naslednjo posodobitev, preden za\u017eenemo gradnjo?<\/li>\n<li> Kaj to\u010dno je \u0161lo narobe? Katere korake je treba ponoviti (in katere je varno ponoviti)?<\/li>\n<\/ul>\n<p>\n<i>Organizacija delovnega procesa, temelje\u010dega na Gitu, ne zagotavlja, da se Bobova ekipa ne sre\u010duje s temi te\u017eavami. \u0160e vedno lahko naredijo napako pri push-u commit-a, pri oznaki ali katerem koli drugem parametru; vendar je ta pristop vseeno veliko bli\u017eje jasnemu 'vse-ali-ni\u010d'.<\/i><\/p>\n<p>Na kratko, tukaj je, zakaj CI stre\u017eniki ne bi smeli opravljati CD:<\/p>\n<ul>\n<li> Skripti za posodobitev niso vedno deterministi\u010dni; enostavno je narediti napake.<\/li>\n<li> CI stre\u017eniki ne konvergirajo k deklarativnemu modelu klasterja.<\/li>\n<li> Te\u017eko je zagotoviti idempotentnost. Uporabniki morajo razumeti globoko semantiko sistema.<\/li>\n<li> Te\u017eje je obnoviti po delnem neuspehu.<\/li>\n<\/ul>\n<p>\n<i>Opomba o Helmu: \u010de \u017eelite uporabljati Helm, priporo\u010damo, da ga zdru\u017eite z GitOps operaterjem, kot je <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/managing-helm-releases-the-gitops-way\">Flux-Helm<\/a><\/noindex>. To bo pomagalo zagotoviti konvergenco. Sam Helm ni niti deterministi\u010den niti atomaren.<\/i><\/p>\n<h2>GitOps kot najbolj\u0161i na\u010din za izvajanje Continuous Delivery za Kubernetes<\/h2>\n<p>\nEkipa Alice in Boba uvaja GitOps in ugotavlja, da je veliko la\u017eje delati s programsko opremo ter ohranjati visoko u\u010dinkovitost in stabilnost. Zaklju\u010dimo ta \u010dlanek s ilustracijami, ki prikazujejo, kako izgleda njihov nov pristop. Upo\u0161tevajte, da se ve\u010dinoma pogovarjamo o aplikacijah in storitvah, vendar se GitOps lahko uporablja za upravljanje celotne platforme.<\/p>\n<h3>Model delovanja za Kubernetes<\/h3>\n<p>\nOglejte si naslednjo diagramo. Predstavlja Git in shrambo slik kontejnerjev kot skupne vire za dva orkestrirana \u017eivljenjska cikla:<\/p>\n<ul>\n<li> Cevovod neprekinjene integracije, ki bere in zapisuje datoteke v Git ter lahko posodobi repozitorij slik kontejnerjev.<\/li>\n<li> Cevovod Runtime GitOps, ki zdru\u017euje namestitev z upravljanjem in opazovanjem. Bere in zapisuje datoteke v Git ter lahko nalaga slike kontejnerjev.<\/li>\n<\/ul>\n<h3>Kak\u0161ni so glavni sklepi?<\/h3>\n<p><\/p>\n<ol>\n<li> <b>Lo\u010ditev te\u017eav<\/b>: Upo\u0161tevajte, da se lahko oba cevovoda izmenjujeta podatke, tako da posodabljata Git ali repozitorij slik. Z drugimi besedami, obstaja po\u017earni zid med CI in runtime okoljem. Imenujemo ga 'po\u017earni zid nespremenljivosti' <i>(immutability firewall)<\/i>, saj vse posodobitve repozitorijev ustvarjajo nove razli\u010dice. Za dodatne informacije o tej temi se obrnite na diapozitive 72-87. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.slideshare.net\/weaveworks\/continuous-lifecycle-london-2018-event-keynote-97418556\">te predstavitve<\/a><\/noindex>.<\/li>\n<li> <b>Lahko uporabite katerikoli CI- in Git-stre\u017enik<\/b>: GitOps deluje z vsemi komponentami. \u0160e naprej lahko uporabljate svoje priljubljene CI- in Git-stre\u017enike, repozitorije slik in nize testov. Skoraj vsi drugi pripomo\u010dki za neprekinjeno dostavo na trgu zahtevajo svoj lastni CI-\/Git-stre\u017enik ali shrambo slik. To je lahko omejevalni dejavnik v razvoju cloud native. Pri GitOps lahko uporabite znane pripomo\u010dke.<\/li>\n<li> <b>Dogodki kot orodje integracije<\/b>: Takoj, ko so podatki v Gitu posodobljeni, Weave Flux (ali operater Weave Cloud) obvesti o tem runtime. Vsaki\u010d, ko Kubernetes sprejme niz sprememb, se Git posodobi. To zagotavlja preprost model integracije za organizacijo delovnih procesov za GitOps, kot je prikazano spodaj.<\/li>\n<\/ol>\n<h2>Zaklju\u010dek<\/h2>\n<p>\nGitOps zagotavlja pomembne garancije posodobitev, ki so potrebne kateremukoli sodobnemu orodju CI\/CD:<\/p>\n<ul>\n<li> avtomatizacija;<\/li>\n<li> konvergenca;<\/li>\n<li> idempotentnost;<\/li>\n<li> determiniranost.<\/li>\n<\/ul>\n<p>\nTo je pomembno, saj ponuja model delovanja za razvijalce na podro\u010dju cloud native.<\/p>\n<ul>\n<li> Tradicionalna orodja za upravljanje in spremljanje sistemov so povezana z ekipo za obratovanje, ki deluje v okviru runbook-a <i>(niza rutinskih postopkov in operacij \u2014 op. prev.)<\/i>, pritrjenega na dolo\u010den deployment.<\/li>\n<li> Pri upravljanju cloud native sistemov je orodje za opazovanje najbolj\u0161i na\u010din za oceno rezultatov razporeditev, da se lahko ekipa razvijalcev nanje hitro odzove.<\/li>\n<\/ul>\n<p>\nPredstavljajte si \u0161tevilne klastre, raztresene po razli\u010dnih oblakih, in \u0161tevilne storitve s svojimi ekipami in na\u010drti razporeditev. GitOps ponuja obse\u017eno modeliranje za upravljanje vsega tega bogastva.<\/p>\n<h2>P.S. od prevajalca<\/h2>\n<p>\nPreberite tudi na na\u0161em blogu:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/456754\/\">GitOps: pore\u0111enje Pull i Push metoda<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/434160\/\">Predstavljamo knji\u017enico kubedog za spremljanje virov Kubernetes.<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">Raz\u0161irjamo in dopolnjujemo Kubernetes (pregled in video poro\u010dila)<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p class=\"for_users_only_msg\">Samo registrovani korisnici mogu u\u010destvovati u anketi. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Prijavite se<\/a><\/noindex>, molim vas.<\/p>\n<h2 class=\"default-block__polling-title\">Ali ste vedeli za GitOps, preden sta ti dve prevodni objavi pri\u0161li na Habr?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ja, vse sem vedel(a)<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Le povr\u0161no<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ne<\/p>\n<\/li>\n<\/ul>\n<p>    35 uporabnikov je glasovalo. 10 uporabnikov se je vzdr\u017ealo.<br \/>\n<br \/>Izvor: <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.4 - 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\/sl\/blog\/administrirovanie\/chto-zhe-takoe-gitops\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\/sl\/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\udd47Kaj je GitOps? | ProHoster","description":"Primer.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/chto-zhe-takoe-gitops","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/35941","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=35941"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/35941\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=35941"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=35941"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=35941"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}