Sissejuhatus GitOps-i OpenShiftile

TÀna rÀÀgime GitOps'i pÔhimÔtetest ja mudelitest ning sellest, kuidas neid mudeleid rakendatakse OpenShift platvormil. Selle teema interaktiivne juhend on saadaval. lingi kaudu.

Sissejuhatus GitOps-i OpenShiftile

LĂŒhidalt öeldes on GitOps praktika meetodite kogum, mis kasutab Git'i pull-pĂ€ringuid infrastruktuuri ja rakenduste konfiguratsioonide haldamiseks. Git-i repo GitOps'is vaadatakse kui ĂŒhte ainsat sĂŒsteemi oleku teabe allikat, kus igasuguseid oleku muudatusi jĂ€lgitakse tĂ€ielikult ja need on auditeeritavad.

MĂ”te muutuste jĂ€lgimisest GitOps'is ei ole uus; sellist lĂ€henemist on juba pikka aega ja praktiliselt igal pool rakendatud rakenduste lĂ€htekoodi töötamisel. GitOps rakendab sarnaseid funktsioone (ĂŒlevaatuskontrollid, pull-pĂ€ringud, sildid jne) infrastruktuuri ja rakenduste konfiguratsioonide haldamisel ning pakub sarnaseid eeliseid nagu lĂ€htekoodi haldamisel.

GitOps'i jaoks ei ole ĂŒhtegi akadeemilist mÀÀratlust vĂ”i kinnitatud reeglite kogumit, vaid pĂ”himĂ”tete kogum, millele see praktika tugineb:

  • SĂŒsteemi deklaratiivne kirjeldus hoitakse Git'i repositooriumis (konfiguratsioonid, jĂ€lgimine jne).
  • Oleku oleku seisundeid hallatakse pull-pĂ€ringute kaudu.
  • Töötavate sĂŒsteemide olek sĂŒnkroonitakse hoidlas olevate andmetega Git-push-pĂ€ringute abil.

GitOpsi pÔhimÔtted

  • SĂŒsteemide mÀÀratlemine kirjeldatakse lĂ€htekoodina

SĂŒsteemide konfiguratsioon kĂ€sitletakse kui kood, mistĂ”ttu seda saab salvestada ja automaatselt versioonida Git-holdis, mis toimib ainena, kust tĂ”de leida. See lĂ€henemine vĂ”imaldab hĂ”lpsalt rakendada (rollout) ja tagasi vĂ”tta (rollback) muudatusi sĂŒsteemides.

  • Soovitud olek ja sĂŒsteemide konfiguratsioon mÀÀratakse ja versioonitakse Git'is

Salvestades ja versioonides Git'is soovitud sĂŒsteemide oleku, saame hĂ”lpsasti rakendada ja tagasi vĂ”tta muudatusi sĂŒsteemides ja rakendustes. Samuti saame kasutada Git'i turvamehhanisme koodi omandi ja autentsuse kontrollimiseks.

  • Konfiguratsioonide muudatusi saab automaatselt rakendada pull-pĂ€ringute kaudu.

Kasutades Git'i pull-request'e, saame hÔlpsasti hallata, kuidas muudatused rakendatakse repositooriumis olevatele konfigureerimistele. NÀiteks saab neid anda kontrollimiseks teistele meeskonnaliikmetele vÔi viia lÀbi CI testid.

Ja selleks ei pea jagama adminni Ă”igusi igaĂŒhele. Konfiguratsiooni muudatuste kinnitamiseks on kasutajatel piisavad Ă”igused Git'i repositooriumis, kus need konfiguratsioonid asuvad.

  • Kontrollimatute konfiguratsioonide kĂ”rvaldamine

Kui soovitud sĂŒsteemi olek on salvestatud Git'i repositooriumisse, peame leidma vaid tarkvara, mis kontrollib, kas praegune sĂŒsteemi olek vastab soovitud olekule. Kui see ei vasta, peaks see tarkvara – sĂ”ltuvalt seadistustest – kas iseseisvalt kĂ”rvaldama lahknevuse vĂ”i teavitama meid konfiguratsioonide driftist.

