Ievads GitOps for OpenShift

Å odien parunāsim par GitOps principiem un modeļiem, kā arÄ« par to, kā Å”ie modeļi tiek realizēti OpenShift platformā. Ir pieejams interaktÄ«vs ceļvedis par Å”o tēmu ŠæŠ¾ ссыŠ»ŠŗŠµ.

Ievads GitOps for OpenShift

ÄŖsumā, GitOps ir prakses kopums Git pull pieprasÄ«jumu izmantoÅ”anai infrastruktÅ«ras un lietojumprogrammu konfigurāciju pārvaldÄ«bai. Git repozitorijs pakalpojumā GitOps tiek uzskatÄ«ts par vienotu informācijas avotu par sistēmas stāvokli, un visas Ŕī stāvokļa izmaiņas ir pilnÄ«bā izsekojamas un auditējamas.

Ideja par izmaiņu izsekoÅ”anu GitOps nekādā ziņā nav jauna; Ŕī pieeja jau sen ir izmantota gandrÄ«z universāli, strādājot ar lietojumprogrammas pirmkodu. GitOps vienkārÅ”i ievieÅ” lÄ«dzÄ«gas funkcijas (atsauksmes, izvilkÅ”anas pieprasÄ«jumus, tagus utt.) infrastruktÅ«ras un lietojumprogrammu konfigurācijas pārvaldÄ«bā un nodroÅ”ina lÄ«dzÄ«gas priekÅ”rocÄ«bas kā pirmkoda pārvaldÄ«bas gadÄ«jumā.

GitOps nav akadēmiskas definÄ«cijas vai apstiprinātu noteikumu kopuma, ir tikai principu kopums, uz kuriem balstās Ŕī prakse:

  • Sistēmas deklaratÄ«vais apraksts tiek glabāts Git repozitorijā (konfigurācijas, uzraudzÄ«ba utt.).
  • Stāvokļa izmaiņas tiek veiktas, izmantojot izvilkÅ”anas pieprasÄ«jumus.
  • DarbojoÅ”o sistēmu stāvoklis tiek saskaņots ar datiem repozitorijā, izmantojot Git push pieprasÄ«jumus.

GitOps principi

  • Sistēmas definÄ«cijas ir aprakstÄ«tas kā pirmkods

Sistēmas konfigurācija tiek uzskatÄ«ta par kodu, lai to varētu glabāt un automātiski veikt versijas Git repozitorijā, kas kalpo kā vienots patiesÄ«bas avots. Å Ä« pieeja atvieglo izmaiņu ievieÅ”anu un atcelÅ”anu sistēmās.

  • Vēlamais sistēmu stāvoklis un konfigurācija ir iestatÄ«ta un versijas Git

Saglabājot un versijājot vēlamo sistēmu stāvokli pakalpojumā Git, mēs varam viegli ieviest un atsaukt izmaiņas sistēmās un lietojumprogrammās. Mēs varam arÄ« izmantot Git droŔības mehānismus, lai kontrolētu koda Ä«paÅ”umtiesÄ«bas un pārbaudÄ«tu tā autentiskumu.

  • Konfigurācijas izmaiņas var automātiski piemērot, izmantojot pull pieprasÄ«jumus

Izmantojot Git pull pieprasÄ«jumus, mēs varam viegli kontrolēt, kā izmaiņas tiek piemērotas konfigurācijām repozitorijā. Piemēram, tos var nodot citiem komandas locekļiem pārskatÄ«Å”anai vai veikt CI testus utt.

Un tajā paŔā laikā nav nepiecieÅ”ams sadalÄ«t administratora pilnvaras pa kreisi un pa labi. Lai veiktu konfigurācijas izmaiņas, lietotājiem ir nepiecieÅ”amas tikai atbilstoÅ”as ā€‹ā€‹atļaujas Git repozitorijā, kurā tiek glabātas Ŕīs konfigurācijas.

  • Nekontrolētas konfigurāciju novirzes problēmas novērÅ”ana

Kad vēlamais sistēmas stāvoklis ir saglabāts Git repozitorijā, mums atliek tikai atrast programmatÅ«ru, kas nodroÅ”inās, ka paÅ”reizējais sistēmas stāvoklis atbilst vēlamajam stāvoklim. Ja tas tā nav, Å”ai programmatÅ«rai atkarÄ«bā no iestatÄ«jumiem vajadzētu vai nu paÅ”ai novērst neatbilstÄ«bu, vai arÄ« informēt mÅ«s par konfigurācijas novirzi.

