Leo tutazungumzia kuhusu kanuni na mifano ya GitOps, pamoja na jinsi mifano hii inatekelezwa kwenye jukwaa la OpenShift. Mwongozo wa mwingiliano juu ya mada hii unapatikana
Kwa kifupi, GitOps ni seti ya mazoea ya kutumia maombi ya kuvuta ya Git kudhibiti miundombinu na usanidi wa programu. Hifadhi ya Git katika GitOps inachukuliwa kama chanzo kimoja cha habari kuhusu hali ya mfumo, na mabadiliko yoyote katika hali hii yanaweza kufuatiliwa kikamilifu na kukaguliwa.
Wazo la ufuatiliaji wa mabadiliko katika GitOps sio mpya; njia hii imetumika kwa muda mrefu karibu ulimwenguni kote wakati wa kufanya kazi na nambari ya chanzo cha programu. GitOps hutekelezea tu vipengele sawa (ukaguzi, maombi ya kuvuta, lebo, n.k.) katika miundombinu na usimamizi wa usanidi wa programu na hutoa manufaa sawa na katika usimamizi wa msimbo wa chanzo.
Hakuna ufafanuzi wa kitaaluma au seti iliyoidhinishwa ya sheria za GitOps, seti ya kanuni tu ambayo mazoezi haya yamejengwa:
- Maelezo ya kutangaza mfumo yamehifadhiwa kwenye hazina ya Git (mipangilio, ufuatiliaji, nk).
- Mabadiliko ya serikali hufanywa kupitia maombi ya kuvuta.
- Hali ya mifumo inayoendesha inaletwa sambamba na data kwenye hazina kwa kutumia maombi ya kushinikiza ya Git.
Kanuni za GitOps
- Ufafanuzi wa mfumo unaelezewa kama msimbo wa chanzo
Usanidi wa mifumo huchukuliwa kama msimbo ili iweze kuhifadhiwa na kubadilishwa kiotomatiki kwenye hazina ya Git, ambayo hutumika kama chanzo kimoja cha ukweli. Mbinu hii hurahisisha kusambaza na kurejesha mabadiliko katika mifumo.
- Hali inayotakiwa na usanidi wa mifumo umewekwa na kubadilishwa katika Git
Kwa kuhifadhi na kubadilisha hali inayotakiwa ya mifumo katika Git, tunaweza kusambaza kwa urahisi na kurejesha mabadiliko kwenye mifumo na programu. Tunaweza pia kutumia njia za usalama za Git kudhibiti umiliki wa msimbo na kuthibitisha uhalisi wake.
- Mabadiliko ya usanidi yanaweza kutumika kiotomatiki kupitia maombi ya kuvuta
Kwa kutumia ombi la Git kuvuta, tunaweza kudhibiti kwa urahisi jinsi mabadiliko yanatumika kwa usanidi kwenye hazina. Kwa mfano, zinaweza kutolewa kwa washiriki wengine wa timu kwa ukaguzi au kuendeshwa kupitia majaribio ya CI, nk.
Na wakati huo huo, hakuna haja ya kusambaza nguvu za admin kushoto na kulia. Ili kufanya mabadiliko ya usanidi, watumiaji wanahitaji tu ruhusa zinazofaa kwenye hazina ya Git ambapo usanidi huo huhifadhiwa.
- Kurekebisha tatizo la kuteleza bila kudhibitiwa kwa usanidi
Mara tu hali inayotakiwa ya mfumo inapohifadhiwa kwenye hazina ya Git, tunachopaswa kufanya ni kupata programu ambayo itahakikisha kwamba hali ya sasa ya mfumo inalingana na hali inayotaka. Ikiwa sivyo, basi programu hii inapaswa - kulingana na mipangilio - iondoe tofauti yenyewe, au itujulishe kuhusu drift ya usanidi.
Miundo ya GitOps ya OpenShift
Kiunganishi cha Rasilimali kwenye Nguzo
Kulingana na muundo huu, nguzo ina kidhibiti ambacho kina jukumu la kulinganisha rasilimali za Kubernetes (faili za YAML) kwenye hazina ya Git na rasilimali halisi za nguzo. Ikiwa utofauti utagunduliwa, kidhibiti hutuma arifa na ikiwezekana kuchukua hatua kurekebisha hitilafu hizo. Mtindo huu wa GitOps unatumika katika Anthos Config Management na Weaveworks Flux.
Kipatanishi cha Rasilimali za Nje (Push)
Muundo huu unaweza kuzingatiwa kama badiliko la ule uliopita, tunapokuwa na kidhibiti kimoja au zaidi kinachowajibika kusawazisha rasilimali katika jozi za "Git there - Kubernetes cluster". Tofauti hapa ni kwamba kila nguzo inayosimamiwa sio lazima iwe na kidhibiti chake tofauti. Jozi za nguzo za Git - k8s mara nyingi hufafanuliwa kama CRDs (ufafanuzi wa rasilimali maalum), ambayo inaweza kuelezea jinsi kidhibiti kinapaswa kufanya ulandanishi. Ndani ya muundo huu, vidhibiti vinalinganisha hazina ya Git iliyobainishwa katika CRD na rasilimali za nguzo ya Kubernetes, ambazo pia zimebainishwa katika CRD, na kufanya vitendo vinavyofaa kulingana na matokeo ya ulinganisho. Hasa, mfano huu wa GitOps hutumiwa katika ArgoCD.
GitOps kwenye jukwaa la OpenShift
Usimamizi wa miundombinu ya vikundi vingi vya Kubernetes
Pamoja na kuenea kwa Kubernetes na umaarufu unaokua wa mikakati ya wingu nyingi na kompyuta makali, wastani wa idadi ya vikundi vya OpenShift kwa kila mteja pia inaongezeka.
Kwa mfano, unapotumia kompyuta makali, vikundi vya mteja mmoja vinaweza kutumwa kwa mamia au hata maelfu. Kama matokeo, analazimika kudhibiti vikundi kadhaa vya OpenShift vilivyo huru au vilivyoratibiwa kwenye wingu la umma na kwenye msingi.
Katika kesi hii, shida nyingi zinapaswa kutatuliwa, haswa:
- Dhibiti kwamba vikundi viko katika hali inayofanana (mipangilio, ufuatiliaji, uhifadhi, n.k.)
- Unda upya (au rejesha) makundi kulingana na hali inayojulikana.
- Unda makundi mapya kulingana na hali inayojulikana.
- Toa mabadiliko kwa vikundi vingi vya OpenShift.
- Rudisha mabadiliko kwenye vishada vingi vya OpenShift.
- Unganisha usanidi wa violezo kwa mazingira tofauti.
Mipangilio ya Programu
Wakati wa mzunguko wao wa maisha, programu mara nyingi hupitia msururu wa makundi (dev, hatua, n.k.) kabla ya kuishia katika kundi la uzalishaji. Kwa kuongezea, kwa sababu ya upatikanaji na mahitaji ya kuongeza kasi, wateja mara nyingi hutuma programu kwenye vikundi vingi vya juu-msingi au maeneo mengi ya jukwaa la wingu la umma.
Katika kesi hii, kazi zifuatazo zinapaswa kutatuliwa:
- Hakikisha uhamishaji wa programu (binaries, usanidi, n.k.) kati ya vikundi (dev, hatua, n.k.).
- Toa mabadiliko kwa programu (mbinu, usanidi, n.k.) katika vikundi kadhaa vya OpenShift.
- Rejesha mabadiliko kwa programu kwa hali inayojulikana hapo awali.
Kesi za Matumizi ya OpenShift GitOps
1. Kutumia mabadiliko kutoka kwa hazina ya Git
Msimamizi wa nguzo anaweza kuhifadhi usanidi wa nguzo za OpenShift kwenye hazina ya Git na kuzitumia kiotomatiki kuunda vikundi vipya bila shida na kuzileta katika hali inayofanana na hali inayojulikana iliyohifadhiwa kwenye hazina ya Git.
2. Usawazishaji na Meneja wa Siri
Msimamizi pia atafaidika kutokana na uwezo wa kusawazisha vitu vya siri vya OpenShift na programu inayofaa kama Vault ili kuvidhibiti kwa kutumia zana zilizoundwa mahususi kwa hili.
3. Udhibiti wa usanidi wa drift
Msimamizi atakubali tu ikiwa OpenShift GitOps yenyewe itatambua na kuonya kuhusu utofauti kati ya usanidi halisi na ule uliobainishwa kwenye hazina, ili waweze kujibu kwa haraka kwa kuteleza.
4. Arifa kuhusu kuteleza kwa usanidi
Ni muhimu katika kesi wakati msimamizi anataka kujifunza haraka juu ya kesi za kuteleza kwa usanidi ili kuchukua hatua zinazofaa peke yake.
5. Usawazishaji wa mikono wa usanidi wakati wa kuteleza
Huruhusu msimamizi kusawazisha nguzo ya OpenShift na hazina ya Git katika tukio la kuteleza kwa usanidi, ili kurudisha kundi hilo kwa hali inayojulikana hapo awali.
6. Usawazishaji wa kiotomatiki wa usanidi wakati wa kusogea
Msimamizi pia anaweza kusanidi nguzo ya OpenShift ili kusawazisha kiotomatiki na hazina wakati mteremko unapogunduliwa, ili usanidi wa nguzo ulingane na usanidi katika Git kila wakati.
7. Nguzo kadhaa - hifadhi moja
Msimamizi anaweza kuhifadhi usanidi wa nguzo kadhaa tofauti za OpenShift kwenye hazina moja ya Git na kuzitumia kwa kuchagua inavyohitajika.
8. Daraja la usanidi wa nguzo (urithi)
Msimamizi anaweza kuweka safu ya usanidi wa vikundi kwenye hazina (hatua, prod, jalada la programu, n.k. pamoja na urithi). Kwa maneno mengine, inaweza kuamua ikiwa usanidi unapaswa kutumika kwa nguzo moja au zaidi.
Kwa mfano, ikiwa msimamizi ataweka daraja la "Vikundi vya uzalishaji (prod) → Nguzo za Mfumo X → Nguzo za uzalishaji za mfumo X" kwenye hazina ya Git, basi mchanganyiko wa usanidi ufuatao unatumika kwa vikundi vya uzalishaji vya mfumo X:
- Inasanidi kawaida kwa vikundi vyote vya uzalishaji.
- Mipangilio ya nguzo ya Mfumo X.
- Mipangilio ya kundi la uzalishaji wa mfumo wa X.
9. Violezo na usanidi hubatilishwa
Msimamizi anaweza kubatilisha seti ya usanidi uliorithiwa na thamani zake, kwa mfano, kurekebisha usanidi kwa makundi maalum ambayo yatatumika.
10. Kuchagua ni pamoja na na kutenga kwa usanidi, usanidi wa programu
Msimamizi anaweza kuweka masharti ya utumaji au kutotumia usanidi fulani kwa vikundi vyenye sifa fulani.
11. Msaada wa kiolezo
Wasanidi programu watafaidika kutokana na uwezo wa kuchagua jinsi rasilimali za programu zitakavyofafanuliwa (Chati ya Helm, Kubernetes yaml safi, n.k.) ili kutumia umbizo linalofaa zaidi kwa kila programu mahususi.
Zana za GitOps kwenye jukwaa la OpenShift
ArgoCD
ArgoCD inatekeleza modeli ya Upatanisho wa Rasilimali za Nje na inatoa UI ya kati kwa ajili ya kupanga uhusiano wa moja hadi nyingi kati ya makundi na hazina za Git. Hasara za programu hii ni pamoja na kutokuwa na uwezo wa kusimamia programu wakati ArgoCD haifanyi kazi.
Flux
Flux hutumia kielelezo cha Upatanisho wa Rasilimali Kwenye Nguzo na, kwa hivyo, hakuna usimamizi wa kati wa hazina ya ufafanuzi, ambayo ni hatua dhaifu. Kwa upande mwingine, haswa kwa sababu ya ukosefu wa ujumuishaji, uwezo wa kusimamia programu unabaki hata ikiwa nguzo moja itashindwa.
Kufunga ArgoCD kwenye OpenShift
ArgoCD inatoa kiolesura bora cha mstari wa amri na kiweko cha wavuti, kwa hivyo hatutashughulikia Flux na njia zingine mbadala hapa.
Ili kupeleka ArgoCD kwenye jukwaa la OpenShift 4, fuata hatua hizi kama msimamizi wa nguzo:
Inapeleka vipengele vya ArgoCD kwenye jukwaa la OpenShift
# 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}')
Uboreshaji wa Seva ya ArgoCD ili iweze kuonekana na Njia ya OpenShift
# 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
Inapeleka ArgoCD Cli Tool
# 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
Kubadilisha nenosiri la msimamizi wa Seva ya ArgoCD
# 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
Baada ya kukamilisha hatua hizi, unaweza kufanya kazi na ArgoCD Server kupitia koni ya wavuti ya ArgoCD WebUI au zana ya mstari wa amri ya ArgoCD Cli.
GitOps - Haijachelewa
"Treni imeondoka" - hivi ndivyo wanasema juu ya hali wakati nafasi ya kufanya kitu imekosa. Kwa upande wa OpenShift, hamu ya kuanza mara moja kutumia jukwaa hili jipya la baridi mara nyingi hujenga hali hii hasa kwa usimamizi na matengenezo ya njia, upelekaji na vitu vingine vya OpenShift. Lakini je, nafasi hiyo huwa inapotea kabisa?
Kuendelea mfululizo wa makala kuhusu
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
Kwa hivyo tunayo programu iliyotengenezwa kwa mikono. Sasa inahitaji kuhamishwa chini ya usimamizi wa GitOps bila kupoteza upatikanaji. Kwa kifupi, hufanya hivi:
- Unda hazina ya Git ya nambari.
- Tunasafirisha vitu vyetu vya sasa na kuvipakia kwenye hazina ya Git.
- Kuchagua na kupeleka zana za GitOps.
- Tunaongeza hazina yetu kwenye zana hii ya zana.
- Tunafafanua programu katika zana yetu ya zana za GitOps.
- Tunafanya jaribio la programu kwa kutumia zana ya GitOps.
- Tunasawazisha vitu kwa kutumia zana ya GitOps.
- Washa kupogoa na kusawazisha kiotomatiki kwa vitu.
Kama ilivyotajwa hapo awali
Katika mfano wetu, tutaunda hazina mpya ya umma kwenye GitHub. Unaweza kuiita chochote unachopenda, tunatumia jina la blogi.
Ikiwa faili za kitu cha YAML hazikuhifadhiwa ndani au kwenye Git, basi itabidi utumie jozi za oc au kubectl. Katika picha ya skrini iliyo hapa chini, tunaomba YAML kwa nafasi yetu ya majina, matumizi, huduma na njia. Kabla ya hii, tulitengeneza hazina mpya iliyoundwa na cd ndani yake.
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
Sasa hebu tuhariri faili ya deployment.yaml ili kuondoa sehemu ambayo Argo CD haiwezi kusawazisha.
sed -i '/sgeneration: .*/d' deployment.yaml
Kwa kuongeza, njia inahitaji kubadilishwa. Kwanza tutaweka utofauti wa laini nyingi kisha ubadilishe ingress: null na yaliyomo kwenye kigezo hicho.
export ROUTE=" ingress:
- conditions:
- status: 'True'
type: Admitted"
sed -i "s/ ingress: null/$ROUTE/g" route.yaml
Kwa hivyo, tumepanga faili, kilichobaki ni kuzihifadhi kwenye hazina ya Git. Baada ya hapo hifadhi hii inakuwa chanzo pekee cha habari, na mabadiliko yoyote ya mwongozo kwa vitu yanapaswa kupigwa marufuku kabisa.
git commit -am ‘initial commit of objects’
git push origin master
Zaidi tunaendelea na ukweli kwamba tayari umetuma ArgoCD (jinsi ya kufanya hivyo - tazama uliopita
argocd repo add https://github.com/cooktheryan/blogpost
Sasa hebu tuunde programu. Programu huweka thamani ili zana ya zana ya GitOps ielewe ni hazina gani na njia za kutumia, ambazo OpenShift inahitajika ili kudhibiti vitu, ni tawi gani mahususi la hazina linahitajika, na kama rasilimali zinapaswa kusawazishwa kiotomatiki.
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
Mara baada ya programu kubainishwa katika Argo CD, zana ya zana huanza kuangalia vitu vilivyotumika tayari dhidi ya ufafanuzi kwenye hazina. Katika mfano wetu, usawazishaji otomatiki na usafishaji umezimwa, kwa hivyo vipengee bado havibadiliki. Tafadhali kumbuka kuwa katika kiolesura cha Argo CD programu yetu itakuwa na hali ya "Haijasawazishwa" kwa sababu hakuna lebo ambayo ArgoCD hutoa.
Hii ndiyo sababu tunapoanza kusawazisha baadaye kidogo, vitu havitatumwa tena.
Sasa hebu tufanye jaribio ili kuhakikisha kuwa hakuna makosa katika faili zetu.
argocd app sync simple-app --dry-run
Ikiwa hakuna makosa, basi unaweza kuendelea na maingiliano.
argocd app sync simple-app
Baada ya kutekeleza amri ya kupata argocd kwenye programu yetu, tunapaswa kuona kwamba hali ya programu imebadilika kuwa Healthy au Synced. Hii itamaanisha kuwa rasilimali zote kwenye hazina ya Git sasa zinalingana na rasilimali hizo ambazo tayari zimetumwa.
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
...
Sasa unaweza kuwezesha kusawazisha na kusafisha kiotomatiki ili kuhakikisha kuwa hakuna kitu kinachoundwa kwa mikono na kwamba kila wakati kitu kinapoundwa au kusasishwa kwenye hazina, uwekaji utafanyika.
argocd app set simple-app --sync-policy automated --auto-prune
Kwa hivyo, tumefaulu kuleta programu chini ya udhibiti wa GitOps ambayo hapo awali haikutumia GitOps kwa njia yoyote.
Chanzo: mapenzi.com