Entwodiksyon nan GitOps pou OpenShift

Jodi a nou pral pale sou prensip ak modèl GitOps, ansanm ak fason modèl sa yo aplike sou platfòm OpenShift la. Gen yon gid entèaktif sou sijè sa a ki disponib по ссылке.

Entwodiksyon nan GitOps pou OpenShift

Nan yon bref, GitOps se yon seri pratik pou itilize demann Git pull pou jere enfrastrikti ak konfigirasyon aplikasyon yo. Yo trete depo Git nan GitOps kòm yon sèl sous enfòmasyon sou eta sistèm nan, epi nenpòt chanjman nan eta sa a se konplètman trasabl ak odit.

Lide a nan swiv chanjman nan GitOps pa gen okenn fason nouvo; apwòch sa a te itilize depi lontan prèske inivèsèl lè w ap travay ak kòd sous aplikasyon an. GitOps tou senpleman aplike karakteristik menm jan an (revizyon, demann rale, tags, elatriye) nan enfrastrikti ak jesyon konfigirasyon aplikasyon epi li bay benefis menm jan ak nan ka a nan jesyon kòd sous.

Pa gen okenn definisyon akademik oswa yon seri règ apwouve pou GitOps, se sèlman yon seri prensip sou ki pratik sa a bati:

  • Se deskripsyon deklaratif sistèm lan ki estoke nan repozitwa Git (konfigirasyon, siveyans, elatriye).
  • Chanjman eta yo fèt atravè demann pull.
  • Eta a nan sistèm kouri yo te pote nan liy ak done yo nan depo a lè l sèvi avèk demann Git pouse.

Prensip GitOps

  • Definisyon sistèm yo dekri kòm kòd sous

Konfigirasyon sistèm yo trete kòm kòd, kidonk li ka estoke ak vèsyon otomatikman nan yon depo Git, ki sèvi kòm yon sèl sous verite. Apwòch sa a fè li fasil pou deplwaye ak chanjman nan sistèm yo.

  • Eta a vle ak konfigirasyon nan sistèm yo mete ak vèsyon nan Git

Lè nou estoke ak vèsyon eta vle sistèm yo nan Git, nou kapab fasilman woule epi dewoule chanjman nan sistèm ak aplikasyon yo. Nou kapab tou itilize mekanis sekirite Git pou kontwole pwopriyetè kòd epi verifye otantisite li.

  • Chanjman konfigirasyon yo ka aplike otomatikman atravè demann rale

Sèvi ak demann Git rale, nou ka fasilman kontwole kijan chanjman yo aplike nan konfigirasyon nan repozitwa a. Pou egzanp, yo ka bay lòt manm ekip yo pou revize oswa kouri nan tès CI, elatriye.

Epi an menm tan an, pa gen okenn nesesite pou distribye pouvwa admin agoch ​​ak dwa. Pou fè chanjman konfigirasyon yo, itilizatè yo sèlman bezwen otorizasyon apwopriye nan repozitwa Git kote konfigirasyon sa yo estoke.

  • Fikse pwoblèm nan derive san kontwòl nan konfigirasyon

Yon fwa ke eta a vle nan sistèm nan estoke nan yon depo Git, tout sa nou dwe fè se jwenn lojisyèl ki pral asire ke eta aktyèl la nan sistèm nan matche ak eta li vle. Si sa a se pa ka a, Lè sa a, lojisyèl sa a ta dwe - tou depann de anviwònman yo - swa elimine dezakò a poukont li, oswa notifye nou sou drift konfigirasyon.

Modèl GitOps pou OpenShift

On-Cluster Resous Reconsiler

Dapre modèl sa a, gwoup la gen yon kontwolè ki responsab pou konpare resous Kubernetes (fichye YAML) nan depo Git la ak resous reyèl gwoup la. Si yo detekte dezakò, kontwolè a voye notifikasyon epi pètèt pran aksyon pou korije dezakò yo. Modèl GitOps sa a itilize nan Anthos Config Management ak Weaveworks Flux.

Entwodiksyon nan GitOps pou OpenShift

Rekonsilateur Resous Ekstèn (Pouse)

Modèl sa a ka konsidere kòm yon varyasyon nan yon sèl anvan an, lè nou gen youn oswa plis kontwolè ki responsab pou senkronize resous nan pè "Git depo - Kubernetes cluster". Diferans isit la se ke chak gwoup jere pa nesesèman gen pwòp kontwolè separe li yo. Git - K8s gwoup pè yo souvan defini kòm CRDs (definisyon resous koutim), ki ka dekri ki jan kontwolè a ta dwe fè senkronizasyon. Nan modèl sa a, kontwolè yo konpare depo Git ki espesifye nan CRD a ak resous gwoup Kubernetes yo, ki espesifye tou nan CRD a, epi fè aksyon apwopriye ki baze sou rezilta konparezon an. An patikilye, modèl GitOps sa a itilize nan ArgoCD.

