TÀna rÀÀgime GitOpsi printsiipidest ja mudelitest, samuti sellest, kuidas neid mudeleid rakendatakse OpenShift platvormil. Sellel teemal on saadaval interaktiivne juhend. .

LĂŒhidalt öeldes on GitOps rida praktilisi meetodeid Git-i pull-pĂ€ringute kasutamiseks infrastruktuuri ja rakenduste konfigureerimiseks. Git-i repositooriumit GitOpsi kontekstis kĂ€sitletakse kui ainukest tĂ”de sĂŒsteemi oleku kohta, kus kĂ”ik selle oleku muudatused on tĂ€ielikult jĂ€lgitavad ja auditeeritavad.
MĂ”te muudatuste jĂ€lgimisest GitOpsis ei ole sugugi uus; sellist lĂ€henemist on juba ammu ja peaaegu igal pool rakendatud rakenduste lĂ€htekoodiga töötamisel. GitOps rakendab sarnaseid funktsioone (ĂŒlevaatuse kontrollid, pull-pĂ€ringud, sildid jne) infrastruktuuri ja rakenduste konfigureerimisel ning annab sarnaseid eeliseid nagu lĂ€htekoodi haldamisel.
GitOpsil ei ole ĂŒhtegi akadeemilist mÀÀratlust vĂ”i heakskiidetud reeglite kogumit, vaid pĂ”hiprintsiipe, millel see praktika pĂ”hineb:
- SĂŒsteemi deklaratiivne kirjeldus hoitakse Git-repositooriumis (konfiguratsioonid, jĂ€lgimine jne).
- Oleku muudatused tehakse pull-pÀringute kaudu.
- Töötavate sĂŒsteemide olek vastandatakse repositooriumis olevate andmetega Git push-pĂ€ringute abil.
GitOpsi printsiibid
- SĂŒsteemide mÀÀratlused kirjeldatakse kui lĂ€htekood
SĂŒsteemide konfiguratsiooni kĂ€sitletakse kui koodi, seega saab seda hoida ja automaatselt versioonida Git-repositooriumis, mis teenib ainukese tĂ”e allikana. Selline lĂ€henemine vĂ”imaldab hĂ”lpsalt muudatusi sĂŒsteemides sisse viia (rollout) ja tagasi pöörata (rollback).
- Soovitud olek ja sĂŒsteemide konfiguratsioon mÀÀratakse ja versioonitakse Gitis.
Hoides ja versioonides soovitud olekut Gitis, saame hĂ”lpsalt muudatusi sĂŒsteemides ja rakendustes sisse viia ja tagasi pöörata. Samuti saame kasutada Giti turvamehhanisme koodi omamise kontrollimiseks ja selle originaalsuse kinnitamiseks.
- Konfiguratsioonides toimuvad muudatused saavad automaatselt rakenduda pull-pÀringute kaudu.
Kasutades Git'i pull-pĂ€ringuid, saame me lihtsalt hallata, kuidas muudatused rakenduvad repos olevatele konfiguratsioonidele. NĂ€iteks saab neid anda ĂŒlevaatamiseks teistele meeskonna liikmetele vĂ”i lasta neil lĂ€bi CI testide.
Ja selleks ei pea jagama administraatori Ôigusi vasakule ja paremale. Et teha muudatused konfiguratsioonis, peavad kasutajad omama vastavaid Ôigusi Git-repos, kus need konfiguratsioonid asuvad.
- Probleemi lahendamine kontrollimatust konfiguratsioonide triivimisest
Kui soovitud sĂŒsteemi seisund hoitakse Git-repos, siis jÀÀb meil vaid leida tarkvara, mis kontrollib, kas praegune sĂŒsteemi seisund vastab selle soovitud seisundile. Kui see nii ei ole, siis peaks see tarkvara - vastavalt seadistustele - kas iseseisvalt kĂ”rvaldama mittesobivuse vĂ”i teavitama meid konfiguratsioonide triivimisest.
GitOps mudelid OpenShiftis
Klusteri sees olev ressurside kooskÔlastaja
Selle mudeli kohaselt on klusteris kontroller, mis vastutab Kubernetes-ressursside (YAML-failid) vÔrdlemise eest Git-repos olevate tegelike klusteri ressurssidega. Erinevuste tuvastamisel saadab kontroller teate ja vajadusel vÔtab meetmeid mittesobivuste kÔrvaldamiseks. Seda GitOps mudelit kasutatakse Anthos Config Management'is ja Weaveworks Flux'is.