GitOps mudelid OpenShift'i jaoks

Klastri ressursi ĂŒhtlustaja

Selle mudeli kohaselt on klastris kontroller, mille ĂŒlesanne on vĂ”rrelda Kubernetes'i ressursse (YAML-failid) Git-repositooriumis olemasolevate klastre ressurssidega. Erinevuste tuvastamisel saadab kontroller teateid ja vĂ”tab vĂ”imalusel meetmeid ebakĂ”lade kĂ”rvaldamiseks. See GitOps mudel on kasutusel Anthos Config Managementis ja Weaveworks Fluxis.

Sissejuhatus GitOps-i OpenShiftile

VĂ€line Ressursi Korreerija (Push)

Seda mudelit vĂ”ib pidada eelneva variandiks, kus meil on ĂŒks vĂ”i mitu kontrollerit, mis vastutavad ressursside sĂŒnkroonimise eest paare „Git-repositoorium – Kubernetes klaster”. Erinevus seisneb aga selles, et igas hallatavas klastris ei pea tingimata olema oma eraldi kontrollerit. „Git – k8s klaster” paarid mÀÀratakse sageli CRD-kirjeldustena (custom resources definition), kus saab tĂ€psustada, kuidas kontroller peaks sĂŒnkroniseerimise teostama. Selle mudeli raames vĂ”rreldakse CRD-s mÀÀratud Git-repositooriumi Kubernetes klastris sama CRD-s mÀÀratud ressurssidega ja tehakse vastavad toimingud vĂ”rreldes tulemusi. EelkĂ”ige kasutatakse sellist GitOps mudelit ArgoCD-s.

Sissejuhatus GitOps-i OpenShiftile

GitOps OpenShift platvormil

Multiklastri Kubernetes-infrastruktuuri haldamine

Kubernetes'i leviku ja mitme pilve strateegiate ning servaarvutuse (edge computing) populaarsuse kasvades suureneb ka keskmine OpenShift'i klastrite arv ĂŒhe kliendi kohta.

NĂ€iteks vĂ”ivad servaarvutuse kasutamisel ĂŒhe kliendi klastrid ulatuda sajandate ja isegi tuhandete kaupa. Selle tĂ”ttu peab ta haldama mitmeid iseseisvaid vĂ”i kooskĂ”lastatud OpenShift'i klastreid avalikus pilves ja kohapeal.

Sellega kaasnevad mitmed probleemid, sealhulgas:

  • Kontrollida, et klastrid on identilises seisundis (konfiguratsioonid, jĂ€lgimine, salvestused jne).
  • Klastreid uuesti loomine (vĂ”i taastamine) teadaolevast seisundist.
  • Uute klastrite loomine teadaolevast seisundist.
  • Muudatuste rakendamine mitmele OpenShift'i klastrile.
  • Muudatuste tagasiviimine mitmele OpenShift'i klastrile.
  • Kohandatud konfiguratsioonide sidumine erinevatesse keskkondadesse.

Rakenduse konfiguratsioonid

Rakenduste elutsĂŒkli jooksul lĂ€bivad nad sageli klastrite ahela (dev, stage jne), enne kui nad jĂ”uavad tootmisklastrisse. Lisaks, seoses kĂ€ttesaadavuse ja skaleeritavuse nĂ”udmistega, saavad kliendid sageli rakendusi kohe mitmesugustes kohalikus keskkonnas vĂ”i mitmes avaliku pilveplatvormi regioonis kĂ€itada.

Sellega seoses tuleb lahendada jĂ€rgmised ĂŒlesanded:

  • Tagada rakenduste (binaarfailide, konfiguratsioonide jne) liiklemine klastrite (dev, stage jne) vahel.
  • Rakendustes (binaarfailides, konfiguratsioonides jne) muudatuste rakendamine mitmes OpenShift'i klastris.
  • Rakenduste tagasi viimiste muutuste tĂŒhistamine varasemasse tuntud seisundisse.

OpenShift GitOps kasutusjuhtumid

1. Muudatuste rakendamine Git-i hoidlast

