{"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\/hu\/blog\/administrirovanie\/chto-zhe-takoe-gitops","title":{"rendered":"Mi az a GitOps?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Megjegyz\u00e9s ford\u00edt\u00e1s.<\/b>: A k\u00f6zelm\u00faltban k\u00f6zz\u00e9tett <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/456754\/\">anyag<\/a><\/noindex> a GitOps pull \u00e9s push m\u00f3dszereir\u0151l sz\u00f3l\u00f3 cikk\u00fcnk ut\u00e1n \u00e9rdekl\u0151d\u00e9st tapasztaltunk a modell ir\u00e1nt, azonban a magyar nyelv\u0171 publik\u00e1ci\u00f3k sz\u00e1ma err\u0151l a t\u00e9m\u00e1r\u00f3l meglehet\u0151sen alacsony (a Habr-on gyakorlatilag nincsenek). Ez\u00e9rt \u00f6r\u00f6mmel aj\u00e1nljuk figyelmetekbe egy m\u00e1sik cikk ford\u00edt\u00e1s\u00e1t \u2014 b\u00e1r m\u00e1r majdnem egy \u00e9vvel ezel\u0151tt k\u00e9sz\u00fclt! \u2014 a Weaveworks-t\u0151l, akinek az alap\u00edt\u00f3ja kital\u00e1lta a \u00abGitOps\u00bb kifejez\u00e9st. A sz\u00f6vegben a megk\u00f6zel\u00edt\u00e9s l\u00e9nyeg\u00e9t \u00e9s a m\u00e1r megl\u00e9v\u0151kt\u0151l val\u00f3 kulcsfontoss\u00e1g\u00fa elt\u00e9r\u00e9seket magyar\u00e1zz\u00e1k el.<\/i><\/p>\n<p>\nEgy \u00e9ve k\u00f6zz\u00e9tett\u00fck <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-operations-by-pull-request\">a GitOps bevezet\u0151 cikk\u00e9t.<\/a><\/noindex>Akkor arr\u00f3l besz\u00e9lt\u00fcnk, hogy a Weaveworks csapata elind\u00edtotta a Kubernetes alap\u00fa SaaS-j\u00e1t, \u00e9s kidolgozott egy aj\u00e1nl\u00e1sokat tartalmaz\u00f3 legjobb gyakorlatok k\u00e9szlet\u00e9t a cloud native k\u00f6rnyezetek telep\u00edt\u00e9s\u00e9hez, kezel\u00e9s\u00e9hez \u00e9s monitoroz\u00e1s\u00e1hoz.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>A cikk n\u00e9pszer\u0171 lett. M\u00e1sok elkezdtek besz\u00e9lni a GitOps-r\u00f3l, \u00faj eszk\u00f6z\u00f6ket kezdtek publik\u00e1lni a <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\">fejleszt\u00e9shez<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/storing-secure-sealed-secrets-using-gitops\">titkokhoz<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.alexellis.io\/introducing-openfaas-cloud\/\">funkci\u00f3k<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/jenkins.io\/blog\/2018\/03\/19\/introducing-jenkins-x\/\">folyamatos integr\u00e1ci\u00f3nak<\/a><\/noindex> stb. A weboldalunkon megjelentek <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/category\/gitops\/\">nagysz\u00e1m\u00fa<\/a><\/noindex> publik\u00e1ci\u00f3k \u00e9s felhaszn\u00e1l\u00e1si esetek a GitOps-szal kapcsolatban. De n\u00e9h\u00e1ny emberben m\u00e9g mindig megmaradtak a k\u00e9rd\u00e9sek. Miben k\u00fcl\u00f6nb\u00f6zik a modell a hagyom\u00e1nyos <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> \u00e9s a folyamatos sz\u00e1ll\u00edt\u00e1s (<noindex><a rel=\"nofollow\" href=\"https:\/\/puppet.com\/blog\/a-deployment-pipeline-for-infrastructure-a-devops-case-study-at-nbn\">continuous delivery<\/a><\/noindex>) t\u00e9m\u00e1it\u00f3l? K\u00f6telez\u0151-e Kubernetes haszn\u00e1lata?<\/p>\n<p>Hamarosan r\u00e1j\u00f6tt\u00fcnk, hogy sz\u00fcks\u00e9g van egy \u00faj le\u00edr\u00e1sra, amely a k\u00f6vetkez\u0151ket k\u00edn\u00e1lja:<\/p>\n<ol>\n<li> Sok p\u00e9ld\u00e1t \u00e9s t\u00f6rt\u00e9netet;<\/li>\n<li> Konkr\u00e9t defin\u00edci\u00f3 a GitOps-ra;<\/li>\n<li> \u00d6sszehasonl\u00edt\u00e1s a hagyom\u00e1nyos continuous delivery-vel.<\/li>\n<\/ol>\n<p>\nEbben a cikkben pr\u00f3b\u00e1ltuk lefedni ezeket a t\u00e9m\u00e1kat. Friss\u00edtett bevezet\u0151t tal\u00e1ltok a GitOps-r\u00f3l, \u00e9s a fejleszt\u0151k \u00e9s CI\/CD szempontj\u00e1b\u00f3l is \u00e1tfog\u00f3bb k\u00e9pet ny\u00fajtunk. F\u0151k\u00e9nt a Kubernetes-ra \u00f6sszpontos\u00edtunk, b\u00e1r a modell b\u0151v\u00edthet\u0151.<\/p>\n<h2>Ismerj\u00e9tek meg: GitOps<\/h2>\n<p>\nK\u00e9pzelj el egy Alis\u00e1t. \u0150 vezeti a Family Insurance c\u00e9get, amely eg\u00e9szs\u00e9g\u00fcgyi, aut\u00f3-, ingatlan- \u00e9s utaz\u00e1si biztos\u00edt\u00e1sokat k\u00edn\u00e1l olyan embereknek, akik t\u00fal elfoglaltak ahhoz, hogy maguk int\u00e9zz\u00e9k a szerz\u0151d\u00e9sek r\u00e9szleteit. \u00dczlete kezdetben egy mell\u00e9kprojekt volt, mikor Alisa bankban dolgozott adatkutat\u00f3k\u00e9nt. Egy nap r\u00e1j\u00f6tt, hogy a legmodernebb sz\u00e1m\u00edt\u00f3g\u00e9pes algoritmusok seg\u00edts\u00e9g\u00e9vel hat\u00e9konyabban elemezheti az adatokat \u00e9s form\u00e1lhatja meg a biztos\u00edt\u00e1si csomagokat. A befektet\u0151k finansz\u00edrozt\u00e1k a projektet, \u00e9s most a c\u00e9ge \u00e9vente t\u00f6bb mint 20 milli\u00f3 doll\u00e1rt hoz, \u00e9s gyors \u00fctemben n\u00f6vekszik. Jelenleg 180 ember dolgozik a c\u00e9gn\u00e9l k\u00fcl\u00f6nb\u00f6z\u0151 poz\u00edci\u00f3kban. K\u00f6z\u00f6tt\u00fck van egy technol\u00f3giai csapat, amely a weboldal, az adatb\u00e1zis karbantart\u00e1s\u00e1\u00e9rt \u00e9s az \u00fcgyf\u00e9ladatok elemz\u00e9s\u00e9\u00e9rt felel\u0151s. A 60 f\u0151s csapatot Bob vezeti, aki a c\u00e9g m\u0171szaki igazgat\u00f3ja.<\/p>\n<p>Bob csapata a felh\u0151ben telep\u00edti a production rendszereket. F\u0151 alkalmaz\u00e1saik a GKE-n m\u0171k\u00f6dnek, kihaszn\u00e1lva a Kubernetes el\u0151nyeit a Google Cloud-ban. Emellett k\u00fcl\u00f6nf\u00e9le adatkezel\u0151 \u00e9s elemz\u0151 eszk\u00f6z\u00f6ket is haszn\u00e1lnak.<\/p>\n<p>A Family Insurance nem tervezte, hogy kont\u00e9nereket haszn\u00e1l, de fellelkesedtek a Docker k\u00f6r\u00fcli izgalom miatt. Nem sokkal k\u00e9s\u0151bb a c\u00e9g szak\u00e9rt\u0151i felfedezt\u00e9k, hogy a GKE lehet\u0151v\u00e9 teszi a klaszterek k\u00f6nny\u0171 \u00e9s z\u00f6kken\u0151mentes telep\u00edt\u00e9s\u00e9t \u00faj funkci\u00f3k tesztel\u00e9s\u00e9re. Jenkins ker\u00fclt hozz\u00e1ad\u00e1sra a CI-hez, \u00e9s Quay a kont\u00e9nerregiszter megszervez\u00e9s\u00e9hez, \u00edrtak Jenkins-skripteket, amelyek new kont\u00e9nereket \u00e9s konfigur\u00e1ci\u00f3kat push-oltak a GKE-be.<\/p>\n<p>Eltelt egy kis id\u0151. Alice \u00e9s Bob csal\u00f3dottak lettek a v\u00e1lasztott megold\u00e1s teljes\u00edtm\u00e9ny\u00e9ben \u00e9s \u00fczleti hat\u00e1s\u00e1ban. A kont\u00e9nerek bevezet\u00e9se nem n\u00f6velte meg a teljes\u00edtm\u00e9nyt annyira, mint azt a csapat rem\u00e9lte. N\u00e9ha a deployment-ek megszakadtak, \u00e9s nem volt vil\u00e1gos, hogy a k\u00f3dv\u00e1ltoz\u00e1sok okozt\u00e1k-e ezt. Emellett neh\u00e9z volt nyomon k\u00f6vetni a konfigur\u00e1ci\u00f3k v\u00e1ltoz\u00e1sait. Gyakran \u00faj klaszter l\u00e9trehoz\u00e1s\u00e1ra volt sz\u00fcks\u00e9g, \u00e9s az alkalmaz\u00e1sokat \u00e1t kellett k\u00f6lt\u00f6ztetni, mivel ez volt a legegyszer\u0171bb m\u00f3dja annak, hogy megsz\u00fcntess\u00e9k azt a k\u00e1oszt, amiv\u00e9 a rendszer v\u00e1lt. Alice att\u00f3l tartott, hogy a helyzet rosszabbodik, ahogy az alkalmaz\u00e1s fejl\u0151dik (r\u00e1ad\u00e1sul egy \u00faj, g\u00e9pi tanul\u00e1son alapul\u00f3 projekt is k\u00f6rvonalaz\u00f3dott). Bob a munka nagy r\u00e9sz\u00e9t automatiz\u00e1lta, \u00e9s nem \u00e9rtette, mi\u00e9rt maradt a pipeline m\u00e9g mindig instabil, rosszul sk\u00e1l\u00e1zhat\u00f3 \u00e9s id\u0151nk\u00e9nt k\u00e9zi beavatkoz\u00e1st ig\u00e9nyelt.<\/p>\n<p><b>Ezut\u00e1n felfedezt\u00e9k a GitOps-ot. Ez a megold\u00e1s bizonyult \u00e9ppen annak, amire sz\u00fcks\u00e9g\u00fck volt a magabiztos el\u0151rehalad\u00e1shoz.<\/b><\/p>\n<p>Aliza \u00e9s Bob \u00e9vek \u00f3ta hallanak a Git-alap\u00fa munkafolyamatokr\u00f3l, a DevOps-r\u00f3l \u00e9s az infrastrukt\u00far\u00e1val kapcsolatos k\u00f3dr\u00f3l. A GitOps egyedis\u00e9ge abban rejlik, hogy sz\u00e1mos legjobb gyakorlatot \u2014 kategorikus \u00e9s normat\u00edv \u2014 hoz be ezen \u00f6tletek megval\u00f3s\u00edt\u00e1s\u00e1ba a Kubernetes kontextus\u00e1ban. Ez a t\u00e9ma <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/search?q=gitops&amp;src=typd\">t\u00f6bbsz\u00f6r is felmer\u00fclt<\/a><\/noindex>, t\u00f6bbek k\u00f6z\u00f6tt a <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-high-velocity-cicd-for-kubernetes\">Weaveworks blogj\u00e1ban.<\/a><\/noindex>.<\/p>\n<p>A Family Insurance d\u00f6nt\u00f6tt a GitOps bevezet\u00e9s\u00e9r\u0151l. Most a c\u00e9gnek van egy automatiz\u00e1lt \u00fczemeltet\u00e9si modellje, amely kompatibilis a Kubernetesszel, \u00e9s \u00f6tv\u00f6zi <i>a gyorsas\u00e1got<\/i> haszn\u00e1lata <i>a stabilit\u00e1ssal<\/i>, mivel \u0151k:<\/p>\n<ul>\n<li> felfedezt\u00e9k, hogy a csapat teljes\u00edtm\u00e9nye megdupl\u00e1z\u00f3dott, \u00e9s senki sem \u0151r\u00fcl meg k\u00f6zben;<\/li>\n<li> megszabadultak a szkriptek karbantart\u00e1s\u00e1t\u00f3l. Ehelyett most m\u00e1r \u00faj funkci\u00f3kra \u00f6sszpontos\u00edthatnak, \u00e9s fejleszthetik az m\u00e9rn\u00f6ki m\u00f3dszereket \u2014 p\u00e9ld\u00e1ul bevezethetik a kan\u00e1rita telep\u00edt\u00e9seket \u00e9s jav\u00edthatj\u00e1k a tesztel\u00e9st;<\/li>\n<li> jav\u00edtott\u00e1k a telep\u00edt\u00e9si folyamatot \u2014 most ritk\u00e1n hib\u00e1sodik meg;<\/li>\n<li> lehet\u0151s\u00e9get kaptak arra, hogy a deployment-eket r\u00e9szleges hib\u00e1k ut\u00e1n manu\u00e1lis beavatkoz\u00e1s n\u00e9lk\u00fcl \u00e1ll\u00edts\u00e1k helyre;<\/li>\n<li> nagyobb bizalmat nyertek a sz\u00e1ll\u00edt\u00e1si rendszerekben. Aliza \u00e9s Bob felfedezt\u00e9k, hogy a csapatot mikroszolg\u00e1ltat\u00e1sokra oszthatj\u00e1k, amelyek p\u00e1rhuzamosan m\u0171k\u00f6dnek;<i>\u00f3<\/i>minden csoport napi 30-50 v\u00e1ltoztat\u00e1st v\u00e9gezhet a projekten, \u00e9s \u00faj technik\u00e1kat pr\u00f3b\u00e1lhatnak ki.<\/li>\n<li> naponta 30-50 m\u00f3dos\u00edt\u00e1st v\u00e9gezhetnek a projekten a csapatok egy\u00fcttm\u0171k\u00f6d\u00e9s\u00e9vel, \u00e9s \u00faj technik\u00e1kat pr\u00f3b\u00e1lhatnak ki;<\/li>\n<li> k\u00f6nnyen bevonj\u00e1k a projektekbe az \u00faj fejleszt\u0151ket, akik m\u00e1r n\u00e9h\u00e1ny \u00f3r\u00e1n bel\u00fcl friss\u00edt\u00e9seket tudnak alkalmazni a produkci\u00f3n pull request-ek seg\u00edts\u00e9g\u00e9vel;<\/li>\n<li> k\u00f6nnyen \u00e1tesnek a SOC2 auditon <i>(a szolg\u00e1ltat\u00f3k adatkezel\u00e9s biztons\u00e1gos kezel\u00e9s\u00e9nek megfelel\u0151s\u00e9ge; b\u0151vebben olvashatsz p\u00e9ld\u00e1ul, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.imperva.com\/learn\/data-security\/soc-2-compliance\/\">itt<\/a><\/noindex> \u2014 a ford\u00edt\u00f3 megjegyz\u00e9se)<\/i>.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Mi t\u00f6rt\u00e9nt?<\/h3>\n<p>\nA GitOps k\u00e9t dolgot jelent:<\/p>\n<ol>\n<li> Kubernetes \u00e9s cloud native \u00fczemeltet\u00e9si modell. Ez a legjobb gyakorlatok \u00f6sszess\u00e9g\u00e9t k\u00edn\u00e1lja a tart\u00e1lyokba csomagolt klaszterek \u00e9s alkalmaz\u00e1sok telep\u00edt\u00e9s\u00e9re, kezel\u00e9s\u00e9re \u00e9s nyomon k\u00f6vet\u00e9s\u00e9re. Eleg\u00e1ns defin\u00edci\u00f3 egy <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/vitorsilva\/status\/999978906903080961\">di\u00e1n<\/a><\/noindex> t\u00f3l <noindex><a rel=\"nofollow\" href=\"https:\/\/2018.agilept.org\/speaker_luis_faceira.html\">Luis Faceira<\/a><\/noindex>:\n<\/li>\n<li> Az alkalmaz\u00e1sok kezel\u00e9s\u00e9re orient\u00e1lt fejleszt\u0151i k\u00f6rnyezet kialak\u00edt\u00e1s\u00e1nak \u00fatja. A Git munkafolyamatot alkalmazzuk mind az \u00fczemeltet\u00e9sben, mind a fejleszt\u00e9sben. Ne feledd, hogy nem csup\u00e1n a Git push-r\u00f3l van sz\u00f3, hanem az \u00f6sszes CI\/CD \u00e9s UI\/UX eszk\u00f6zk\u00e9szlet megszervez\u00e9s\u00e9r\u0151l.<\/li>\n<\/ol>\n<p><\/p>\n<h3>N\u00e9h\u00e1ny sz\u00f3 a Gitr\u0151l<\/h3>\n<p>\nHa nem ismeri a verzi\u00f3kezel\u0151 rendszereket \u00e9s a Git-alap\u00fa munkafolyamatot, javasoljuk, hogy tanulm\u00e1nyozza \u0151ket. Eleinte a branchen val\u00f3 munka \u00e9s a pull request-ek var\u00e1zslatnak t\u0171nhetnek, de az el\u0151ny\u00f6k meg\u00e9rik a befektetett energi\u00e1t. \u00cdme <noindex><a rel=\"nofollow\" href=\"https:\/\/codeburst.io\/trunk-based-development-vs-git-flow-a0212a6cae64\">j\u00f3 cikk<\/a><\/noindex> kezd\u00e9sk\u00e9nt.<\/p>\n<h2>Hogyan m\u0171k\u00f6dik a Kubernetes<\/h2>\n<p>\nT\u00f6rt\u00e9net\u00fcnkben Alice \u00e9s Bob a GitOps-hoz fordult, miut\u00e1n egy ideig dolgoztak a Kubernetes-szel. Val\u00f3ban, a GitOps szorosan kapcsol\u00f3dik a Kuberneteshez \u2014 ez egy \u00fczemeltet\u00e9si modell a Kubernetes-alap\u00fa infrastrukt\u00far\u00e1k \u00e9s alkalmaz\u00e1sok sz\u00e1m\u00e1ra.<\/p>\n<h3>Mit ad a Kubernetes a felhaszn\u00e1l\u00f3knak?<\/h3>\n<p>\n\u00cdme n\u00e9h\u00e1ny alapvet\u0151 k\u00e9pess\u00e9g:<\/p>\n<ol>\n<li> A Kubernetes modellben minden deklarat\u00edv form\u00e1ban le\u00edrhat\u00f3.<\/li>\n<li> A Kubernetes API-szerver ezt a deklar\u00e1ci\u00f3t bemeneti adatk\u00e9nt kezeli, majd folyamatosan pr\u00f3b\u00e1lja a klasztert a deklar\u00e1ci\u00f3ban le\u00edrt \u00e1llapothoz k\u00f6zel\u00edteni.<\/li>\n<li> A deklar\u00e1ci\u00f3k elegend\u0151ek a k\u00fcl\u00f6nb\u00f6z\u0151 munkaterhel\u00e9sek \u2014 'alkalmaz\u00e1sok' \u2014 le\u00edr\u00e1s\u00e1ra \u00e9s kezel\u00e9s\u00e9re.<\/li>\n<li> Ennek eredm\u00e9nyek\u00e9nt az alkalmaz\u00e1sban \u00e9s a klaszterben t\u00f6rt\u00e9n\u0151 v\u00e1ltoz\u00e1sok az al\u00e1bbiakt\u00f3l f\u00fcggenek:\n<ul>\n<li> a tart\u00e1lyk\u00e9pek v\u00e1ltoz\u00e1sait\u00f3l;<\/li>\n<li> a deklarat\u00edv specifik\u00e1ci\u00f3 v\u00e1ltoz\u00e1sait\u00f3l;<\/li>\n<li> a k\u00f6rnyezet hib\u00e1it\u00f3l \u2014 p\u00e9ld\u00e1ul a tart\u00e1lyok \u00f6sszeoml\u00e1s\u00e1t\u00f3l.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><\/p>\n<h3>A Kubernetes figyelemre m\u00e9lt\u00f3 konverg\u00e1l\u00f3 k\u00e9pess\u00e9gei<\/h3>\n<p>\nAmikor az adminisztr\u00e1tor m\u00f3dos\u00edtja a konfigur\u00e1ci\u00f3t, a Kubernetes orchestr\u00e1tor alkalmazni fogja azokat a klaszterre mindaddig, am\u00edg annak \u00e1llapota <i>megk\u00f6zel\u00edti az \u00faj konfigur\u00e1ci\u00f3t.<\/i>. Ez a modell b\u00e1rmilyen Kubernetes er\u0151forr\u00e1shoz m\u0171k\u00f6dik, \u00e9s a Custom Resource Definitions (CRD-k) seg\u00edts\u00e9g\u00e9vel b\u0151v\u00edthet\u0151. Ez\u00e9rt a Kubernetes deployment-ek a k\u00f6vetkez\u0151 csod\u00e1latos tulajdons\u00e1gokkal b\u00edrnak:<\/p>\n<ul>\n<li> <b>Automatiz\u00e1l\u00e1s<\/b>: a Kubernetes friss\u00edt\u00e9sek mechanizmust biztos\u00edtanak a v\u00e1ltoztat\u00e1sok alkalmaz\u00e1s\u00e1nak automatiz\u00e1l\u00e1s\u00e1ra, helyesen \u00e9s id\u0151ben.<\/li>\n<li> <b>Konvergencia<\/b>: a Kubernetes folyamatosan megpr\u00f3b\u00e1lja a friss\u00edt\u00e9seket, am\u00edg sikeresen v\u00e9grehajtja azokat.<\/li>\n<li> <b>Idempotencia<\/b>: a konvergencia ism\u00e9telt alkalmaz\u00e1sa azonos eredm\u00e9nyhez vezet.<\/li>\n<li> <b>D\u00f6nt\u00e9sk\u00e9pes<\/b>: elegend\u0151 er\u0151forr\u00e1s mellett a friss\u00edtett klaszter \u00e1llapota kiz\u00e1r\u00f3lag a k\u00edv\u00e1nt \u00e1llapott\u00f3l f\u00fcgg.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Hogyan m\u0171k\u00f6dik a GitOps<\/h2>\n<p>\nEl\u00e9g sokat megtudtunk a Kubernetesr\u0151l ahhoz, hogy elmagyar\u00e1zzuk a GitOps m\u0171k\u00f6d\u00e9s\u00e9nek alapelveit.<\/p>\n<p>T\u00e9rj\u00fcnk vissza a Family Insurance csapatokhoz, amelyek mikroszolg\u00e1ltat\u00e1sokkal foglalkoznak. Mivel \u00e1ltal\u00e1ban foglalkoznak? N\u00e9zze meg az al\u00e1bbi list\u00e1t (ha n\u00e9h\u00e1ny pont furcs\u00e1nak vagy ismeretlennek t\u0171nik \u2014 k\u00e9rj\u00fck, v\u00e1rjon a kritik\u00e1val, \u00e9s maradjon vel\u00fcnk). Ezek csup\u00e1n p\u00e9ld\u00e1k a Jenkins alap\u00fa munkafolyamatokra. Sz\u00e1mos m\u00e1s folyamat is l\u00e9tezik m\u00e1s eszk\u00f6z\u00f6kkel.<\/p>\n<p>A l\u00e9nyeg \u2014 l\u00e1tjuk, hogy minden friss\u00edt\u00e9s v\u00e9g\u00fcl a konfigur\u00e1ci\u00f3s f\u00e1jlok \u00e9s a Git-repozit\u00f3riumok m\u00f3dos\u00edt\u00e1s\u00e1val z\u00e1rul. Ezek a Git-ben v\u00e9grehajtott v\u00e1ltoz\u00e1sok n\u00f6velik a \u201eGitOps oper\u00e1tor\u201d szerepet, ami friss\u00edti a klasztert:<\/p>\n<p>1. Munkafolyamat: \u201e<i>Jenkins \u00e9p\u00edt\u00e9s \u2014 master \u00e1ga<\/i>\u00bb.<br \/>\nFeladatlista:<\/p>\n<ul>\n<li> A Jenkins push-olja a c\u00edmk\u00e9zett k\u00e9peket a Quay-be;<\/li>\n<li> A Jenkins push-olja a konfigur\u00e1ci\u00f3t \u00e9s a Helm-diagramokat a master t\u00e1rol\u00f3 t\u00e1rol\u00f3j\u00e1ba;<\/li>\n<li> A felh\u0151funkci\u00f3 \u00e1tm\u00e1solja a konfigur\u00e1ci\u00f3t \u00e9s a diagramokat a master t\u00e1rol\u00f3b\u00f3l a Git master-repozit\u00f3riumba;<\/li>\n<li> A GitOps oper\u00e1tor friss\u00edti a klasztert.<\/li>\n<\/ul>\n<p>\n2. <i>Jenkins \u00e9p\u00edt\u00e9s \u2014 release vagy hotfix \u00e1g<\/i>:<\/p>\n<ul>\n<li> A Jenkins push-olja a c\u00edmke n\u00e9lk\u00fcli k\u00e9peket a Quay-be;<\/li>\n<li> A Jenkins push-olja a konfigur\u00e1ci\u00f3t \u00e9s a Helm-diagramokat a staging t\u00e1rol\u00f3 t\u00e1rol\u00f3j\u00e1ba;<\/li>\n<li> A felh\u0151funkci\u00f3 \u00e1tm\u00e1solja a konfigur\u00e1ci\u00f3t \u00e9s a diagramokat a staging t\u00e1rol\u00f3b\u00f3l a Git staging-repozit\u00f3riumba;<\/li>\n<li> A GitOps oper\u00e1tor friss\u00edti a klasztert.<\/li>\n<\/ul>\n<p>\n3. <i>Jenkins \u00e9p\u00edt\u00e9s \u2014 develop vagy feature \u00e1g<\/i>:<\/p>\n<ul>\n<li> A Jenkins push-olja a c\u00edmke n\u00e9lk\u00fcli k\u00e9peket a Quay-be;<\/li>\n<li> A Jenkins push-olja a konfigur\u00e1ci\u00f3t \u00e9s a Helm-diagramokat a develop t\u00e1rol\u00f3 t\u00e1rol\u00f3j\u00e1ba;<\/li>\n<li> A felh\u0151funkci\u00f3 \u00e1tm\u00e1solja a konfigur\u00e1ci\u00f3t \u00e9s a diagramokat a develop t\u00e1rol\u00f3b\u00f3l a Git develop-repozit\u00f3riumba;<\/li>\n<li>A GitOps oper\u00e1tor friss\u00edti a klasztert.<\/li>\n<\/ul>\n<p>\n4. <i>\u00daj kliens hozz\u00e1ad\u00e1sa<\/i>:<\/p>\n<ul>\n<li> A menedzser vagy adminisztr\u00e1tor (LCM\/ops) elind\u00edtja a Gradle-t az els\u0151 telep\u00edt\u00e9shez \u00e9s a h\u00e1l\u00f3zati terhel\u00e9seloszt\u00f3k (NLB) be\u00e1ll\u00edt\u00e1s\u00e1hoz;<\/li>\n<li> Az LCM\/ops \u00faj konfigur\u00e1ci\u00f3t commit-ol a deployment friss\u00edt\u00e9s\u00e9nek el\u0151k\u00e9sz\u00edt\u00e9s\u00e9re;<\/li>\n<li> A GitOps oper\u00e1tor friss\u00edti a klasztert.<\/li>\n<\/ul>\n<p><\/p>\n<h3>A GitOps r\u00f6vid le\u00edr\u00e1sa<\/h3>\n<p><\/p>\n<ol>\n<li> \u00cdrja le a rendszer k\u00edv\u00e1nt \u00e1llapot\u00e1t deklarat\u00edv specifik\u00e1ci\u00f3k haszn\u00e1lat\u00e1val minden k\u00f6rnyezetre (t\u00f6rt\u00e9net\u00fcnkben Bob csapata a Git-ben hat\u00e1rozza meg a rendszer teljes konfigur\u00e1ci\u00f3j\u00e1t).\n<ul>\n<li> A Git-t\u00e1rh\u00e1z az egyetlen val\u00f3di forr\u00e1s a rendszer k\u00edv\u00e1nt \u00e1llapot\u00e1r\u00f3l.<\/li>\n<li> Minden v\u00e1ltoztat\u00e1s a k\u00edv\u00e1nt \u00e1llapotra a Git-be t\u00f6rt\u00e9n\u0151 elk\u00f6telez\u00e9sek \u00fatj\u00e1n t\u00f6rt\u00e9nik.<\/li>\n<li> Minden k\u00edv\u00e1nt param\u00e9ter a klaszterben is megfigyelhet\u0151. \u00cdgy meghat\u00e1rozhatjuk, hogy a k\u00edv\u00e1nt \u00e9s a megfigyelt \u00e1llapotok egybeesnek (konverg\u00e1lnak, <i>converge<\/i>) vagy elt\u00e9rnek (diverg\u00e1lnak, <i>diverge<\/i>) a k\u00edv\u00e1nt \u00e9s a megfigyelt \u00e1llapotok.<\/li>\n<\/ul>\n<\/li>\n<li> Ha a k\u00edv\u00e1nt \u00e9s a megfigyelt \u00e1llapotok elt\u00e9rnek, akkor:\n<ul>\n<li> Van egy konvergencia mechanizmus, amely el\u0151bb-ut\u00f3bb automatikusan \u00f6sszehangolja a c\u00e9lt \u00e9s a megfigyelt \u00e1llapotot. Ezt a klaszteren bel\u00fcl a Kubernetes v\u00e9gzi.<\/li>\n<li> A folyamat azonnal elindul a \u201ev\u00e1ltoz\u00e1s elk\u00f6telezve\u201d \u00e9rtes\u00edt\u00e9ssel.<\/li>\n<li> Egy bizonyos konfigur\u00e1lhat\u00f3 id\u0151k\u00f6z\u00f6n bel\u00fcl lehet k\u00fcldeni egy \u201ek\u00fcl\u00f6nbs\u00e9g\u201d \u00e9rtes\u00edt\u00e9st, ha az \u00e1llapotok elt\u00e9rnek.<\/li>\n<\/ul>\n<\/li>\n<li> \u00cdgy minden Git-ben v\u00e9gzett elk\u00f6telez\u00e9s ellen\u0151rizhet\u0151 \u00e9s idempotens friss\u00edt\u00e9seket okoz a klaszterben.\n<ul>\n<li>A visszavon\u00e1s egy kor\u00e1bbi k\u00edv\u00e1nt \u00e1llapothoz val\u00f3 konvergencia.<\/li>\n<\/ul>\n<\/li>\n<li> A konvergencia v\u00e9gleges. A k\u00f6vetkez\u0151k tan\u00faskodnak r\u00f3la:\n<ul>\n<li> Nincs \u201ek\u00fcl\u00f6nbs\u00e9g\u201d \u00e9rtes\u00edt\u00e9s egy bizonyos id\u0151tartamon bel\u00fcl.<\/li>\n<li> A \u201ekonverg\u00e1lt\u201d \u00e9rtes\u00edt\u00e9s (pl. webhook, Git writeback esem\u00e9ny).<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><\/p>\n<h3>Mi a divergencia?<\/h3>\n<p>\nIsm\u00e9telj\u00fck meg: <i>minden k\u00edv\u00e1nt tulajdons\u00e1gnak meg kell figyelhet\u0151nek lennie a klaszterben<\/i>.<\/p>\n<p>N\u00e9h\u00e1ny p\u00e9lda a divergi\u00e1l\u00e1sra:<\/p>\n<ul>\n<li> V\u00e1ltoz\u00e1s a konfigur\u00e1ci\u00f3s f\u00e1jlban a Git \u00e1gak egyes\u00edt\u00e9se miatt.<\/li>\n<li> V\u00e1ltoz\u00e1s a konfigur\u00e1ci\u00f3s f\u00e1jlban a Git-be v\u00e9gzett elk\u00f6telez\u00e9s miatt, amelyet egy GUI-\u00fcgyf\u00e9l hajtott v\u00e9gre.<\/li>\n<li> T\u00f6bbsz\u00f6ri v\u00e1ltoz\u00e1s a k\u00edv\u00e1nt \u00e1llapotban a Git PR miatt, amely ut\u00e1n kont\u00e9nerk\u00e9p \u00e9p\u00fcl \u00e9s a konfigur\u00e1ci\u00f3 m\u00f3dosul.<\/li>\n<li> A klaszter \u00e1llapot\u00e1nak megv\u00e1ltoz\u00e1sa hiba, er\u0151forr\u00e1s-\u00fctk\u00f6z\u00e9s miatt, amely \u201erossz viselked\u00e9shez\u201d vezet, vagy egyszer\u0171en v\u00e9letlen elt\u00e9r\u00e9s miatt az eredeti \u00e1llapott\u00f3l.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Mi a konvergencia mechanizmusa?<\/h3>\n<p>\nN\u00e9h\u00e1ny p\u00e9lda:<\/p>\n<ul>\n<li> A kont\u00e9nerek \u00e9s klaszterek eset\u00e9ben a konvergencia mechanizmust a Kubernetes biztos\u00edtja.<\/li>\n<li> Ugyanezt a mechanizmust haszn\u00e1lhatjuk alkalmaz\u00e1sok \u00e9s Kubernetes alap\u00fa fel\u00e9p\u00edtm\u00e9nyek (pl. Istio \u00e9s Kubeflow) kezel\u00e9s\u00e9re.<\/li>\n<li> A mechanizmus a Kubernetes, image repositoryk \u00e9s Git k\u00f6z\u00f6tti munkafolyamat-ir\u00e1ny\u00edt\u00e1sra szolg\u00e1l. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/weaveworks\/flux\">A Weave Flux GitOps-operator<\/a><\/noindex>, amely r\u00e9sze <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.weave.works\/\">Weave Cloud<\/a><\/noindex>.<\/li>\n<li> Alapvet\u0151 g\u00e9pekn\u00e9l a konvergencia mechanizmus\u00e1nak deklarat\u00edvnak \u00e9s auton\u00f3mnak kell lennie. Tapasztalataink szerint <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> a legjobban megfelel ennek a defin\u00edci\u00f3nak, azonban m\u00e9gis emberi ellen\u0151rz\u00e9st ig\u00e9nyel. E tekintetben a GitOps kiterjeszti az Infrastructure as Code hagyom\u00e1nyait.<\/li>\n<\/ul>\n<p>\nA GitOps a Git-et egy nagyszer\u0171 Kubernetes konvergencia mechanizmussal \u00f6tv\u00f6zi, \u00e9s egy modellt k\u00edn\u00e1l a m\u0171k\u00f6dtet\u00e9shez.<\/p>\n<p>A GitOps lehet\u0151v\u00e9 teszi sz\u00e1munkra, hogy kijelents\u00fck: <i>az automatiz\u00e1l\u00e1s \u00e9s ellen\u0151rz\u00e9s csak azokat a rendszereket \u00e9rinti, amelyeket le lehet \u00edrni \u00e9s figyelni lehet<\/i>.<\/p>\n<h3>A GitOps a teljes cloud native stack-re tervezett (p\u00e9ld\u00e1ul Terraform \u00e9s t\u00e1rsai)<\/h3>\n<p>\nA GitOps nemcsak Kubernetes. Arra t\u00f6reksz\u00fcnk, hogy az eg\u00e9sz rendszer deklarat\u00edv m\u00f3don legyen kezelve \u00e9s konvergenci\u00e1t alkalmazzon. Az eg\u00e9sz rendszer alatt azokat a k\u00f6rnyezeteket \u00e9rtj\u00fck, amelyek Kubernetes-tel m\u0171k\u00f6dnek \u2014 p\u00e9ld\u00e1ul a \"dev cluster 1\", \"production\" \u00e9s \u00edgy tov\u00e1bb. Minden k\u00f6rnyezet g\u00e9peket, klasztereket, alkalmaz\u00e1sokat, valamint k\u00fcls\u0151 szolg\u00e1ltat\u00e1sok interf\u00e9szeit tartalmaz, amelyek adatokat, figyel\u00e9st stb. biztos\u00edtanak.<\/p>\n<p>\u00c9szreveheti, mennyire fontos a Terraform a bootstrapping probl\u00e9m\u00e1j\u00e1ban. A Kubernetes-nek valahol telep\u00edtve kell lennie, \u00e9s a Terraform haszn\u00e1lata azt jelenti, hogy ugyanazokat a GitOps munkafolyamatokat alkalmazhatjuk a Kubernetes \u00e9s az alkalmaz\u00e1sok alapj\u00e1t k\u00e9pez\u0151 vez\u00e9rl\u0151r\u00e9teg l\u00e9trehoz\u00e1s\u00e1hoz. Ez hasznos bevett gyakorlat.<\/p>\n<p>Nagy figyelmet ford\u00edtanak a GitOps koncepci\u00f3k Kubernetes feletti r\u00e9tegekre val\u00f3 alkalmaz\u00e1s\u00e1ra. Jelenleg l\u00e9teznek GitOps t\u00edpus\u00fa megold\u00e1sok az Istio, Helm, Ksonnet, OpenFaaS \u00e9s Kubeflow ter\u00fclet\u00e9n, valamint p\u00e9ld\u00e1ul a Pulumi sz\u00e1m\u00e1ra, amelyek r\u00e9teget hoznak l\u00e9tre cloud native alkalmaz\u00e1sok fejleszt\u00e9s\u00e9hez.<\/p>\n<h2>Kubernetes CI\/CD: A GitOps \u00f6sszehasonl\u00edt\u00e1sa m\u00e1s megk\u00f6zel\u00edt\u00e9sekkel<\/h2>\n<p>\nMint eml\u00edtett\u00fck, a GitOps k\u00e9t dolog:<\/p>\n<ol>\n<li> A fent eml\u00edtett m\u0171k\u00f6dtet\u00e9si modell Kubernetes \u00e9s cloud native sz\u00e1m\u00e1ra.<\/li>\n<li> Az alkalmaz\u00e1sok kezel\u00e9s\u00e9re szolg\u00e1l\u00f3, fejleszt\u0151k \u00e1ltal orient\u00e1lt k\u00f6rnyezet megszervez\u00e9s\u00e9nek \u00fatja.<\/li>\n<\/ol>\n<p>\nSokak sz\u00e1m\u00e1ra a GitOps els\u0151sorban a Git push-alap\u00fa munkafolyamatokr\u00f3l sz\u00f3l. Mi is kedvelj\u00fck ezt. De nem minden: n\u00e9zz\u00fck most meg a CI\/CD pipeline-okat.<\/p>\n<h3>A GitOps biztos\u00edtja a folyamatos telep\u00edt\u00e9st (CD) Kubernetes alatt<\/h3>\n<p>\nA GitOps folyamatos telep\u00edt\u00e9si mechanizmust biztos\u00edt, amely megsz\u00fcnteti a k\u00fcl\u00f6n \"telep\u00edt\u00e9si ir\u00e1ny\u00edt\u00e1si rendszerek\" sz\u00fcks\u00e9gess\u00e9g\u00e9t. Az eg\u00e9sz munk\u00e1t a Kubernetes v\u00e9gzi el helyett\u00fcnk.<\/p>\n<ul>\n<li> Az alkalmaz\u00e1s friss\u00edt\u00e9se friss\u00edt\u00e9st ig\u00e9nyel a Git-ben. Ez egy tranzakcion\u00e1lis friss\u00edt\u00e9s a k\u00edv\u00e1nt \u00e1llapotig. A 'telep\u00edt\u00e9s' ezut\u00e1n a Kubernetes bels\u0151 klaszter\u00e9ben t\u00f6rt\u00e9nik a friss\u00edtett le\u00edr\u00e1s alapj\u00e1n.<\/li>\n<li> A Kubernetes m\u0171k\u00f6d\u00e9s\u00e9nek saj\u00e1toss\u00e1gai miatt ezek a friss\u00edt\u00e9sek konvergensek. Ez biztos\u00edtja a folyamatos telep\u00edt\u00e9s mechanizmus\u00e1t, amelyben minden friss\u00edt\u00e9s atom\u00e1ris.<\/li>\n<li> Megjegyz\u00e9s: <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.weave.works\/\">Weave Cloud<\/a><\/noindex> aj\u00e1nlja a GitOps oper\u00e1tort, amely integr\u00e1lja a Git-et \u00e9s a Kubernetes-t, lehet\u0151v\u00e9 t\u00e9ve a folyamatos telep\u00edt\u00e9st a k\u00edv\u00e1nt \u00e9s a klaszter aktu\u00e1lis \u00e1llapot\u00e1nak egyeztet\u00e9s\u00e9vel.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Kubectl \u00e9s szkriptek n\u00e9lk\u00fcl<\/h3>\n<p>\nKer\u00fclni kell a Kubectl haszn\u00e1lat\u00e1t a klaszter friss\u00edt\u00e9s\u00e9re, k\u00fcl\u00f6n\u00f6sen a kubectl parancsok csoportos\u00edt\u00e1s\u00e1hoz k\u00e9sz\u00fclt szkriptek alkalmaz\u00e1s\u00e1t. Ehelyett a GitOps folyamat seg\u00edts\u00e9g\u00e9vel a felhaszn\u00e1l\u00f3 a Git-en kereszt\u00fcl friss\u00edtheti a Kubernetes klaszter\u00e9t.<\/p>\n<p>Az el\u0151ny\u00f6k k\u00f6z\u00e9 tartozik:<\/p>\n<ol>\n<li> <b>Helyess\u00e9g<\/b>. A friss\u00edt\u00e9si csoportokat alkalmazni, konverg\u00e1lni \u00e9s v\u00e9g\u00fcl \u00e9rv\u00e9nyes\u00edteni lehet, ami k\u00f6zelebb visz minket az atom\u00e1ris implement\u00e1l\u00e1s c\u00e9lj\u00e1hoz. Ezzel szemben a szkriptek haszn\u00e1lata nem garant\u00e1lja a konvergenci\u00e1t (err\u0151l al\u00e1bb r\u00e9szletesebben).<\/li>\n<li> <b>Biztons\u00e1g<\/b>. <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/kelseyhightower\/status\/939003832805179392?lang=en\">Id\u00e9zve<\/a><\/noindex> Kelsey Hightower: \"Korl\u00e1tozza a Kubernetes klaszterhez val\u00f3 hozz\u00e1f\u00e9r\u00e9st az automatiz\u00e1l\u00f3 eszk\u00f6z\u00f6k \u00e9s az adminisztr\u00e1torok sz\u00e1m\u00e1ra, akiknek feladatuk a hibakeres\u00e9s vagy a m\u0171k\u00f6d\u00e9s fenntart\u00e1sa.\" L\u00e1sd m\u00e9g <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-compliance-and-secure-cicd\">a publik\u00e1ci\u00f3mat<\/a><\/noindex> a biztons\u00e1gr\u00f3l \u00e9s a m\u0171szaki k\u00f6vetelm\u00e9nyeknek val\u00f3 megfelel\u00e9sr\u0151l, valamint <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@vesirin\/how-i-gained-commit-access-to-homebrew-in-30-minutes-2ae314df03ab\">a Homebrew felt\u00f6r\u00e9s\u00e9r\u0151l sz\u00f3l\u00f3 cikket<\/a><\/noindex> az adatok ellop\u00e1s\u00e1val egy hanyagul meg\u00edrt Jenkins-szkriptb\u0151l.<\/li>\n<li> <b>Felhaszn\u00e1l\u00f3i \u00e9lm\u00e9ny<\/b>. A Kubectl felt\u00e1rja a Kubernetes objektummodell mechanik\u00e1j\u00e1t, amely meglehet\u0151sen bonyolult. Ide\u00e1lisan a felhaszn\u00e1l\u00f3knak magasabb absztrakci\u00f3s szinten kellene interakci\u00f3ba l\u00e9pni\u00fck a rendszerrel. Itt ism\u00e9t Kelsey-re hivatkozn\u00e9k, \u00e9s javaslom, hogy n\u00e9zze meg <noindex><a rel=\"nofollow\" href=\"http:\/\/superuser.openstack.org\/articles\/kubernetes-boring\/\">ezt az \u00f6sszefoglal\u00f3t<\/a><\/noindex>.<\/li>\n<\/ol>\n<p><\/p>\n<h3>A CI \u00e9s CD k\u00f6z\u00f6tti k\u00fcl\u00f6nbs\u00e9g<\/h3>\n<p>\nA GitOps jav\u00edtja a megl\u00e9v\u0151 CI\/CD modelleket.<\/p>\n<p>A modern CI szerver egy orchestr\u00e1l\u00f3 eszk\u00f6z. K\u00fcl\u00f6n\u00f6sen CI pipeline-ok orchestr\u00e1l\u00e1s\u00e1ra szolg\u00e1l. Ezekbe beletartozik a build, tesztel\u00e9s, trunkra val\u00f3 \u00f6sszevon\u00e1s stb. A CI szerverek automatiz\u00e1lj\u00e1k a bonyolult, t\u00f6bbl\u00e9pcs\u0151s pipeline-ok kezel\u00e9s\u00e9t. Az egy gyakori cs\u00e1b\u00edt\u00e1s, hogy scriptet k\u00e9sz\u00edts\u00fcnk a Kubernetes friss\u00edt\u00e9sek halmaz\u00e1hoz \u00e9s v\u00e9grehajtsuk, mint a v\u00e1ltoz\u00e1sok push-\u00e1nak elem\u00e9t a klaszterbe. Val\u00f3ban, sok szakember ezt a gyakorlatot alkalmazza. Azonban ez nem optim\u00e1lis, \u00e9s itt van, mi\u00e9rt.<\/p>\n<p>A CI-t a trunk friss\u00edt\u00e9seihez kell haszn\u00e1lni, a Kubernetes klaszter pedig ennek alapj\u00e1n fogja mag\u00e1t m\u00f3dos\u00edtani a bels\u0151 CD ir\u00e1ny\u00edt\u00e1s\u00e1hoz. Ezt nevezz\u00fck <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/gitops-compliance-and-secure-cicd\">pull-modelleknek a CD-hoz<\/a><\/noindex>, szemben a CI push-modellekkel. A CD r\u00e9sze a <i>runtime-orchestration-nak.<\/i>.<\/p>\n<h3>Mi\u00e9rt ne folytassa a CI-szerver a CD-t k\u00f6zvetlen friss\u00edt\u00e9sekkel Kubernetesbe?<\/h3>\n<p>\n<i>Ne haszn\u00e1ljon CI-szervert k\u00f6zvetlen friss\u00edt\u00e9sek Kubernetesbe val\u00f3 orchestr\u00e1l\u00e1s\u00e1ra CI-feladatok \u00f6sszess\u00e9gek\u00e9nt. Ez egy anti-minta, amir\u0151l mi m\u00e1r <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/kubernetes-anti-patterns-let-s-do-gitops-not-ciops\">kor\u00e1bban besz\u00e9lt\u00fcnk<\/a><\/noindex> a blogunkban.<\/i><\/p>\n<p>T\u00e9rj\u00fcnk vissza Alice-hoz \u00e9s Bobhoz.<\/p>\n<p>Milyen probl\u00e9m\u00e1kkal szembes\u00fcltek? Bob CI-szervere alkalmazza a v\u00e1ltoztat\u00e1sokat a klaszterre, de ha k\u00f6zben le\u00e1ll, Bob nem fogja tudni, milyen \u00e1llapotban van a klaszter (vagy milyen \u00e1llapotban kellene lennie), \u00e9s hogyan jav\u00edtsa azt. Ugyanez igaz akkor is, ha sikeres.<\/p>\n<p>Tegy\u00fck fel, hogy Bob csapata elk\u00e9sz\u00edtette az \u00faj k\u00e9pet, majd friss\u00edtette a deploymentjeit, hogy telep\u00edtse a k\u00e9pet (mindezt a CI pipeline-b\u00f3l).<\/p>\n<p>Ha az image rendben \u00e9p\u00fcl meg, de a pipeline le\u00e1ll, a csapatnak ki kell der\u00edtenie:<\/p>\n<ul>\n<li> Telep\u00fclt a friss\u00edt\u00e9s?<\/li>\n<li> Futtatjuk az \u00faj buildet? Ez indokolatlan mell\u00e9khat\u00e1sokhoz vezet, amelyek lehet\u0151s\u00e9g\u00e9t adj\u00e1k k\u00e9t azonos, v\u00e1ltozatlan image egyidej\u0171 beszerz\u00e9s\u00e9nek? <\/li>\n<li> V\u00e1rjunk meg egy \u00fajabb friss\u00edt\u00e9st, miel\u0151tt ind\u00edtan\u00e1nk a buildet?<\/li>\n<li> Mi pontosan ment rosszul? Mely l\u00e9p\u00e9seket kell megism\u00e9telni (\u00e9s melyeket lehet biztons\u00e1gosan megism\u00e9telni)?<\/li>\n<\/ul>\n<p>\n<i>A Git-alap\u00fa munkafolyamat szervez\u00e9se nem garant\u00e1lja, hogy Bob csapata ne \u00fctk\u00f6zz\u00f6n ezekbe a probl\u00e9m\u00e1kba. M\u00e9g mindig t\u00e9vedhetnek a commit push-al, a c\u00edmk\u00e9vel vagy b\u00e1rmely m\u00e1s param\u00e9terrel; azonban ez a megk\u00f6zel\u00edt\u00e9s m\u00e9gis sokkal k\u00f6zelebb \u00e1ll a kifejezett mindent vagy semmit elvhez.<\/i><\/p>\n<p>\u00d6sszegz\u00e9s\u00fcl, itt van, mi\u00e9rt nem kellene a CI-szervernek CD-vel foglalkoznia:<\/p>\n<ul>\n<li> A friss\u00edt\u0151 script-ek nem mindig determinisztikusak; k\u00f6nny\u0171 hib\u00e1kat elk\u00f6vetni benn\u00fck.<\/li>\n<li> A CI-szerverek nem konverg\u00e1lnak a deklarat\u00edv klasztermodellhez.<\/li>\n<li> Neh\u00e9z garant\u00e1lni az idempotenci\u00e1t. A felhaszn\u00e1l\u00f3knak m\u00e9ly szemin\u00e1riumokkal kell foglalkozniuk a rendszer m\u00e9lyebb jelent\u00e9s\u00e9ben.<\/li>\n<li> Neh\u00e9z vissza\u00e1llni egy r\u00e9szleges hiba ut\u00e1n.<\/li>\n<\/ul>\n<p>\n<i>Megjegyz\u00e9s a Helmr\u0151l: Ha a Helm haszn\u00e1lat\u00e1t tervezi, javasoljuk, hogy kombin\u00e1lja egy GitOps operatorral, mint p\u00e9ld\u00e1ul <noindex><a rel=\"nofollow\" href=\"https:\/\/www.weave.works\/blog\/managing-helm-releases-the-gitops-way\">Flux-Helm<\/a><\/noindex>. Ez seg\u00edt a konvergencia biztos\u00edt\u00e1s\u00e1ban. A Helm \u00f6n\u00e1ll\u00f3an nem determinisztikus, sem atomikus.<\/i><\/p>\n<h2>A GitOps a legjobb m\u00f3dja a Kubernetes folyamatos sz\u00e1ll\u00edt\u00e1s\u00e1nak megval\u00f3s\u00edt\u00e1s\u00e1ra<\/h2>\n<p>\nAlice \u00e9s Bob csapata bevezeti a GitOps-t, \u00e9s felfedezi, hogy sokkal egyszer\u0171bb szoftverterm\u00e9kekkel dolgozni, fenntartani a magas teljes\u00edtm\u00e9nyt \u00e9s stabilit\u00e1st. Fejezz\u00fck be ezt a cikket olyan illusztr\u00e1ci\u00f3kkal, amelyek bemutatj\u00e1k, hogyan n\u00e9z ki az \u00faj megk\u00f6zel\u00edt\u00e9s\u00fck. Vegy\u00fck figyelembe, hogy f\u0151k\u00e9nt alkalmaz\u00e1sokr\u00f3l \u00e9s szolg\u00e1ltat\u00e1sokr\u00f3l besz\u00e9l\u00fcnk, azonban a GitOps haszn\u00e1lhat\u00f3 az eg\u00e9sz platform kezel\u00e9s\u00e9re is.<\/p>\n<h3>Kubernetes \u00fczemeltet\u00e9si modell<\/h3>\n<p>\nN\u00e9zd meg az al\u00e1bbi diagramot. Ez a Git-ot \u00e9s a kont\u00e9nerk\u00e9pek t\u00e1rol\u00f3j\u00e1t k\u00f6z\u00f6s er\u0151forr\u00e1sk\u00e9nt \u00e1br\u00e1zolja k\u00e9t szervezett \u00e9letciklus sz\u00e1m\u00e1ra:<\/p>\n<ul>\n<li> A folyamatos integr\u00e1ci\u00f3s pipeline, amely olvassa \u00e9s \u00edrja a f\u00e1jlokat a Git-be, \u00e9s friss\u00edtheti a kont\u00e9nerk\u00e9p t\u00e1rol\u00f3t.<\/li>\n<li> A Runtime GitOps pipeline, amely \u00f6tv\u00f6zi a telep\u00edt\u00e9st a kezel\u00e9ssel \u00e9s megfigyel\u00e9ssel. Ez is olvassa \u00e9s \u00edrja a f\u00e1jlokat a Git-be, \u00e9s k\u00e9pes kont\u00e9nerk\u00e9peket bet\u00f6lteni.<\/li>\n<\/ul>\n<h3>Mik a legf\u0151bb k\u00f6vetkeztet\u00e9sek?<\/h3>\n<p><\/p>\n<ol>\n<li> <b>Probl\u00e9m\u00e1k sz\u00e9tv\u00e1laszt\u00e1sa<\/b>: Figyeld meg, hogy mindk\u00e9t pipeline adatokat tud cser\u00e9lni, csak a Git vagy a k\u00e9pt\u00e1rol\u00f3 friss\u00edt\u00e9s\u00e9vel. M\u00e1s szavakkal, van egy t\u0171zfal a CI \u00e9s a runtime k\u00f6rnyezet k\u00f6z\u00f6tt. Ezt nevezz\u00fck \u201eimmutable firewall\u201d-nak <i>(immutability firewall)<\/i>, mivel minden t\u00e1rol\u00f3 friss\u00edt\u00e9se \u00faj verzi\u00f3kat hoz l\u00e9tre. Tov\u00e1bbi inform\u00e1ci\u00f3k\u00e9rt a t\u00e9m\u00e1ban k\u00e9rlek n\u00e9zd meg a 72-87. di\u00e1kat. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.slideshare.net\/weaveworks\/continuous-lifecycle-london-2018-event-keynote-97418556\">prezent\u00e1ci\u00f3b\u00f3l sz\u00e1rmaznak.<\/a><\/noindex>.<\/li>\n<li> <b>B\u00e1rmilyen CI- \u00e9s Git-szerver haszn\u00e1lhat\u00f3<\/b>: A GitOps b\u00e1rmilyen komponenssel m\u0171k\u00f6dik. Folytathatod kedvenc CI- \u00e9s Git-szervereid, k\u00e9pt\u00e1rol\u00f3k \u00e9s tesztk\u00e9szletek haszn\u00e1lat\u00e1t. A piac szinte \u00f6sszes t\u00f6bbi folyamatos sz\u00e1ll\u00edt\u00e1si eszk\u00f6ze saj\u00e1t CI \/ Git-szervert vagy k\u00e9pt\u00e1rol\u00f3t ig\u00e9nyel. Ez korl\u00e1toz\u00f3 t\u00e9nyez\u0151v\u00e9 v\u00e1lhat a cloud native fejl\u0151d\u00e9s\u00e9ben. A GitOps eset\u00e9ben azonban a megszokott eszk\u00f6z\u00f6ket haszn\u00e1lhatod.<\/li>\n<li> <b>Esem\u00e9nyek mint integr\u00e1ci\u00f3s eszk\u00f6z<\/b>: Amint az adatok friss\u00fclnek a Git-ben, a Weave Flux (vagy a Weave Cloud oper\u00e1tora) \u00e9rtes\u00edti err\u0151l a runtime-ot. Valah\u00e1nyszor Kubernetes egy sor m\u00f3dos\u00edt\u00e1st fogad, a Git friss\u00fcl. Ez egy egyszer\u0171 integr\u00e1ci\u00f3s modellt biztos\u00edt a GitOps munkafolyamatainak szervez\u00e9s\u00e9hez, ahogyan az al\u00e1bb l\u00e1that\u00f3.<\/li>\n<\/ol>\n<h2>Z\u00e1r\u00e1s<\/h2>\n<p>\nA GitOps jelent\u0151s garanci\u00e1kat ny\u00fajt a friss\u00edt\u00e9shez, amelyek sz\u00fcks\u00e9gesek b\u00e1rmely modern CI\/CD eszk\u00f6zh\u00f6z:<\/p>\n<ul>\n<li> automatiz\u00e1l\u00e1s;<\/li>\n<li> konvergencia;<\/li>\n<li> idempotencia;<\/li>\n<li> determin\u00e1lts\u00e1g.<\/li>\n<\/ul>\n<p>\nFontos, mivel \u00fczemeltet\u00e9si modellt k\u00edn\u00e1l a felh\u0151nat\u00edv fejleszt\u0151k sz\u00e1m\u00e1ra.<\/p>\n<ul>\n<li> A hagyom\u00e1nyos rendszermenedzsment \u00e9s fel\u00fcgyeleti eszk\u00f6z\u00f6k a m\u0171k\u00f6d\u00e9si csapatokhoz kapcsol\u00f3dnak, amelyek a runbook keretein bel\u00fcl m\u0171k\u00f6dnek. <i>(rutinszer\u0171 elj\u00e1r\u00e1sok \u00e9s m\u0171veletek k\u00e9szlet\u00e9re utal \u2014 a ford\u00edt\u00f3 megj.)<\/i>, amely egy adott deploymenthez van k\u00f6tve.<\/li>\n<li> A felh\u0151nat\u00edv rendszerek kezel\u00e9s\u00e9ben a megfigyel\u00e9si eszk\u00f6z\u00f6k a legjobb m\u00f3dja a telep\u00edt\u00e9sek eredm\u00e9nyeinek \u00e9rt\u00e9kel\u00e9s\u00e9re, hogy a fejleszt\u0151i csapat gyorsan reag\u00e1lhasson r\u00e1juk.<\/li>\n<\/ul>\n<p>\nK\u00e9pzelj el sok klasztert, amelyek k\u00fcl\u00f6nb\u00f6z\u0151 felh\u0151kben tal\u00e1lhat\u00f3k, \u00e9s sz\u00e1mos szolg\u00e1ltat\u00e1st, saj\u00e1t csapatokkal \u00e9s telep\u00edt\u00e9si tervekkel. A GitOps egy nagy l\u00e9pt\u00e9kben invariant modell a sokf\u00e9les\u00e9g kezel\u00e9s\u00e9re.<\/p>\n<h2>Fejleszt\u00e9si eszk\u00f6z\u00f6k, amelyek Kubernetesben futnak<\/h2>\n<p>\nOlvasson tov\u00e1bbi inform\u00e1ci\u00f3kat a blogunkban:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/456754\/\">GitOps: A Pull \u00e9s Push m\u00f3dszerek \u00f6sszehasonl\u00edt\u00e1sa<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/434160\/\">Bemutatjuk a kubedog k\u00f6nyvt\u00e1rat a Kubernetes er\u0151forr\u00e1sok figyel\u00e9s\u00e9re<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">Kib\u0151v\u00edtj\u00fck \u00e9s kieg\u00e9sz\u00edtj\u00fck a Kubernetest (\u00e1ttekint\u00e9s \u00e9s vide\u00f3 el\u0151ad\u00e1s)<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p class=\"for_users_only_msg\">Csak a regisztr\u00e1lt felhaszn\u00e1l\u00f3k vehetnek r\u00e9szt a szavaz\u00e1son. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">K\u00e9rem, jelentkezzen be.<\/a><\/noindex>, k\u00e9rem.<\/p>\n<h2 class=\"default-block__polling-title\">Tudtad a GitOps-r\u00f3l a k\u00e9t ford\u00edt\u00e1s megjelen\u00e9se el\u0151tt a Habr-on?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Igen, mindent tudtam<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Csak felsz\u00ednesen<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Nem<\/p>\n<\/li>\n<\/ul>\n<p>    35 felhaszn\u00e1l\u00f3 szavazott. 10 felhaszn\u00e1l\u00f3 tart\u00f3zkodott.<br \/>\n<br \/>Forr\u00e1s: <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.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u043c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/chto-zhe-takoe-gitops\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\/hu\/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\udd47Mi is az a GitOps? | ProHoster","description":"Megj.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/chto-zhe-takoe-gitops","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/35941","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=35941"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/35941\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=35941"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=35941"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=35941"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}