VÀline ressurside kooskÔlastaja (Push)
Seda mudelit vĂ”ib kĂ€sitleda kui eelneva varianti, kus meil on ĂŒks vĂ”i mitu kontrollerit, mis vastutavad ressursside sĂŒnkroonimise eest âGit-repo - Kubernetes klusterâ paarides. Erinevus seisneb selles, et igas hallatavaks muudetud klastris ei pea tingimata olema oma alamkontroller. âGit - k8s klusterâ paarid mÀÀratletakse sageli CRD-kirjeldustes (custom resources definition), kus saab kirja panna, kuidas kontroller peaks sĂŒnkroonimist teostama. Selle mudeli raames vĂ”rreldakse kontrollerid Git-repos olevat, mis on mÀÀratud CRD-s, Kubernetes klusteri ressurssidega, mis on samuti mÀÀratud CRD-s, ja viiakse ellu vastavad tegevused vĂ”rreldes tulemusi. EelkĂ”ige kasutatakse sellist GitOps mudelit ArgoCD-s.

GitOps OpenShift platvormil
Multiklastri Kubernetes infrastruktuuri haldamine
Kubernetes'e laienemise ja mitme pilve strateegiate ning servaarvutuse (edge computing) kasvava populaarsuse tĂ”ttu suureneb ka keskmine OpenShift klastrite arv ĂŒhe kliendi kohta.
NĂ€iteks vĂ”ivad ĂŒhe kliendi piiratud arvutusteaduse klastri vĂ€lja arendamise arvud ulatuda sadade ja isegi tuhandeteni. Selle tagajĂ€rjel peab ta haldama mitmeid iseseisvaid vĂ”i kooskĂ”lastatud OpenShift klastreid avalikus pilves ja kohapeal.
Sellega tuleb lahendada palju probleeme, sealhulgas:
- Kontrollida, et klastrid oleksid sarnases olekus (konfiguratsioonid, jÀlgimine, salvestused jne).
- Uuesti luua (vÔi taastada) klastreid tuntud olekust.
- Luua uusi klastreid tuntud olekust.
- Rakendada muudatusi mitmes OpenShift klastris.
- Tagasi rullida muudatusi mitmes OpenShift klastris.
- Siduda mallitud konfiguratsioonid erinevate keskkondadega.
Rakenduse konfiguratsioonid
Rakendused lÀbivad sageli oma eluringi jooksul ahela klastreid (arendust, etappi jne), enne kui need jÔuavad tootmisklastrisse. Samuti kÀivitavad kliendid tihti rakendusi mitmes kohapealses klastris vÔi mitmes piirkonnas avalikus pilveplatvormis, arvestades kÀttesaadavuse ja skaleeritavuse nÔudeid.
Selle kĂ€igus tuleb lahendada jĂ€rgmised ĂŒlesanded:
- Tagada rakenduste (binaarid, konfiguratsioonid jne) liikumine klastrite vahel (arendust, etappi jne).
- Rakendada rakendustes (binaarid, konfiguratsioonid jne) muudatusi mitmes OpenShift klastris.
- Tagasi rullida rakendustes muudatused eelmise tuntud oleku tasemeni.
OpenShift GitOps'i kasutusstsenaariumid
1. Muudatuste rakendamine Git-repositooriumist
Klastri administraator saab salvestada OpenShift klastrite konfiguratsioonid Git-repositooriumisse ja rakendada neid automaatselt, et vaevata luua uusi klastreid ja tuua need tundmisse olekusse, mis on salvestatud Git-repositooriumis.
2. SĂŒnkroniseerimine Secret Manageriga
Administraatorile on samuti kasulik vĂ”imalus sĂŒnkroniseerida OpenShift secret-objekte sobiva tarkvaraga nagu Vault, et hallata neid spetsiaalselt loodud tööriistade abil.
3. Konfiguratsioonide drifti jÀlgimine
Administraator on kindel, et OpenShift GitOps suudab automaatselt tuvastada ja teavitada tÔrgetest tegelike konfiguratsioonide ja nende vahel, mis on mÀÀratud repositooriumis, et saaks kiiresti reageerida drifti olukordadele.
4. Konfiguratsioonide tuvastamise teated
Need on kasulikud siis, kui administraator soovib kiiresti teada saada, kui konfiguratsioonid muutuvad, et kiiresti iseseisvalt vajalikud meetmed vÔtta.
5. Konfiguratsioonide kĂ€sitsi sĂŒnkroniseerimine muutumise korral
See vĂ”imaldab administraatoril sĂŒnkroniseerida OpenShifti klastri Git-repositoariumiga, kui konfiguratsioonid muutuvad, et kiiresti taastada klaster varasemasse tuntud olekusse.
6. Konfiguratsioonide automaatne sĂŒnkroniseerimine muutumise korral
Administraator saab samuti seadistada OpenShifti klastri automaatseks sĂŒnkroniseerimiseks repositooriumiga, kui muutusi avastatakse, et klastri konfiguratsioon oleks alati kooskĂ”las Git'is olevate seadistustega.
7. Mitmed klastrid â ĂŒks repositoorium
Administraator saab salvestada ĂŒhte Git-repositoormapist mitme erineva OpenShifti klastri konfiguratsioonid ja rakendada neid valikuliselt vastavalt vajadusele.
8. Klastri konfiguratsioonide hierarhia (pÀrandimine)
Administraator saab mÀÀrata repositooriumis klastri konfiguratsioonide hierarhia (stage, prod, rakenduste portfell jne koos pĂ€randiga). TeisisĂ”nu, ta saab mÀÀrata, kuidas konfiguratsioonid rakendatakse â ĂŒhele vĂ”i mitmele klastrile.
NĂ€iteks kui administraator mÀÀrab Git-repositooriumis hieraarhiat âTootmisklastrid (prod) â X sĂŒsteemi klastrid â X sĂŒsteemi tootmisklastridâ, siis rakendatakse X sĂŒsteemi tootmisklastritele jĂ€rgmiste konfiguratsioonide koosseisu:
- Konfiguratsioonid, mis on ĂŒhised kĂ”igile tootmisklastritele.
- X sĂŒsteemi klastrile mĂ”eldud konfiguratsioonid.
- X sĂŒsteemi tootmisklastri konfiguratsioonid.
9. Mallid ja konfiguratsioonide ĂŒlekirjutamine
Administraator saab ĂŒlekirjutada pĂ€randatud konfiguratsioonide komplekti ja nende vÀÀrtusi, nĂ€iteks et tĂ€psustada teatud klastritele rakendatava konfiguratsiooni seadistusi.
10. Valikulised include-d ja exclude-d konfiguratsioonide jaoks, rakenduste konfiguratsioonid
Administraator saab mÀÀrata tingimused, millal teatud konfiguratsioonid rakendatakse vÔi mitte rakendatakse klastritele, millel on teatud omadused.
11. Mallide toetus
Arendajatele on kasulik vÔimalus valida, kuidas rakenduse ressursid mÀÀratakse (Helm Chart, puhas Kubernetes'lik yaml jne), et kasutada iga konkreetse rakenduse jaoks kÔige sobivamat vormingut.
GitOps tööriistad OpenShifti platvormil
ArgoCD
ArgoCD rakendab External Resource Reconcile mudelit ning pakub tsentraliseeritud kasutajaliidest klastrite ja Git-repositorite suhete orksestreerimiseks skeemis "ĂŒks paljudele". Selle programmi puudusteks on vĂ”imetus hallata rakendusi, kui ArgoCD ei tööta.
Flux
Flux rakendab On-Cluster Resource Reconcile mudelit ja seetĂ”ttu puudub tsentraliseeritud haldus mÀÀrangute repositoriumi jaoks, mis on nĂ”rkus. Teisalt, just tsentraliseerimise puudumise tĂ”ttu on rakenduste haldamise vĂ”imalus sĂ€ilinud ka siis, kui ĂŒks klaster on vĂ€lja langenud.
ArgoCD installimine OpenShiftis
ArgoCD pakub suurepÀrast kÀsurealiidest ja veebi konsooli, seega ei vaatle me siin Fluxi ja teisi alternatiive.
ArgoCD-deployimine OpenShift 4 platvormil, jÀrgige jÀrgmisi samme klastrihaldurina:
ArgoCD komponentide deployimine OpenShift platvormil
# Create a new namespace for ArgoCD components
oc create namespace argocd
# Apply the ArgoCD Install Manifest
oc -n argocd apply -f https://raw.githubusercontent.com/argoproj/argo-cd/v1.2.2/manifests/install.yaml
# Get the ArgoCD Server password
ARGOCD_SERVER_PASSWORD=$(oc -n argocd get pod -l "app.kubernetes.io/name=argocd-server" -o jsonpath='{.items[*].metadata.name}')ArgoCD Serveri kohandamine, et see oleks OpenShift Route'ile nÀhtav
# Patch ArgoCD Server so no TLS is configured on the server (--insecure)
PATCH='{"spec":{"template":{"spec":{"$setElementOrder/containers":[{"name":"argocd-server"}],"containers":[{"command":["argocd-server","--insecure","--staticassets","/shared/app"],"name":"argocd-server"}]}}}}'
oc -n argocd patch deployment argocd-server -p $PATCH
# Expose the ArgoCD Server using an Edge OpenShift Route so TLS is used for incoming connections
oc -n argocd create route edge argocd-server --service=argocd-server --port=http --insecure-policy=RedirectArgoCD Cli Tööriista deployimine
# Download the argocd binary, place it under /usr/local/bin and give it execution permissions
curl -L https://github.com/argoproj/argo-cd/releases/download/v1.2.2/argocd-linux-amd64 -o /usr/local/bin/argocd
chmod +x /usr/local/bin/argocdArgoCD Serveri admin parooli muutmine
# Get ArgoCD Server Route Hostname
ARGOCD_ROUTE=$(oc -n argocd get route argocd-server -o jsonpath='{.spec.host}')
# Login with the current admin password
argocd --insecure --grpc-web login ${ARGOCD_ROUTE}:443 --username admin --password ${ARGOCD_SERVER_PASSWORD}
# Update admin's password
argocd --insecure --grpc-web --server ${ARGOCD_ROUTE}:443 account update-password --current-password ${ARGOCD_SERVER_PASSWORD} --new-password PÀrast nende sammude tÀitmist saab ArgoCD Serverit hallata ArgoCD WebUI kaudu vÔi ArgoCD Cli kÀsureatööriistaga.
GitOps - kunagi pole liiga hilja
"Rong on lÀinud" - nii öeldakse olukorra kohta, kus midagi teha on juba hilja. OpenShiftis soov alustada selle uue Àgeda platvormi kasutamist loob sageli just sellise olukorra marsruutide, deploymendide ja teiste OpenShift objektide haldamisel ja teenindamisel. Kuid kas vÔimalus on tÔeliselt igaveseks kaotsi lÀinud?
JÀtkates artiklite sarja , tÀna nÀitame, kuidas kÀsitsi loodud rakendust ja selle ressursse muuta protsessiks, mida haldab GitOps tööriist. Selleks deployime esmalt kÀsitsi httpd rakenduse. Alloleval ekraanipildil nÀeme, kuidas loome nimespetsi, deploymendi ja teenuse, seejÀrel teeme selle teenuse expose, et luua marsruut.
oc create -f https://raw.githubusercontent.com/openshift/federation-dev/master/labs/lab-4-assets/namespace.yaml
oc create -f https://raw.githubusercontent.com/openshift/federation-dev/master/labs/lab-4-assets/deployment.yaml
oc create -f https://raw.githubusercontent.com/openshift/federation-dev/master/labs/lab-4-assets/service.yaml
oc expose svc/httpd -n simple-appNii, meil on kĂ€sitsi loodud rakendus. NĂŒĂŒd peame selle viima GitOps juhtimise alla ilma kasutatavust kaotamata. LĂŒhidalt, see teeb jĂ€rgmist:
- Loome Git-reposiitiumi koodi jaoks.
- Eksportime meie praegused objektid ja laadime need Git-reposiiti.
- Valime ja seadistame GitOpsi tööriistade komplekti.
- Lisame meie reposse selle tööriistade komplekti.
- MÀÀratleme rakenduse meie GitOpsi tööriistade komplektis.
- Teeme rakendusele proovikÀivituse, kasutades GitOpsi tööriistade komplekti.
- SĂŒnkroniseerime objekte GitOpsi tööriistade komplekti abil.
- Aktiveerime objektide puhastamise (pruning) ja automaatse sĂŒnkroniseerimise.
Nagu eelnevalt mainitud, , on GitOpsis ĂŒks ja ainus teabeallikas kĂ”igi Kubernetes klaster(i) objektide kohta â Git-reposiit. Edasi eeldame, et teie organisatsioonis on juba kasutusel Git-reposiit. See vĂ”ib olla avalik vĂ”i privaatne, kuid see peab olema kergesti kĂ€ttesaadav Kubernetes klastritele. See vĂ”ib olla sama repod, mis on rakenduse koodiks, vĂ”i eraldi repo, mis on loodud spetsiaalselt juurutamise jaoks. Repositooriumis on soovitatav rakendada ranget ligipÀÀsu, kuna seal hoitakse saladusobjekte, marsruute ja teisi turvalisuse seisukohalt tundlikke asju.
Meie nĂ€ite puhul loome uue avaliku repodi GitHubis. Selle nime saab panna ĂŒkskĂ”ik millise, meie kasutame nime blogpost.
Kui objekti YAML-failid ei olnud salvestatud kohapeal vĂ”i Gitis, tuleb kasutada binaarfaile oc vĂ”i kubectl. Alloleval pildil kĂŒsime YAMLi meie nimesse, juurutusse, teenusesse ja marsruuti. Enne seda kloneerisime just loodud repodie ja liikusime sinna kĂ€suga cd.
oc get namespace simple-app -o yaml --export > namespace.yaml
oc get deployment httpd -o yaml -n simple-app --export > deployment.yaml
oc get service httpd -o yaml -n simple-app --export > service.yaml
oc get route httpd -o yaml -n simple-app --export > route.yamlNĂŒĂŒd muudame faili deployment.yaml, et eemaldada sealt vĂ€li, mida Argo CD ei saa sĂŒnkroniseerida.
sed -i '/sgeneration: .*'/d' deployment.yamlLisaks tuleb muuta marsruuti. Esiteks mÀÀratleme mitmerealise muutuja ja seejÀrel asendame ingress: null selle muutuja sisuga.
export ROUTE=" ingress:
- conditions:
- status: 'True'
type: Admitted"
sed -i "s/ ingress: null/$ROUTE/g" route.yamlNii et failid on korras, nĂŒĂŒd tuleks need salvestada Git-reposiiti. PĂ€rast seda muutub see repo ainus teabeallikas, ja kĂ”ik kĂ€sitsi tehtud muudatused objektides peavad olema rangelt keelatud.
git commit -am 'initial commit of objects'
git push origin masterJĂ€tkame sellest, et ArgoCD on juba seadistatud (kuidas seda teha â vt eelmist ). Seega lisame Argo CD-sse meie loodud repositooriumi, mis sisaldab rakenduse koodi meie nĂ€itest. Veenduge, et osutate just sellele repositooriumile, mille eelnevalt loote.
argocd repo add https://github.com/cooktheryan/blogpostNĂŒĂŒd loome rakenduse. Rakendus mÀÀratleb vÀÀrtused, et GitOps tööriist mĂ”istaks, millist repositooriumi ja teid kasutada, millist OpenShifti on vaja objektide haldamiseks, samuti millist konkreetset repositooriumi haru on vaja ja kas ressursside automaatne sĂŒnkroonimine peab toimuma.
argocd app create --project default
--name simple-app --repo https://github.com/cooktheryan/blogpost.git
--path . --dest-server https://kubernetes.default.svc
--dest-namespace simple-app --revision master --sync-policy none PĂ€rast seda, kui rakendus on Argo CD-s mÀÀratud, hakkab see tööriist kontrollima juba rakendatud objekte vastavuses repositooriumis toodud mÀÀratlustega. Meie nĂ€ites on automaatne sĂŒnkroonimine ja puhastamine vĂ€lja lĂŒlitatud, seega elemendid ei muutu. Pange tĂ€hele, et Argo CD liideses on meie rakendusel staatuseks âOut of Syncâ (Ei ole sĂŒnkroniseeritud), kuna ei ole ArgoCD poolt mÀÀratud label-silti.
Just seetĂ”ttu, kui me veidi hiljem sĂŒnkroonimise kĂ€ivitame, ei toimu objektide uuesti rakendamist.
NĂŒĂŒd teeme katse, et veenduda, et meie failides ei ole vigu.
argocd app sync simple-app --dry-runKui vigu ei ole, siis vĂ”ime minna sĂŒnkroonimise juurde.
argocd app sync simple-appPĂ€rast kĂ€su argocd get kĂ€imist meie rakenduse ĂŒle peaksime nĂ€gema, et rakenduse staatus on muutunud Healthy (Töökorras) vĂ”i Synced (SĂŒnkroniseeritud). See tĂ€hendaks, et kĂ”ik ressursid Git-repositooriumis vastavad juba rakendatud ressurssidele.
argocd app get simple-app
Name: simple-app
Project: default
Server: https://kubernetes.default.svc
Namespace: simple-app
URL: https://argocd-server-route-argocd.apps.example.com/applications/simple-app
Repo: https://github.com/cooktheryan/blogpost.git
Target: master
Path: .
Sync Policy:
Sync Status: Synced to master (60e1678)
Health Status: Healthy
... NĂŒĂŒd on juba vĂ”imalik sisse lĂŒlitada automaatne sĂŒnkroonimine ja puhastamine, et tagada, et midagi ei luleta kĂ€sitsi ja et iga kord, kui objekt luuakse vĂ”i vĂ€rskendatakse repositooriumis, toimub rakendamine.
argocd app set simple-app --sync-policy automated --auto-prune Nii et, me oleme edukalt viinud GitOps juhtimise alla rakenduse, mis algselt ei kasutanud GitOps-i.
Allikas: habr.com