GitOps modeļi platformai OpenShift

Klastera resursu saskaņotājs

Saskaņā ar Å”o modeli klasterim ir kontrolieris, kas ir atbildÄ«gs par Kubernetes resursu (YAML failu) salÄ«dzināŔanu Git repozitorijā ar reālajiem klastera resursiem. Ja tiek konstatētas neatbilstÄ«bas, kontrolieris nosÅ«ta paziņojumus un, iespējams, veic darbÄ«bas, lai novērstu neatbilstÄ«bas. Å is GitOps modelis tiek izmantots Anthos Config Management un Weaveworks Flux.

Ievads GitOps for OpenShift

Ārējo resursu saskaņotājs (push)

Å o modeli var uzskatÄ«t par iepriekŔējā variantu, kad mums ir viens vai vairāki kontrolieri, kas atbild par resursu sinhronizāciju pāros ā€œGit repozitorijs - Kubernetes klasterisā€. AtŔķirÄ«ba Å”eit ir tāda, ka katram pārvaldÄ«tajam klasterim ne vienmēr ir savs atseviŔķs kontrolieris. Git un k8s klasteru pāri bieži tiek definēti kā CRD (pielāgotas resursu definÄ«cijas), kas var aprakstÄ«t, kā kontrolierim jāveic sinhronizācija. Å Ä« modeļa ietvaros kontrolieri salÄ«dzina CRD norādÄ«to Git repozitoriju ar Kubernetes klastera resursiem, kas arÄ« ir norādÄ«ti CRD, un veic atbilstoÅ”as ā€‹ā€‹darbÄ«bas, pamatojoties uz salÄ«dzināŔanas rezultātiem. Jo Ä«paÅ”i Å”is GitOps modelis tiek izmantots ArgoCD.

Ievads GitOps for OpenShift

GitOps OpenShift platformā

Vairāku klasteru Kubernetes infrastruktÅ«ras administrÄ“Å”ana

LÄ«dz ar Kubernetes izplatÄ«bu un vairāku mākoņu stratēģiju un malu skaitļoÅ”anas pieaugoÅ”o popularitāti palielinās arÄ« vidējais OpenShift klasteru skaits uz vienu klientu.

Piemēram, izmantojot malu skaitļoÅ”anu, viena klienta kopas var tikt izvietotas simtos vai pat tÅ«kstoÅ”os. Rezultātā viņŔ ir spiests pārvaldÄ«t vairākas neatkarÄ«gas vai koordinētas OpenShift kopas publiskajā mākonÄ« un lokālajā vidē.

Å ajā gadÄ«jumā ir jāatrisina daudzas problēmas, jo Ä«paÅ”i:

  • Kontrolējiet, lai kopas bÅ«tu identiskā stāvoklÄ« (konfigurācijas, uzraudzÄ«ba, glabāŔana utt.)
  • Atkārtoti izveidojiet (vai atjaunojiet) kopas, pamatojoties uz zināmu stāvokli.
  • Izveidojiet jaunas kopas, pamatojoties uz zināmu stāvokli.
  • Ieviest izmaiņas vairākos OpenShift klasteros.
  • Atsaukt izmaiņas vairākās OpenShift klasteros.
  • Saistiet veidņu konfigurācijas ar dažādām vidēm.

Lietojumprogrammu konfigurācijas

Sava dzÄ«ves cikla laikā lietojumprogrammas bieži iziet cauri klasteru ķēdei (izstrādātājs, stadija utt.), pirms nonāk ražoÅ”anas klasterÄ«. Turklāt pieejamÄ«bas un mērogojamÄ«bas prasÄ«bu dēļ klienti bieži izvieto lietojumprogrammas vairākos lokālos klasteros vai vairākos publiskas mākoņa platformas reÄ£ionos.

Šajā gadījumā ir jāatrisina Ŕādi uzdevumi:

  • NodroÅ”iniet lietojumprogrammu (bināro, konfigurāciju utt.) kustÄ«bu starp klasteriem (izstrādātājs, stadija utt.).
  • Ieviest izmaiņas lietojumprogrammās (binārie faili, konfigurācijas utt.) vairākos OpenShift klasteros.
  • Atgriezt lietojumprogrammu izmaiņas uz iepriekŔējo zināmo stāvokli.

OpenShift GitOps lietoŔanas gadījumi

1. Izmaiņu piemēroÅ”ana no Git repozitorija