Entwodiksyon nan GitOps pou OpenShift

GitOps sou platfòm OpenShift la

Administrasyon enfrastrikti Kubernetes milti grap

Avèk pwopagasyon Kubernetes ak popilarite k ap grandi nan estrateji milti-nwaj ak enfòmatik kwen, kantite mwayèn OpenShift grap pou chak kliyan ap ogmante tou.

Pa egzanp, lè w ap itilize edge computing, gwoup yon sèl kliyan ka deplwaye nan dè santèn oswa menm dè milye. Kòm yon rezilta, li oblije jere plizyè gwoup OpenShift endepandan oswa kowòdone nan nwaj piblik la ak sou lokal.

Nan ka sa a, gen anpil pwoblèm yo dwe rezoud, an patikilye:

  • Kontwole ke grap yo nan yon eta ki idantik (konfigirasyon, siveyans, depo, elatriye)
  • Rekreye (oswa restore) grap ki baze sou yon eta li te ye.
  • Kreye nouvo grap ki baze sou yon eta li te ye.
  • Mete chanjman nan plizyè gwoup OpenShift.
  • Fè chanjman nan plizyè gwoup OpenShift.
  • Lyen konfigirasyon modèl yo nan diferan anviwònman.

Konfigirasyon aplikasyon an

Pandan sik lavi yo, aplikasyon yo souvan pase nan yon chèn grap (dev, etap, elatriye) anvan yo fini nan yon grap pwodiksyon. Anplis de sa, akòz disponiblite ak egzijans évolutivité, kliyan yo souvan deplwaye aplikasyon atravè plizyè gwoup sou lokal oswa plizyè rejyon nan yon platfòm nwaj piblik.

Nan ka sa a, travay sa yo dwe rezoud:

  • Asire mouvman aplikasyon yo (binè, konfigirasyon, elatriye) ant grap (dev, etap, elatriye).
  • Mete chanjman nan aplikasyon yo (binè, konfigirasyon, elatriye) nan plizyè gwoup OpenShift.
  • Retounen chanjman nan aplikasyon yo nan yon eta anvan li te ye.

OpenShift GitOps ka itilize

1. Aplike chanjman ki soti nan depo Git la

Yon administratè gwoup ka estoke konfigirasyon grap OpenShift nan yon depo Git epi otomatikman aplike yo pou kreye nouvo grap san efò epi pote yo nan yon eta ki idantik ak eta li te ye ki estoke nan depo Git la.

2. Synchronization ak Manadjè sekrè

Administratè a pral benefisye tou de kapasite nan senkronize objè sekrè OpenShift ak lojisyèl apwopriye tankou Vault yo nan lòd yo jere yo lè l sèvi avèk zouti ki te kreye espesyalman pou sa.

3. Kontwòl konfigirasyon drift

Administratè a pral sèlman an favè si OpenShift GitOps tèt li idantifye ak avèti sou diferans ki genyen ant konfigirasyon reyèl ak sa ki espesifye nan depo a, pou yo ka byen vit reponn a drift.

4. Notifikasyon sou konfigirasyon drift

Yo itil nan ka a lè administratè a vle byen vit aprann sou ka konfigirasyon drift yo nan lòd yo byen vit pran mezi apwopriye poukont li.

5. Manyèl senkronizasyon nan konfigirasyon lè drifting

Pèmèt administratè a senkronize gwoup OpenShift la ak depo Git nan ka ta gen konfigirasyon drift, pou byen vit retounen gwoup la nan yon eta anvan li te ye.

6.Auto-synchronization nan konfigirasyon lè drifting

Administratè a kapab tou konfigirasyon gwoup OpenShift la otomatikman senkronize ak depo a lè yo detekte yon drift, pou konfigirasyon gwoup la toujou matche ak konfigirasyon yo nan Git.

7. Plizyè grap - yon sèl depo

Administratè a ka estoke konfigirasyon plizyè gwoup OpenShift diferan nan yon sèl depo Git epi aplike yo oaza lè sa nesesè.

8. Yerachi konfigirasyon gwoup (eritaj)

