I kēia lā e kamaʻilio mākou e pili ana i nā loina a me nā hiʻohiʻona o GitOps, a me ke ʻano o ka hoʻokō ʻia ʻana o kēia mau hiʻohiʻona ma ka platform OpenShift. Loaʻa kahi alakaʻi pili i kēia kumuhana
I ka pōkole, ʻo GitOps kahi hoʻonohonoho o nā hana no ka hoʻohana ʻana i nā noi huki Git e hoʻokele i nā ʻōnaehana a me nā hoʻonohonoho noi. Hana ʻia ka waihona Git ma GitOps ma ke ʻano he kumu hoʻokahi o ka ʻike e pili ana i ka mokuʻāina o ka ʻōnaehana, a ʻo nā hoʻololi i kēia mokuʻāina e hiki ke ʻike ʻia a hiki ke loiloi.
ʻAʻole hou ka manaʻo o ka hoʻololi ʻana i ka nānā ʻana ma GitOps; ua hoʻohana lōʻihi ʻia kēia ala kokoke i ke ao holoʻokoʻa i ka wā e hana ai me ka code source code. Hoʻokomo wale ʻo GitOps i nā hiʻohiʻona like (nā loiloi, nā noi huki, nā inoa, a me nā mea ʻē aʻe) i ka hoʻokele waiwai a me ka hoʻonohonoho hoʻonohonoho noiʻi a hāʻawi i nā pōmaikaʻi like e like me ka hoʻokele code source.
ʻAʻohe wehewehe hoʻonaʻauao a i ʻole hoʻonohonoho ʻia o nā lula no GitOps, he pūʻulu kumu wale nō i kūkulu ʻia ai kēia hana:
- Mālama ʻia ka wehewehe ʻana o ka ʻōnaehana i ka waihona Git (configs, monitoring, etc.).
- Hoʻololi ʻia ka mokuʻāina ma o nā noi huki.
- Hoʻopili ʻia ke kūlana o nā ʻōnaehana holo me ka ʻikepili i loko o ka waihona me ka hoʻohana ʻana i nā noi pana Git.
Nā Kuʻuna GitOps
- Hōʻike ʻia nā wehewehe ʻōnaehana ma ke ʻano he kumu kumu
Hana ʻia ka hoʻonohonoho ʻōnaehana ma ke ʻano he code i hiki ke mālama ʻia a hoʻololi ʻia i loko o kahi waihona Git, kahi kumu hoʻokahi o ka ʻoiaʻiʻo. ʻO kēia ala e maʻalahi ai ka rollout a rollback hoʻololi i nā ʻōnaehana.
- Hoʻonohonoho ʻia a hoʻololi ʻia ka mokuʻāina a me ka hoʻonohonoho ʻana o nā ʻōnaehana ma Git
Ma ka mālama ʻana a me ka hoʻololi ʻana i ke kūlana o nā ʻōnaehana i makemake ʻia ma Git, hiki iā mākou ke ʻōwili maʻalahi a hoʻihoʻi i nā loli i nā ʻōnaehana a me nā noi. Hiki iā mākou ke hoʻohana i nā mīkini palekana o Git e hoʻomalu i ka mana code a hōʻoia i kona ʻoiaʻiʻo.
- Hiki ke hoʻohana ʻia nā hoʻololi hoʻonohonoho ma o nā noi huki
Ke hoʻohana nei i nā noi huki Git, hiki iā mākou ke hoʻokele maʻalahi i ke ʻano o ka hoʻololi ʻana i nā hoʻonohonoho i loko o ka waihona. No ka laʻana, hiki ke hāʻawi ʻia i nā lālā hui ʻē aʻe no ka loiloi a holo ʻana ma o nā hoʻokolohua CI, etc.
A i ka manawa like, ʻaʻohe pono e puʻunaue i nā mana admin ma ka hema a me ka ʻākau. No ka hana ʻana i nā hoʻololi hoʻonohonoho, pono nā mea hoʻohana i nā ʻae kūpono i ka waihona Git kahi i mālama ʻia ai kēlā mau hoʻonohonoho.
- Hoʻoponopono i ka pilikia o ka hoʻokele ʻole ʻia o nā hoʻonohonoho
Ke mālama ʻia ke kūlana i makemake ʻia o ka ʻōnaehana i loko o kahi waihona Git, ʻo kā mākou mea e hana ai, ʻo ka loaʻa ʻana o nā polokalamu e hōʻoia i ke kūlana o kēia manawa o ka ʻōnaehana i kona kūlana makemake. Inā ʻaʻole kēia ka hihia, pono kēia polokalamu - e pili ana i nā hoʻonohonoho - e hoʻopau i ka ʻokoʻa ma kāna iho, a i ʻole e haʻi mai iā mākou e pili ana i ka drift hoʻonohonoho.
Nā Hoʻohālike GitOps no OpenShift
Ma-Cluster Reconciler Punawai
Wahi a kēia kŘkohu, loaʻa i ka puʻupuʻu kahi mea hoʻoponopono nāna ke kuleana no ka hoʻohālikelike ʻana i nā kumuwaiwai Kubernetes (faila YAML) ma ka waihona Git me nā kumuwaiwai maoli o ka pūʻulu. Inā ʻike ʻia nā ʻokoʻa, hoʻouna ka mea hoʻoponopono i nā leka hoʻomaopopo a hana paha i ka hana e hoʻoponopono ai i nā ʻokoʻa. Hoʻohana ʻia kēia hiʻohiʻona GitOps ma Anthos Config Management a me Weaveworks Flux.
Mea hoʻoponopono waiwai o waho (Push)
Hiki ke noʻonoʻo ʻia kēia kŘkohu ma ke ʻano he hoʻololi ʻana o ka mea ma mua, ke loaʻa iā mākou hoʻokahi a ʻoi aku paha nā mea hoʻoponopono i kuleana no ka hoʻonohonoho pono ʻana i nā kumuwaiwai i loko o ka "Git repository - Kubernetes cluster". ʻO ka ʻokoʻa ma ʻaneʻi, ʻaʻole pono kēlā me kēia pūʻulu hoʻokele i kāna mea hoʻoponopono kaʻawale. ʻO Git - ʻo nā hui hui k8s i wehewehe pinepine ʻia ʻo CRDs (nā wehewehe kumu waiwai maʻamau), hiki ke wehewehe i ke ʻano o ka hoʻokō ʻana i ka hoʻonohonoho ʻana. I loko o kēia kŘkohu, hoʻohālikelike nā mea hoʻoponopono i ka waihona Git i hōʻike ʻia ma ka CRD me nā kumu waiwai puʻupuʻu Kubernetes, i kuhikuhi pū ʻia ma CRD, a hana i nā hana kūpono e pili ana i nā hopena o ka hoʻohālikelike. ʻO ka mea kūikawā, hoʻohana ʻia kēia ʻano GitOps ma ArgoCD.
GitOps ma ke kahua OpenShift
ʻO ka hoʻokele ʻana i nā ʻōnaehana Kubernetes multi-cluster
Me ka hoʻolaha ʻana o Kubernetes a me ka ulu nui ʻana o nā hoʻolālā multi-cloud a me ka computing edge, ke piʻi nei ka awelika o nā pūʻulu OpenShift i kēlā me kēia mea kūʻai.
No ka laʻana, i ka hoʻohana ʻana i ka computing edge, hiki ke kau ʻia nā pūʻulu o ka mea kūʻai aku i nā haneli a i ʻole mau tausani. ʻO ka hopena, koi ʻia ʻo ia e hoʻokele i kekahi mau pūʻulu OpenShift kūʻokoʻa a i hui pū ʻia ma ke ao ākea a ma ka hale.
I kēia hihia, pono e hoʻoponopono ʻia nā pilikia he nui, ʻo ia hoʻi:
- E mālama i nā pūʻulu i kahi kūlana like (configs, nānā, mālama, etc.)
- Hana hou (a hoʻihoʻi) i nā pūʻulu ma muli o kahi mokuʻāina i ʻike ʻia.
- E hana i nā pūʻulu hou e pili ana i kahi mokuʻāina i ʻike ʻia.
- E hoʻololi i nā hoʻololi i nā pūʻulu OpenShift he nui.
- E hoʻololi i nā loli ma waena o nā pūʻulu OpenShift he nui.
- Hoʻopili i nā hoʻonohonoho maʻamau i nā kaiapuni like ʻole.
Nā hoʻonohonoho hoʻohana
I ko lākou ola ʻana, hele pinepine nā noi i ke kaulahao o nā pūʻulu (dev, stage, etc.) ma mua o ka pau ʻana i kahi pūʻulu hana. Eia kekahi, ma muli o ka loaʻa ʻana a me nā koi scalability, hoʻolaha pinepine nā mea kūʻai aku i nā noi ma waena o nā puʻupuʻu lehulehu a i ʻole nā ʻāpana he nui o kahi paepae kapuaʻi lehulehu.
I kēia hihia, pono e hoʻoholo i nā hana i lalo:
- E hōʻoia i ka neʻe ʻana o nā noi (binaries, configs, etc.) ma waena o nā pūpū (dev, stage, etc.).
- E hoʻololi i nā hoʻololi i nā noi (binaries, configs, etc.) i kekahi mau pūʻulu OpenShift.
- E hoʻololi i nā hoʻololi i nā noi i kahi mokuʻāina i ʻike mua ʻia.
OpenShift GitOps hoʻohana i nā hihia
1. Ke noi nei i nā hoʻololi mai ka waihona Git
Hiki i ka luna hoʻomalu hui ke mālama i nā hoʻonohonoho pūʻulu OpenShift i loko o kahi waihona Git a hoʻohana maʻalahi iā lākou e hana maʻalahi i nā pūʻulu hou a lawe iā lākou i kahi mokuʻāina i ʻike ʻia i mālama ʻia ma ka waihona Git.
2. Hoʻonohonoho pū me ka Mana huna
E pōmaikaʻi ka luna hoʻomalu mai ka hiki ke hoʻonohonoho i nā mea huna OpenShift me nā polokalamu kūpono e like me Vault i mea e hoʻokele ai iā lākou me ka hoʻohana ʻana i nā mea hana i hana ʻia no kēia.
3. Ka hoomalu ana i na hoonohonoho drift
E ʻoluʻolu wale ka luna inā ʻike ʻo OpenShift GitOps iā ia iho a ʻōlelo e pili ana i nā ʻokoʻa ma waena o nā hoʻonohonoho maoli a me nā mea i kuhikuhi ʻia i loko o ka waihona, i hiki iā lākou ke pane koke i ka drift.
4. Nā leka hoʻomaopopo e pili ana i ka drift hoʻonohonoho
Pono lākou i ka hihia inā makemake ka luna e aʻo koke e pili ana i nā hihia o ka drift hoʻonohonoho i mea e lawe koke ai i nā hana kūpono iā ia iho.
5. Hoʻonohonoho lima lima o nā hoʻonohonoho i ka wā e neʻe ana
E ʻae i ka luna hoʻoponopono e hoʻonohonoho i ka pūʻulu OpenShift me ka waihona Git i ka wā o ka neʻe ʻana o ka hoʻonohonoho, e hoʻihoʻi koke i ka pūʻulu i kahi mokuʻāina i ʻike mua ʻia.
6.Auto-synchronization o nā hoʻonohonoho i ka wā e holo ana
Hiki i ka luna hoʻonohonoho ke hoʻonohonoho i ka pūʻulu OpenShift e hui pū me ka waihona i ka wā e ʻike ʻia ai kahi drift, i kūpono mau ka hoʻonohonoho cluster i nā configs ma Git.
7. He mau pūʻulu - hoʻokahi waihona
Hiki i ka luna hoʻomalu ke mālama i nā hoʻonohonoho o nā pūʻulu OpenShift like ʻole i hoʻokahi waihona Git a koho pono iā lākou e like me ka mea e pono ai.
8. ʻO ka hierarchy o nā hoʻonohonoho pūʻulu (hoʻoilina)
Hiki i ka luna ke hoʻonohonoho i kahi hierarchy o nā hoʻonohonoho cluster i loko o ka waihona (pae, prod, app portfolio, etc. me ka hoʻoilina). I nā huaʻōlelo ʻē aʻe, hiki iā ia ke hoʻoholo inā pono e hoʻopili ʻia nā hoʻonohonoho i hoʻokahi a ʻoi aku paha nā pūʻulu.
No ka laʻana, inā hoʻonohonoho ka luna hoʻonohonoho i ka hierarchy "Production clusters (prod) → System X clusters → Production clusters of system X" i loko o ka waihona Git, a laila hoʻopili ʻia kahi hui o kēia mau configs i nā pūʻulu hana o ka ʻōnaehana X:
- Confis maʻamau i nā pūʻulu hana a pau.
- Hoʻopili no ka pūʻulu Pūnaehana X.
- Configs no ka pūʻulu hana ʻōnaehana X.
9. Hoʻopau nā templates a me ka hoʻonohonoho hoʻonohonoho
Hiki i ka luna hoʻomalu ke hoʻopau i kahi pūʻulu o nā configs hoʻoilina a me kā lākou mau waiwai, no ka laʻana, e hoʻoponopono maikaʻi i ka hoʻonohonoho no nā pūʻulu kikoʻī kahi e hoʻohana ʻia ai.
10. Hoʻokomo a kāpae ʻia no nā hoʻonohonoho, nā hoʻonohonoho noi
Hiki i ka luna hoʻoponopono ke hoʻonohonoho i nā kūlana no ka noi a i ʻole ka hoʻohana ʻole ʻana i kekahi mau hoʻonohonoho i nā pūʻulu me kekahi mau hiʻohiʻona.
11. Kākoʻo template
E pōmaikaʻi nā mea hoʻomohala mai ka hiki ke koho pehea e wehewehe ʻia ai nā kumuwaiwai noi (Helm Chart, pure Kubernetes yaml, etc.) i mea e hoʻohana ai i ke ʻano kūpono loa no kēlā me kēia noi kikoʻī.
Nā mea hana GitOps ma ka OpenShift platform
ArgoCD
Hoʻokomo ʻo ArgoCD i ke ʻano hoʻohālike External Resource Reconcile a hāʻawi i kahi UI kikowaena no ka hoʻonohonoho ʻana i nā pilina hoʻokahi-a-nui ma waena o nā puʻupuʻu a me nā waihona Git. ʻO nā hemahema o kēia papahana ka hiki ʻole ke hoʻokele i nā noi ke hana ʻole ʻo ArgoCD.
kahe ana
Hoʻokomo ʻo Flux i kahi kumu hoʻohālike On-Cluster Resource Reconcile a ma muli o ka hopena, ʻaʻohe hoʻokele kikowaena o ka waihona wehewehe, he wahi nāwaliwali. Ma ka ʻaoʻao ʻē aʻe, ma muli o ka nele o ka centralization, hiki ke hoʻokele i nā noi inā ʻaʻole i hāʻule kekahi puʻupuʻu.
Ke hoʻokomo nei iā ArgoCD ma OpenShift
Hāʻawi ʻo ArgoCD i kahi interface laina kauoha maikaʻi loa a me ka console pūnaewele, no laila ʻaʻole mākou e uhi iā Flux a me nā mea ʻē aʻe ma aneʻi.
No ka waiho ʻana iā ArgoCD ma ka OpenShift 4 platform, e hahai i kēia mau ʻanuʻu ma ke ʻano he luna hoʻomalu:
Ke hoʻolālā nei i nā ʻāpana ArgoCD ma ke kahua 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}')
Hoʻomaikaʻi i ka Server ArgoCD i ʻike ʻia e 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
Ke hoʻohana nei i ka mea hana 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
Ke hoʻololi nei i ka ʻōlelo huna admin ArgoCD Server
# 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
Ma hope o ka hoʻopau ʻana i kēia mau ʻanuʻu, hiki iā ʻoe ke hana me ArgoCD Server ma o ka ArgoCD WebUI pūnaewele console a i ʻole ka mea hana laina kauoha ArgoCD Cli.
GitOps - ʻAʻole i lohi loa
"Ua haʻalele ke kaʻaahi" - ʻo ia ka mea a lākou e ʻōlelo ai e pili ana i kahi kūlana i hala ka manawa e hana ai i kekahi mea. I ka hihia o OpenShift, ʻo ka makemake e hoʻomaka koke i ka hoʻohana ʻana i kēia kahua hou ʻoluʻolu e hana pinepine i kēia kūlana me ka hoʻokele a me ka mālama ʻana i nā ala, hoʻoili a me nā mea OpenShift ʻē aʻe. Akā, ua nalowale loa ka manawa?
Ke hoʻomau nei i ke ʻano o nā ʻatikala e pili ana
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
No laila, loaʻa iā mākou kahi noi hana lima. I kēia manawa pono e hoʻoneʻe ʻia ma lalo o ka hoʻokele GitOps me ka ʻole o ka loaʻa. I ka pōkole, hana ia i kēia:
- E hana i kahi waihona Git no ke code.
- Hoʻouna mākou i kā mākou mau mea i kēia manawa a hoʻouka iā lākou i ka waihona Git.
- Ke koho ʻana a me ka hoʻohana ʻana i nā mea hana GitOps.
- Hoʻohui mākou i kā mākou waihona i kēia pahu hana.
- Wehewehe mākou i ka noi ma kā mākou GitOps toolkit.
- Hana mākou i ka holo hoʻāʻo o ka noi me ka hoʻohana ʻana i ka hāmeʻa GitOps.
- Hoʻonohonoho mākou i nā mea me ka hoʻohana ʻana i ka pahu hana GitOps.
- E ho'ā i ka ʻoki ʻana a me ka hoʻonohonoho ʻana i nā mea.
E like me ka mea i ʻōlelo ʻia ma mua
I kā mākou laʻana, e hana mākou i kahi waihona lehulehu hou ma GitHub. Hiki iā ʻoe ke kapa iā ia i kāu makemake, hoʻohana mākou i ka inoa blogpost.
Inā ʻaʻole mālama ʻia nā faila mea YAML ma ka ʻāina a i ʻole ma Git, a laila pono ʻoe e hoʻohana i nā binaries oc a i ʻole kubectl. Ma ke kiʻi kiʻi ma lalo nei ke noi nei mākou iā YAML no kā mākou inoa inoa, hoʻolaha, lawelawe a me ke ala. Ma mua o kēia, ua hoʻopili mākou i ka waihona hou i hana ʻia a cd i loko.
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
I kēia manawa, e hoʻoponopono i ka faila deployment.yaml e wehe i ke kahua i hiki ʻole iā Argo CD ke hana.
sed -i '/sgeneration: .*/d' deployment.yaml
Eia hou, pono e hoʻololi i ke ala. E hoʻonohonoho mua mākou i kahi hoʻololi multiline a laila hoʻololi i ka ingress: null me nā ʻike o kēlā ʻano.
export ROUTE=" ingress:
- conditions:
- status: 'True'
type: Admitted"
sed -i "s/ ingress: null/$ROUTE/g" route.yaml
No laila, ua hoʻokaʻawale mākou i nā faila, ʻo nā mea a pau e mālama iā lākou i ka waihona Git. Ma hope o ka lilo ʻana o kēia waihona i ke kumu o ka ʻike, a pono e pāpā loa ʻia nā hoʻololi lima i nā mea.
git commit -am ‘initial commit of objects’
git push origin master
Ke hoʻomau nei mākou mai ka ʻoiaʻiʻo ua kau ʻoe iā ArgoCD (pehea e hana ai i kēia - ʻike i ka mua
argocd repo add https://github.com/cooktheryan/blogpost
I kēia manawa e hana kākou i ka polokalamu. Hoʻonohonoho ka palapala noi i nā waiwai i hiki i ka GitOps toolkit ke hoʻomaopopo i ka waihona a me nā ala e hoʻohana ai, kahi OpenShift e pono ai e hoʻokele i nā mea, kahi lālā kikoʻī o ka waihona e pono ai, a inā pono e hoʻonohonoho pono nā kumuwaiwai.
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
Ke hōʻike ʻia kahi noi ma ka CD Argo, hoʻomaka ka mea hana e nānā i nā mea i kau ʻia e kūʻē i nā wehewehe i loko o ka waihona. I kā mākou laʻana, hoʻopau ʻia ka auto-sync a me ka hoʻomaʻemaʻe ʻana, no laila ʻaʻole loli nā mea. E ʻoluʻolu e hoʻomaopopo ʻia ma ka interface CD Argo e loaʻa i kā mākou noi ke kūlana "Out of Sync" no ka mea ʻaʻohe lepili i hāʻawi ʻia e ArgoCD.
ʻO ia ke kumu i ka wā e hoʻomaka ai mākou i ka synchronization ma hope iki, ʻaʻole e hoʻihoʻi ʻia nā mea.
I kēia manawa, e hoʻāʻo kāua e ʻike ʻaʻohe hewa i kā mākou faila.
argocd app sync simple-app --dry-run
Inā ʻaʻohe hewa, hiki iā ʻoe ke hoʻomau i ka synchronization.
argocd app sync simple-app
Ma hope o ka holo ʻana i ke kauoha argocd loaʻa i kā mākou noi, pono mākou e ʻike ua loli ke kūlana noi i Healthy a i ʻole Synced. ʻO ia ke ʻano o nā kumuwaiwai āpau i loko o ka waihona Git i kēia manawa e pili ana i kēlā mau kumuwaiwai i kau ʻia.
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
...
I kēia manawa hiki iā ʻoe ke hoʻohana i ka auto-sync a me ka hoʻomaʻemaʻe ʻana e hōʻoia ʻaʻole i hana ʻia me ka lima a i kēlā me kēia manawa i hana ʻia a hōʻano hou ʻia kekahi mea i ka waihona, e hana ʻia kahi hoʻolālā.
argocd app set simple-app --sync-policy automated --auto-prune
No laila, ua lawe maikaʻi mākou i kahi noi ma lalo o ka mana o GitOps i hoʻohana mua ʻole i GitOps ma kekahi ʻano.
Source: www.habr.com