Klastera administrators var glabāt OpenShift klasteru konfigurācijas Git krātuvē un automātiski lietot tās, lai bez piepūles izveidotu jaunas kopas un nonāktu tādā stāvoklī, kas ir identisks zināmajam Git repozitorijā saglabātajam stāvoklim.

2. Sinhronizācija ar Secret Manager

Administrators gÅ«s labumu arÄ« no iespējas sinhronizēt OpenShift slepenos objektus ar atbilstoÅ”u programmatÅ«ru, piemēram, Vault, lai tos pārvaldÄ«tu, izmantojot Ä«paÅ”i Å”im nolÅ«kam izveidotus rÄ«kus.

3. Drifta konfigurāciju kontrole

Administrators atbalstīs tikai tad, ja OpenShift GitOps pats identificēs un brīdinās par neatbilstībām starp reālajām un repozitorijā norādītajām konfigurācijām, lai viņi varētu ātri reaģēt uz novirzēm.

4. Paziņojumi par konfigurācijas novirzi

Tie ir noderÄ«gi gadÄ«jumā, ja administrators vēlas ātri uzzināt par konfigurācijas dreifÄ“Å”anas gadÄ«jumiem, lai pats ātri veiktu atbilstoÅ”us pasākumus.

5. Manuāla konfigurāciju sinhronizācija drifta laikā

Ä»auj administratoram konfigurācijas novirzes gadÄ«jumā sinhronizēt OpenShift klasteru ar Git repozitoriju, lai ātri atgrieztu klasteru iepriekŔējā zināmā stāvoklÄ«.

6. Automātiska konfigurāciju sinhronizācija dreifējot

Administrators var arī konfigurēt OpenShift klasteru, lai tas automātiski sinhronizētos ar repozitoriju, kad tiek konstatēta novirze, lai klastera konfigurācija vienmēr atbilstu Git konfigurācijām.

7. Vairāki klasteri - viens repozitorijs

Administrators var saglabāt vairāku dažādu OpenShift klasteru konfigurācijas vienā Git repozitorijā un pēc vajadzības tās selektīvi lietot.

8. Klasteru konfigurāciju hierarhija (mantoÅ”ana)

Administrators var iestatÄ«t klasteru konfigurāciju hierarhiju krātuvē (posms, prod, lietotņu portfelis utt. ar mantoÅ”anu). Citiem vārdiem sakot, tas var noteikt, vai konfigurācijas ir jāpiemēro vienam vai vairākiem klasteriem.

Piemēram, ja administrators Git repozitorijā iestata hierarhiju ā€œRažoÅ”anas klasteri (prod) ā†’ X sistēmas klasteri ā†’ X sistēmas ražoÅ”anas klasteriā€, sistēmas X ražoÅ”anas klasteriem tiek piemērota Ŕādu konfigurāciju kombinācija:

  • Visām ražoÅ”anas klasteriem kopÄ«gas konfigurācijas.
  • System X klastera konfigurācijas.
  • X sistēmas ražoÅ”anas klastera konfigurācijas.

9. Veidnes un konfigurācijas ignorÄ“Å”ana

Administrators var ignorēt mantoto konfigurāciju kopu un to vērtības, piemēram, lai precīzi pielāgotu konfigurāciju konkrētiem klasteriem, kuriem tie tiks lietoti.

10. SelektÄ«vā iekļauÅ”ana un izslēgÅ”ana konfigurācijām, lietojumprogrammu konfigurācijām

Administrators var iestatÄ«t nosacÄ«jumus noteiktu konfigurāciju lietoÅ”anai vai nepiemēroÅ”anai klasteriem ar noteiktiem raksturlielumiem.

11. Veidņu atbalsts

Izstrādātāji gūs labumu no iespējas izvēlēties, kā tiks definēti lietojumprogrammu resursi (Helm Chart, tīrā Kubernetes yaml utt.), lai katrai konkrētai lietojumprogrammai izmantotu vispiemērotāko formātu.

GitOps rīki OpenShift platformā

ArgoCD

ArgoCD ievieÅ” ārējo resursu saskaņoÅ”anas modeli un piedāvā centralizētu lietotāja saskarni, lai organizētu attiecÄ«bas starp klasteriem un Git krātuvēm. Å Ä«s programmas trÅ«kumi ietver nespēju pārvaldÄ«t lietojumprogrammas, kad ArgoCD nedarbojas.

Oficiālā mājas lapa

Plūdums