Administratè a ka mete yon yerachi nan konfigirasyon gwoup nan depo a (etap, prod, dosye app, elatriye ak eritaj). Nan lòt mo, li ka detèmine si konfigirasyon yo ta dwe aplike nan youn oswa plis grap.

Pou egzanp, si yon administratè tabli yerachi a "Gwoup pwodiksyon (pwodiksyon) → Gwoup Sistèm X → Gwoup pwodiksyon sistèm X" nan repozitwa Git la, Lè sa a, yon konbinezon de konfigirasyon sa yo aplike nan grap pwodiksyon sistèm X yo:

  • Konfigirasyon komen nan tout grap pwodiksyon yo.
  • Konfigirasyon pou gwoup System X la.
  • Konfigirasyon pou gwoup pwodiksyon sistèm X.

9. Modèl ak konfigirasyon ranplasman

Administratè a ka pase sou yon seri konfigirasyon eritye ak valè yo, pou egzanp, pou ajiste konfigirasyon an pou gwoup espesifik kote yo pral aplike yo.

10. Selektif enkli ak ekskli pou konfigirasyon, konfigirasyon aplikasyon

Administratè a ka mete kondisyon yo pou aplikasyon an oswa ki pa aplikasyon nan sèten konfigirasyon nan grap ki gen sèten karakteristik.

11. Modèl sipò

Devlopè yo pral benefisye de kapasite pou yo chwazi ki jan resous aplikasyon yo pral defini (Helm Chart, pi Kubernetes yaml, elatriye) yo nan lòd yo sèvi ak fòma ki pi apwopriye pou chak aplikasyon espesifik.

Zouti GitOps sou platfòm OpenShift la

ArgoCD

ArgoCD aplike modèl Ekstèn Resous Reconcile epi li ofri yon entèfas santralize pou òkestre relasyon youn-a-anpil ant grap ak depo Git. Dezavantaj yo nan pwogram sa a gen ladan enkapasite nan jere aplikasyon lè ArgoCD pa travay.

Ofisyèl sou sit wèb

Règ

Flux aplike yon modèl rekonsilyasyon Resous On-Cluster epi, kòm yon rezilta, pa gen okenn jesyon santralize nan depo definisyon an, ki se yon pwen fèb. Nan lòt men an, jisteman akòz mank nan santralizasyon, kapasite nan jere aplikasyon yo rete menm si yon gwoup echwe.

Ofisyèl sou sit wèb

Enstale ArgoCD sou OpenShift

ArgoCD ofri yon ekselan koòdone liy lòd ak konsole entènèt, kidonk nou pa pral kouvri Flux ak lòt altènativ isit la.

Pou deplwaye ArgoCD sou platfòm OpenShift 4, swiv etap sa yo kòm yon administratè gwoup:

Deplwaye konpozan ArgoCD sou platfòm OpenShift la

# 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}')

Amelyorasyon nan sèvè ArgoCD pou ke li ka wè pa OpenShift Route

# 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

Deplwaye zouti ArgoCD Cli

# 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

Chanje modpas administratè ArgoCD sèvè 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

Apre w fin ranpli etap sa yo, ou ka travay avèk ArgoCD Server atravè konsole entènèt ArgoCD WebUI oswa zouti liy lòd ArgoCD Cli.
https://blog.openshift.com/is-it-too-late-to-integrate-gitops/

GitOps - Li pa janm twò ta

"Tren an te kite" - sa a se sa yo di sou yon sitiyasyon lè opòtinite pou fè yon bagay rate. Nan ka OpenShift, dezi a imedyatman kòmanse itilize nouvo platfòm fre sa a souvan kreye egzakteman sitiyasyon sa a ak jesyon ak antretyen nan wout, deplwaman ak lòt objè OpenShift. Men, èske chans lan toujou pèdi nèt?

Kontinye seri atik sou GitOps, jodi a nou pral montre w kouman pou transfòme yon aplikasyon atizanal ak resous li yo nan yon pwosesis kote tout bagay se jere pa zouti GitOps. Pou fè sa, nou pral premye manyèlman deplwaye aplikasyon httpd la. Ekran ki anba a montre kouman nou kreye yon espas non, deplwaman ak sèvis, epi answit ekspoze sèvis sa a pou kreye yon wout.

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

