Siza kusebenzisa i-Gitlab CI kunye ne-GitOps ye-manual ukuphumeza kunye nokusebenzisa i-Canary deployment kwi-Kubernetes
Amanqaku kolu ngcelele:
- (Oku kubhaliwe)
Ukuhanjiswa kweCanary usebenzisa iArgoCI - Ukuhanjiswa kweCanary usebenzisa i-Istio
- Ukuhanjiswa kweCanary usebenzisa iJenkins-X Istio Flagger
Siza kwenza ukuthunyelwa kweCanary ngesandla ngeGitOps kunye nokudala / ukuguqula izixhobo eziphambili zeKubernetes. Eli nqaku lijoliswe ikakhulu kwintshayelelo kunye nendlela ukuthunyelwa kusebenza ngayo kwi-Kubernetes Canary, kuba kukho iindlela ezisebenzayo zokuzenzekelayo, esiza kuziqwalasela kumanqaku alandelayo.
Ukusasazwa kweCanary
Ngesicwangciso saseCanary, ukuhlaziywa kuqala kusetyenziswe kuphela kwiseti engaphantsi yabasebenzisi. Ngokubeka iliso, idatha yelog, uvavanyo lwezandla, okanye ezinye iindlela zokuphendula, ukukhutshwa kuvavanywa ngaphambi kokuba kukhululwe kubo bonke abasebenzisi.
Ukusasazwa kweKubernetes (uhlaziyo oluqengqelekayo)
Isicwangciso esingagqibekanga se-Kubernetes Deployment is rolling-update, apho inani elithile leepods liqaliswa ngeenguqulelo ezintsha zemifanekiso. Ukuba zidalwe ngaphandle kweengxaki, iipods ezineenguqu ezindala zemifanekiso ziyapheliswa, kwaye iipods ezintsha zenziwe ngokufanayo.
GitOps
Sisebenzisa iGitOps kulo mzekelo kuba thina:
- usebenzisa iGit njengomthombo omnye wenyaniso
- sisebenzisa iGit Operations ukwakha kunye nokusasazwa (akukho miyalelo ngaphandle kwe-git tag/ukudibanisa efunekayo)
Umzekelo:
Masiziqhelise kakuhle - ukuba sibe novimba omnye wekhowudi yesicelo kunye nenye yezibonelelo.
Indawo yokugcina isicelo
Le yiPython+Flask API elula kakhulu ebuyisela impendulo njenge-JSON. Siza kwakha iphakheji nge-GitlabCI kwaye sityhale umphumo kwi-Gitlab Registry. Kwirejistri sineenguqulelo ezimbini ezahlukeneyo zokukhupha:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Umahluko kuphela phakathi kwabo lutshintsho kwifayile ye-JSON ebuyisiweyo. Sisebenzisa esi sicelo ukubona umfanekiso ngokulula kangangoko ukuba yeyiphi inguqulelo esinxibelelana nayo.
Uvimba weziseko zophuhliso
Kule turnip siza kuhambisa ngeGitlabCI ukuya eKubernetes, .gitlab-ci.yml
ujongeka ngoluhlobo:
image: traherom/kustomize-docker
before_script:
- printenv
- kubectl version
stages:
- deploy
deploy test:
stage: deploy
before_script:
- echo $KUBECONFIG
script:
- kubectl get all
- kubectl apply -f i/k8s
only:
- master
Ukuyiqhuba ngokwakho uya kufuna iqela, ungasebenzisa iGcloud:
gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b
gcloud compute firewall-rules create incoming-80 --allow tcp:80
Udinga ifolokhwe KUBECONFIG
kwi-GitlabCI, eya kuqulatha uqwalaselo lofikelelo kubectl
kwiqela lakho.
Unokufunda malunga nendlela yokufumana iziqinisekiso zeqela (Gcloud)
Ulwakhiwo lweYaml
Kuvimba weziseko zoncedo sinenkonzo:
apiVersion: v1
kind: Service
metadata:
labels:
id: app
name: app
spec:
ports:
- port: 80
protocol: TCP
targetPort: 5000
selector:
id: app
type: LoadBalancer
Nokusasazwa ngaphakathi deploy.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
replicas: 10
selector:
matchLabels:
id: app
type: main
template:
metadata:
labels:
id: app
type: main
spec:
containers:
- image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
name: app
resources:
limits:
cpu: 100m
memory: 100Mi
Kwaye okunye ukuthunyelwa ngaphakathi deploy-canary.yaml
:
kind: Deployment
metadata:
name: app-canary
spec:
replicas: 0
selector:
matchLabels:
id: app
type: canary
template:
metadata:
labels:
id: app
type: canary
spec:
containers:
- image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
name: app
resources:
limits:
cpu: 100m
memory: 100Mi
Qaphela ukuba i-app-deploy ayinazo naziphi na iikopi ezichaziweyo okwangoku.
Ukwenza ukusasazwa kokuqala
Ukuqala ukuthunyelwa kokuqala, ungaqala umbhobho weGitlabCI ngesandla kwisebe elikhulu. Emveni kwalonto kubectl
kufuneka ikhuphe oku kulandelayo:
Siyabona app
ukusasazwa nge-10 replicas kunye ne-app-canary ene-0. Kukwakho ne-LoadBalancer esinokufikelela kuyo curl
nge-IP yangaphandle:
while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done
Siyabona ukuba isicelo sethu sovavanyo sibuyisela kuphela "v1".
Ukwenziwa kokusasazwa kweCanary
Inyathelo 1: Khupha inguqulelo entsha kwabanye abasebenzisi
Siseta inani le replicas ukuya ku-1 kwifayile ye-deploy-canary.yaml kunye nomfanekiso wenguqulelo entsha:
kind: Deployment
metadata:
name: app-canary
spec:
replicas: 1
selector:
matchLabels:
id: app
type: canary
template:
metadata:
labels:
id: app
type: canary
spec:
containers:
- image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
name: app
resources:
limits:
cpu: 100m
memory: 100Mi
Kwifayile deploy.yaml
sitshintshe inani le replicas ukuya kwi-9:
kind: Deployment
metadata:
name: app
spec:
replicas: 9
selector:
matchLabels:
id: app
...
Sityhala olu tshintsho kwindawo yokugcina apho ukuthunyelwa kuya kuqala khona (nge-GitlabCI) kwaye sibone njengesiphumo:
Inkonzo yethu iya kwalatha kokubini ukuthunyelwa, kuba bobabini banomkhethi we-app. Ngenxa ye-Randomization ye-Kubernetes, kufuneka sibone iimpendulo ezahlukeneyo malunga ne-10% yezicelo:
Imeko yangoku yesicelo sethu (i-GitOps, ithathwe kwi-Git njengoMthombo omnye weNyaniso) kubukho bezinto ezimbini ezithunyelwayo ezineekopi ezisebenzayo, enye yenguqulelo nganye.
~ I-10% yabasebenzisi baqhelana nenguqulelo entsha kwaye bayivavanye ngokungeyonjongo. Ngoku lixesha lokujonga iimpazamo kwiilogi kunye nedatha yokubeka iliso ukufumana iingxaki.
Inyathelo 2: Khupha inguqulelo entsha kubo bonke abasebenzisi
Sigqibe kwelokuba yonke into ihambe kakuhle kwaye ngoku kufuneka sikhuphe inguqulelo entsha kubo bonke abasebenzisi. Ukwenza oku sihlaziya ngokulula deploy.yaml
ukufaka uguqulelo olutsha lomfanekiso kunye nenani leekopi ezilingana no-10 deploy-canary.yaml
siseta inani le replicas umva 0. Emva kokusasazwa, isiphumo siya kuba ngolu hlobo lulandelayo:
Shwa nkathela
Kum, ukuqhuba ukusasazwa ngesandla ngale ndlela kunceda ukuqonda ukuba kulula kangakanani ukuqwalasela usebenzisa ii-k8s. Ekubeni i-Kubernetes ikuvumela ukuba uhlaziye yonke into nge-API, la manyathelo anokwenziwa ngokuzenzekelayo ngokusebenzisa izikripthi.
Enye into ekufuneka iphunyezwe yindawo yokungena yomvavanyi (LoadBalancer okanye nge-Ingress) apho kuphela inguqulelo entsha inokufumaneka. Ingasetyenziselwa ukukhangela iincwadi ngesandla.
Kumanqaku azayo, siza kujonga ezinye izisombululo ezizenzekelayo eziphumeza uninzi lwento esiyenzileyo.
Funda namanye amanqaku kwibhlog yethu:
Ukufuduka ukusuka kwiClickHouse ngaphandle kogunyaziso ukuya kwiClickHouse ngesigunyaziso kukhokelele phi? Ukwakha iimodyuli eziguqukayo zeNginx Hlaziya i-nxs-build-tools - umncedisi wokwakha i-deb kunye neepakethi ze-rpm Intshayelelo kuGunyaziso lwe-Hashicorp Consul's Kubernetes Into ebesijongene nayo xa sisebenzisa isixhobo seCsync2 Ibhot yeTelegram yeRedmine. Indlela yokwenza ubomi bube lula kuwe nakwabanye
umthombo: www.habr.com