Flux ievieÅ” On-Cluster Resource Reconcile modeli, un rezultātā nav centralizētas definÄ«ciju repozitorija pārvaldÄ«bas, kas ir vājā vieta. No otras puses, tieÅ”i centralizācijas trÅ«kuma dēļ, iespēja pārvaldÄ«t lietojumprogrammas saglabājas pat tad, ja kāds klasteris neizdodas.

Oficiālā mājas lapa

ArgoCD instalÄ“Å”ana programmā OpenShift

ArgoCD piedāvā izcilu komandrindas interfeisu un tÄ«mekļa konsoli, tāpēc mēs Å”eit neaplÅ«kosim Flux un citas alternatÄ«vas.

Lai izvietotu ArgoCD platformā OpenShift 4, veiciet Ŕīs darbības kā klastera administrators:

ArgoCD komponentu izvietoŔana OpenShift platformā

# 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 servera uzlaboÅ”ana, lai to varētu redzēt OpenShift marÅ”rutā

# 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 rīka izvietoŔana

# 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 Server administratora paroles maiņa

# 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ēc Å”o darbÄ«bu veikÅ”anas varat strādāt ar ArgoCD Server, izmantojot ArgoCD WebUI tÄ«mekļa konsoli vai ArgoCD Cli komandrindas rÄ«ku.
https://blog.openshift.com/is-it-too-late-to-integrate-gitops/

GitOps ā€” nekad nav par vēlu

ā€œVilciens ir aizgājisā€ - tā viņi saka par situāciju, kad tiek palaists garām iespēja kaut ko darÄ«t. OpenShift gadÄ«jumā vēlme nekavējoties sākt lietot Å”o forÅ”o jauno platformu bieži vien rada tieÅ”i Ŕādu situāciju ar marÅ”rutu, izvietoÅ”anu un citu OpenShift objektu pārvaldÄ«bu un uzturÄ“Å”anu. Bet vai iespēja vienmēr ir pilnÄ«bā garām?

Turpinot rakstu sēriju par GitOps, Å”odien mēs jums parādÄ«sim, kā ar rokām izveidotu lietojumprogrammu un tās resursus pārveidot par procesu, kurā visu pārvalda GitOps rÄ«ki. Lai to izdarÄ«tu, vispirms manuāli izvietosim httpd lietojumprogrammu. Tālāk esoÅ”ajā ekrānuzņēmumā ir parādÄ«ts, kā mēs izveidojam nosaukumvietu, izvietoÅ”anu un pakalpojumu un pēc tam atklājam Å”o pakalpojumu, lai izveidotu marÅ”rutu.

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

Tātad mums ir ar rokām izstrādāta lietojumprogramma. Tagad tas ir jāpārsÅ«ta GitOps pārvaldÄ«bā, nezaudējot pieejamÄ«bu. ÄŖsāk sakot, tas darbojas Ŕādi:

  • Izveidojiet koda Git repozitoriju.
  • Mēs eksportējam savus paÅ”reizējos objektus un augÅ”upielādējam tos Git repozitorijā.
  • GitOps rÄ«ku atlase un izvietoÅ”ana.
  • Mēs pievienojam savu repozitoriju Å”im rÄ«ku komplektam.
  • Mēs definējam lietojumprogrammu mÅ«su GitOps rÄ«ku komplektā.
  • Mēs veicam lietojumprogrammas testa darbÄ«bu, izmantojot GitOps rÄ«ku komplektu.
  • Mēs sinhronizējam objektus, izmantojot GitOps rÄ«ku komplektu.
  • Iespējot objektu apgrieÅ”anu un automātisko sinhronizāciju.

Kā minēts iepriekŔējā raksts, GitOps ir viens un tikai viens informācijas avots par visiem objektiem Kubernetes klasterÄ«(-os) - Git repozitorijs. Tālāk mēs izejam no pieņēmuma, ka jÅ«su organizācija jau izmanto Git repozitoriju. Tas var bÅ«t publisks vai privāts, taču tam ir jābÅ«t pieejamam Kubernetes klasteriem. Tas var bÅ«t tas pats repozitorijs, kas lietojumprogrammas kodam, vai atseviŔķs repozitorijs, kas izveidots Ä«paÅ”i izvietoÅ”anai. Repozitorijā ieteicams iegÅ«t stingras atļaujas, jo tajā tiks glabāti noslēpumi, marÅ”ruti un citas ar droŔību saistÄ«tas lietas.