Se konsa, nou gen yon aplikasyon atizanal. Koulye a, li bezwen yo dwe transfere anba jesyon GitOps san pèt disponiblite. Nan ti bout tan, li fè sa:

  • Kreye yon depo Git pou kòd la.
  • Nou ekspòte objè aktyèl nou yo epi telechaje yo nan repozitwa Git la.
  • Chwazi ak deplwaye zouti GitOps.
  • Nou ajoute repozitwa nou an nan bwat zouti sa a.
  • Nou defini aplikasyon an nan bwat zouti GitOps nou an.
  • Nou fè yon tès aplikasyon pou itilize zouti GitOps la.
  • Nou senkronize objè lè l sèvi avèk zouti GitOps la.
  • Pèmèt koupe ak oto-synchronization nan objè yo.

Kòm mansyone nan anvan an Atik, nan GitOps gen yon sèl ak yon sèl sous enfòmasyon sou tout objè yo nan gwoup Kubernetes (yo) - depo Git la. Apre sa, nou soti nan site la ke òganizasyon ou deja itilize yon depo Git. Li kapab piblik oswa prive, men li dwe aksesib pou gwoup Kubernetes. Sa a ka menm depo a kòm pou kòd aplikasyon an, oswa yon depo separe ki te kreye espesyalman pou deplwaman. Li rekòmande pou gen otorizasyon strik nan depo a paske sekrè, wout, ak lòt bagay ki sansib pou sekirite yo pral estoke la.

Nan egzanp nou an, nou pral kreye yon nouvo depo piblik sou GitHub. Ou ka rele li kèlkeswa sa ou renmen, nou itilize non blogpost la.

Si fichye objè YAML yo pa te estoke lokalman oswa nan Git, Lè sa a, w ap oblije itilize binè oc oswa kubectl yo. Nan ekran ki anba a nou ap mande YAML pou espas non, deplwaman, sèvis ak wout nou an. Anvan sa, nou klonaj repozitwa ki fèk kreye ak CD nan li.

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

Koulye a, ann edite fichye deployment.yaml pou retire jaden Argo CD pa ka senkronize.

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

Anplis de sa, wout la bezwen chanje. Nou pral premye mete yon varyab multiliy ak Lè sa a, ranplase antre: nil ak sa ki nan varyab sa a.

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

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

Se konsa, nou te klase dosye yo, tout sa ki rete se sove yo nan repozitwa Git la. Apre sa depo sa a vin sèl sous enfòmasyon, epi nenpòt chanjman manyèl nan objè yo ta dwe entèdi entèdi.

git commit -am ‘initial commit of objects’
git push origin master

Pli lwen nou soti nan lefèt ke ou te deja deplwaye ArgoCD (ki jan fè sa - gade anvan an pòs). Se poutèt sa, nou pral ajoute nan CD Argo a depo nou kreye a, ki gen kòd aplikasyon an nan egzanp nou an. Jis asire w ke ou presize depo egzak ke ou te kreye pi bonè.

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

Koulye a, ann kreye aplikasyon an. Aplikasyon an fikse valè pou kit zouti GitOps la konprann ki depo ak chemen pou itilize, ki OpenShift ki nesesè pou jere objè, ki branch espesifik depo a ki nesesè, epi si resous yo ta dwe oto-sync.

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

Yon fwa yo espesifye yon aplikasyon nan CD Argo a, bwat zouti a kòmanse tcheke objè ki deja deplwaye ak definisyon ki nan depo a. Nan egzanp nou an, oto-sync ak netwayaj yo enfim, kidonk eleman yo pa chanje ankò. Tanpri sonje ke nan koòdone Argo CD aplikasyon nou an ap gen estati "Out of Sync" paske pa gen okenn etikèt ki ArgoCD bay.
Se poutèt sa lè nou kòmanse senkronizasyon yon ti kras pita, objè yo pa pral redeplwaye.

Koulye a, an n fè yon tès kouri pou asire w ke pa gen okenn erè nan dosye nou yo.

argocd app sync simple-app --dry-run

Si pa gen okenn erè, Lè sa a, ou ka kontinye nan senkronizasyon.

argocd app sync simple-app

Apre w fin kouri lòd argocd get nan aplikasyon nou an, nou ta dwe wè ke estati aplikasyon an chanje an Healthy oswa Synced. Sa a pral vle di ke tout resous ki nan depo Git la kounye a koresponn ak resous sa yo ki te deja deplwaye.

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

Koulye a, ou ka pèmèt oto-sync ak netwayaj asire ke pa gen anyen yo kreye manyèlman epi ke chak fwa yo kreye yon objè oswa mete ajou nan depo a, yon deplwaman pral fèt.

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

Se konsa, nou te pote avèk siksè yon aplikasyon anba kontwòl GitOps ki okòmansman pa t 'sèvi ak GitOps nan okenn fason.

Sous: www.habr.com

Add nouvo kòmantè