Klastri administraator saab salvestada OpenShift'i klastrite konfiguratsioonid Git-i hoidlasse ja rakendada neid automaatselt, et ilma liigsete pingutusteta luua uusi klastri ja viia need seisundisse, mis on identne tuntud seisundile, mis on salvestatud Git-i hoidlas.

2. SĂŒnkroniseerimine Secret Manager'iga

Adminile on kasulik vĂ”imalus sĂŒnkroniseerida OpenShift'i saladusobjektid sobiva tarkvaraga nagu Vault, et hallata neid spetsiaalselt selleks loodud tööriistade abil.

3. Konfiguratsioonide driftide jÀlgimine

Admini jaoks on kasulik, kui OpenShift GitOps tuvastab ja hoiatab automaatselt erinevuste eest tegelike konfiguratsioonide ja repositooriumiga mÀÀratud konfiguratsioonide vahel, et saaks kiiresti reageerida driftidele.

4. Driftide jÀlgimise teated

Need on kasulikud, kui administraator tahab kiiresti teada driftide juhtumitest, et vÔtta vastavad meetmed iseseisvalt.

5. Konfiguratsioonide kĂ€sitsi sĂŒnkroniseerimine driftide korral

See vĂ”imaldab adminil teha OpenShift'i klastris sĂŒnkroniseerimist Git'i repositooriumiga driftide korral, et kiiresti taastada klaster eelmisse teadaolevasse seisundisse.

6. Automaatne konfiguratsioonide sĂŒnkroniseerimine driftide korral

Admin saab ka seadistada OpenShift'i klastri automaatseks sĂŒnkroniseerimiseks repositooriumiga driftide avastamise korral, et klastri konfiguratsioon vastaks alati Git'is olevatele seadistustele.

7. Mitmed klastrid – ĂŒks hoidla

Administraator saab hoida ĂŒhes Git-hoidlas mitmete erinevate OpenShifti klastrite konfiguratsioone ja rakendada neid vajadusel.

8. Klastrite konfiguratsioonide hierarhiad (pÀrimine)

Administraator saab seadistada hoidlas klastrite konfiguratsioonide hierarhiad (st stage, prod, rakenduse portfell jne, koos pĂ€rimisega). TeisisĂ”nu, ta saab mÀÀratleda, kuidas konfiguratsioone rakendatakse – ĂŒhele vĂ”i mitmele klastrile.

NĂ€iteks, kui administraator seab Git-hoidlas hierarhia "Tootmisklastrid (prod) → SĂŒsteemi X klastrid → SĂŒsteemi X tootmisklastrid", siis rakendatakse sĂŒsteemi X tootmisklastritele jĂ€rgmiste konfiguratsioonide kombinatsioon:

  • Konfiguratsioonid, mis on ĂŒhised kĂ”igile tootmisklastritele.
  • Konfiguratsioonid sĂŒsteemi X klastrile.
  • Konfiguratsioonid sĂŒsteemi X tootmisklastrile.

9. Mallid ja konfiguratsioonide ĂŒlekirjutamine

Administraator saab ĂŒlekirjutada pĂ€ritud konfiguratsioonide komplekti ja nende vÀÀrtusi, nĂ€iteks et tĂ€psustada konfiguratsiooni teatud klastrite jaoks, kuhu need rakenduvad.

10. Valikulised include’id ja exclude’id konfiguratsioonide, rakenduste konfiguratsioonide jaoks

Admin saab seada rakendamise vÔi mitte rakendamise tingimusi teatud omadustega klastritele.

11. Mallide tugi