Mūsu piemērā mēs izveidosim jaunu publisku repozitoriju vietnē GitHub. Varat to saukt, kā vien vēlaties, mēs izmantojam nosaukumu blogpost.

Ja YAML objektu faili netika saglabāti lokāli vai Git, jums bÅ«s jāizmanto oc vai kubectl binārie faili. Tālāk esoÅ”ajā ekrānuzņēmumā mēs pieprasām YAML mÅ«su nosaukumvietai, izvietoÅ”anai, pakalpojumam un marÅ”rutam. Pirms tam mēs tajā klonējām jaunizveidoto repozitoriju un kompaktdisku.

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

Tagad rediģēsim failu deployment.yaml, lai noņemtu lauku, kuru Argo CD nevar sinhronizēt.

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

Turklāt marÅ”ruts ir jāmaina. Vispirms iestatÄ«sim daudzrindu mainÄ«go un pēc tam aizvietosim ingress: null ar Ŕī mainÄ«gā saturu.

export ROUTE="  ingress:                                                            
    - conditions:
        - status: 'True'
          type: Admitted"

sed -i "s/  ingress: null/$ROUTE/g" route.yaml

Tātad, mēs esam sakārtojuÅ”i failus, atliek tikai tos saglabāt Git repozitorijā. Pēc tam Ŕī krātuve kļūst par vienÄ«go informācijas avotu, un jebkādas manuālas objektu izmaiņas ir stingri jāaizliedz.

git commit -am ā€˜initial commit of objectsā€™
git push origin master

Tālāk mēs balstāmies uz faktu, ka jÅ«s jau esat izvietojis ArgoCD (kā to izdarÄ«t - skatiet iepriekŔējo post). Tāpēc mēs Argo kompaktdiskam pievienosim mÅ«su izveidoto repozitoriju, kurā ir lietojumprogrammas kods no mÅ«su piemēra. VienkārÅ”i pārliecinieties, ka esat norādÄ«jis tieÅ”i to repozitoriju, kuru izveidojāt iepriekÅ”.

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

Tagad izveidosim lietojumprogrammu. Lietojumprogramma iestata vērtÄ«bas tā, lai GitOps rÄ«kkopa saprastu, kuru repozitoriju un ceļus izmantot, kurÅ” OpenShift ir nepiecieÅ”ams, lai pārvaldÄ«tu objektus, kura konkrēta repozitorija filiāle ir nepiecieÅ”ama un vai resursi ir jāsinhronizē automātiski.

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

Kad lietojumprogramma ir norādÄ«ta Argo kompaktdiskā, rÄ«kkopa sāk pārbaudÄ«t jau izvietotos objektus, salÄ«dzinot ar repozitorijā esoÅ”ajām definÄ«cijām. MÅ«su piemērā automātiskā sinhronizācija un tÄ«rÄ«Å”ana ir atspējota, tāpēc elementi vēl nemainās. LÅ«dzu, ņemiet vērā, ka Argo CD saskarnē mÅ«su lietojumprogrammai bÅ«s statuss ā€œOut of Syncā€, jo nav nevienas etiÄ·etes, ko nodroÅ”ina ArgoCD.
Tāpēc, kad mēs sākam sinhronizāciju nedaudz vēlāk, objekti netiks pārvietoti.

Tagad veiksim testa palaiŔanu, lai pārliecinātos, ka mūsu failos nav kļūdu.

argocd app sync simple-app --dry-run

Ja kļūdu nav, varat pāriet uz sinhronizāciju.

argocd app sync simple-app

Pēc komandas argocd get palaiÅ”anas mÅ«su lietojumprogrammā mums vajadzētu redzēt, ka lietojumprogrammas statuss ir mainÄ«ts uz VeselÄ«gs vai Sinhronizēts. Tas nozÄ«mēs, ka visi resursi Git repozitorijā tagad atbilst tiem resursiem, kas jau ir izvietoti.

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:        <none>
Sync Status:        Synced to master (60e1678)
Health Status:      Healthy
...   

Tagad varat iespējot automātisko sinhronizāciju un tÄ«rÄ«Å”anu, lai nodroÅ”inātu, ka nekas netiek izveidots manuāli un ka katru reizi, kad objekts tiek izveidots vai atjaunināts repozitorijā, tiks veikta izvietoÅ”ana.

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

Tātad, mēs esam veiksmÄ«gi nodevuÅ”i lietojumprogrammu GitOps kontrolē, kas sākotnēji nekādā veidā neizmantoja GitOps.

Avots: www.habr.com

Pievieno komentāru