Arendajatele on kasulik vÔimalus valida, kuidas rakenduse ressursid mÀÀratletakse (Helm Chart, puhas Kubernetes'i yaml jne), et kasutada igale konkreetsele rakendusele kÔige sobivamat formaati.

GitOps tööriistad platvormil OpenShift

ArgoCD

ArgoCD rakendab vĂ€liste ressursside kooskĂ”lastamise mudelit ja pakub keskset kasutajaliidest klastrite ja Git-repositsioonide suhete orkestreerimiseks skeemiga 'ĂŒks paljus' (one-to-many). Selle programmi miinuste hulka kuulub vĂ”imaluse puudumine rakenduste haldamiseks, kui ArgoCD ei tööta.

Ametlik veebisait

Flux

Flux rakendab klastrisisesed ressursside kooskĂ”lastamise mudelit, mistĂ”ttu puudub keskne mÀÀratluste reposiitiumihaldus, mis on nĂ”rk koht. Teisest kĂŒljest, just keskse juhtimise puudumise tĂ”ttu on rakenduste haldamise vĂ”imalus sĂ€ilinud ka siis, kui ĂŒks klaster on vĂ€lja kukkunud.

Ametlik veebisait

ArgoCD installimine OpenShiftis

ArgoCD pakub suurepÀrast kÀsurea liidest ja veebikonsoli, seega ei kÀsitle me siin Fluxi ja teisi alternatiive.

ArgoCD juurutamiseks OpenShift 4 platvormil jÀrgige jÀrgmisi samme, olles klastrihaldur:

ArgoCD komponentide juurutamine 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 OpenShift Route seda nÀeks

# 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=Redirect

ArgoCD Cli tööriista juurutamine

# 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/argocd

ArgoCD serveri administraatori 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 on ArgoCD serveriga vÔimalik töötada lÀbi ArgoCD veebikonsoli vÔi ArgoCD Cli kÀsurea tööriista.
https://blog.openshift.com/is-it-too-late-to-integrate-gitops/

GitOps – kunagi pole liiga hilja

„Rong on lĂ€inud“ – nii öeldakse situatsiooni kohta, kus vĂ”imalus midagi teha on möödas. OpenShifti puhul tekitab tahtmine kohe alustada selle uue Ă€geda platvormi kasutamist sageli just sellise olukorra marsruutide, deploy'ide ja teiste OpenShifti objektide haldamisel ja hooldamisel. Kuid kas ĆĄanss on tĂ”eliselt igaveseks kadunud?

JÀtkates artiklite seeriat GitOps, tÀna nÀitame, kuidas kÀsitsi loodud rakendust ja selle ressursse muuta protsessiks, kus kÔike haldab GitOps tööriistakomplekt. Selleks alustame, et paigaldame rakenduse httpd kÀsitsi. Alloleval ekraanipildil on nÀidatud, kuidas me loome nimeruumi, deploymenti ja teenuse ning seejÀrel teeme selle teenuse ekspoose, 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-app

Nii et meil on kĂ€sitsi loodud rakendus. NĂŒĂŒd tuleb see viia GitOps juhtimise alla ilma juurdepÀÀsu kaotamata. LĂŒhidalt öeldes teeb see jĂ€rgmist:

  • Loome Git-reposi koodi jaoks.
  • Ekspordime meie praegused objektid ja laadime need Git-reposi.
  • Valime ja paigaldame GitOps tööriistakomplekti.
  • Lisame sellesse tööriistakomplekti meie repo.
  • MÀÀratleme rakenduse meie GitOps tööriistakomplektis.
  • Teeme rakenduse katsetamise GitOps tööriistakomplekti abil.
  • SĂŒnkroniseerime objekte GitOps tööriistakomplekti kaudu.
  • Lubame puhastamise (pruning) ja objektide automaatse sĂŒnkroniseerimise.

Nagu juba öeldud, artiklison GitOps’i puhul olemas ainult ĂŒks allikas, kust leida teavet kĂ”ikide Kubernetes klastrite objektide kohta – Git-i hoidla. Eeldame, et teie organisatsioonis on juba kasutusel Git-i hoidla. See vĂ”ib olla avalik vĂ”i privaatne, kuid see peab olema kindlasti juurdepÀÀsetav Kubernetes klastritele. See vĂ”ib olla sama hoidla, mis sisaldab rakenduste koodi, vĂ”i eraldi hoidla, mis on loodud spetsiaalselt deploy‘imiseks. Soovitav on tagada hoidlas ranged Ă”igused, kuna seal hoitakse salajaste objektide, marsruutide ja teiste turvafunktsioonide jaoks olulisi asju.

Meie nĂ€ites loome GitHubis uue avaliku hoidla. Seda saab nimetada ĂŒkskĂ”ik kuidas, meie kasutame nime blogpost.

Kui objektide YAML-failid ei ole salvestatud lokaalselt vĂ”i Git’is, siis tuleb kasutada oc vĂ”i kubectl binaarneid. Alloleval ekraanipildil pĂ€rime YAML meie nimetegevuse, deployment’i, teenuse ja marsruudi kohta. Enne seda kloneerisime just loodud hoidla ja liikusime sinna oma cd kĂ€suga.

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.yaml

NĂŒĂŒd muudame faili deployment.yaml, et eemaldada vĂ€li, mida Argo CD ei saa sĂŒnkroonida.

sed -i '/sgeneration: .*/d' deployment.yaml

Lisaks 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.yaml

NĂŒĂŒd, kui oleme failidega valmis saanud, tuleb need salvestada Git-repositoorsesse. PĂ€rast seda muutub see repo ainsaks infoallikaks ja kĂ”ik kĂ€sitsi muudatused objektides peavad olema rangelt keelatud.

git commit -am 'initial commit of objects'
git push origin master

JĂ€tkame eeldusel, et ArgoCD on juba juurutatud (kuidas seda teha – vt eelmist post). SeetĂ”ttu lisame Argo CD-sse meie loodud repositooriumi, mis sisaldab rakenduse koodi meie nĂ€ites. Veenduge, et osutate just sellele repositooriumile, mille varem lĂ”ite.

argocd repo add https://github.com/cooktheryan/blogpost

NĂŒĂŒd loome rakenduse. Rakendus mÀÀratleb vÀÀrtused, et GitOpsi tööriist saaks aru, millist hoidlat ja teid kasutada, milline OpenShift on vajalik objektide haldamiseks, samuti, milline tĂ€pselt on hoidla haru, ja kas ressursside automaatne sĂŒnkroonimine peaks 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 rakenduse seadistamist Argo CD-s hakkab see tööriist kontrollima juba vĂ€ljastatud objekte, et need vastaksid hoidlas mÀÀratletud definitsioonidele. 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 rakenduse staatus "Out of Sync" (Ei ole sĂŒnkroonitud), kuna puudub ArgoCD poolt mÀÀratud label-mĂ€rgis.
SellepĂ€rast ei toimu, kui me veidi hiljem sĂŒnkroonimise kĂ€ivitame, objektide uuesti vĂ€ljastamist.

NĂŒĂŒd teeme katsetuse, et veenduda, et meie failides ei ole vigu.

argocd app sync simple-app --dry-run

Kui vigu ei ole, siis saab jĂ€tkata sĂŒnkroonimisega.

argocd app sync simple-app

KĂ€skluse argocd get tĂ€itmisel oma rakenduse ĂŒle peame nĂ€gema, et rakenduse staatus on muutunud Healthy (Töökorras) vĂ”i Synced (SĂŒncroniseeritud). See tĂ€hendab, et kĂ”ik Git-i hoidlas olevad ressursid vastavad nĂŒĂŒd neile ressurssidele, mis on juba tarnitud.

argocd app get simple-app
Nimi:               simple-app
Projekt:            default
Server:             https://kubernetes.default.svc
Nimi ruumis:        simple-app
URL:                https://argocd-server-route-argocd.apps.example.com/applications/simple-app
Repo:               https://github.com/cooktheryan/blogpost.git
Siht:              master
Teekond:           .
SĂŒntimise poliitika:        <none>
SĂŒntimise staatus:        Synced to master (60e1678)
Tervise staatus:      Healthy
...   

NĂŒĂŒd on vĂ”imalik lubada automaatne sĂŒnkroonimine ja puhastamine, et tagada, et midagi ei luuaks kĂ€sitsi ja et iga kord, kui objekt luuakse vĂ”i uuendatakse hoidlas, toimub tarnimine.

argocd app set simple-app --sync-policy automated --auto-prune

Seega oleme edukalt viinud GitOpsi juhtimise alla rakenduse, mis algselt ei kasutanud GitOpsi.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster