Peb yuav siv k8s-native Argo Rollouts deployment controller thiab GitlabCI los khiav Canary deployments rau Kubernetes
Cov lus hauv no series
Canary Deployment hauv Kubernetes #1: Gitlab CI - (Cov kab lus no)
- Canary Deployment siv Istio
- Canary Deployment siv Jenkins-X Istio Flagger
Canary Deployment
Peb vam tias koj nyeem
Argo Rollouts
Argo Rollouts yog Kubernetes ib txwm siv tus tswj hwm. Nws muab CRD (Kev Pabcuam Kev Cai txhais) rau Kubernetes. Ua tsaug rau nws, peb tuaj yeem siv qhov chaw tshiab: Rollout
, uas tswj cov xiav-ntsuab thiab canary deployments nrog ntau yam configuration xaiv.
Argo Rollouts maub los siv los ntawm cov peev txheej kev cai
Rollout,
Tso cai rau kev xa tawm cov tswv yim ntxiv xws li xiav-ntsuab thiab canary rau Kubernetes. Cov peev txheejRollout
muab functionality sib npaugDeployment
, tsuas yog nrog cov tswv yim xa tawm ntxiv.
kev pabDeployments
muaj ob lub tswv yim rau kev xa tawm:RollingUpdate
ΠΈRecreate
. Txawm hais tias cov tswv yim no tsim nyog rau feem ntau, rau kev xa mus rau cov servers ntawm qhov loj heev, cov tswv yim ntxiv yog siv, xws li xiav-ntsuab lossis canary, uas tsis muaj nyob rau hauv Deployment controller. Txhawm rau siv cov tswv yim no hauv Kubernetes, cov neeg siv yuav tsum tau sau cov ntawv sau rau saum lawv Cov Kev Tshaj Tawm. Lub Argo Rollouts Controller nthuav tawm cov tswv yim no raws li qhov yooj yim, tshaj tawm, kev teeb tsa tsis tau.
https://argoproj.github.io/argo-rollouts
Tseem muaj Argo CI, uas muab lub vev xaib yooj yim rau kev siv nrog Rollouts, peb yuav saib qhov ntawd hauv tsab xov xwm tom ntej.
Txhim kho Argo Rollouts
Server Side
kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml
Hauv peb cov kev tsim vaj tsev turnip (saib hauv qab) peb twb tau ntxiv install.yaml li i/k8s/argo-rollouts/install.yaml. Qhov no GitlabCI yuav nruab nws rau hauv pawg.
Client side (kubectl plugin)
Piv txwv Daim Ntawv Thov
Nws yog qhov kev coj ua zoo kom muaj cov chaw khaws cia cais rau daim ntawv thov code thiab cov txheej txheem.
Repository rau daim ntawv thov
Kim Wuestkamp/k8s-deployment-example-app
Qhov no yog qhov yooj yim heev Python + Flask API uas rov qab teb raws li JSON. Peb yuav tsim lub pob siv GitlabCI thiab thawb cov txiaj ntsig mus rau Gitlab Registry. Hauv kev sau npe peb muaj ob qhov kev tso tawm sib txawv:
- wuestkamp/k8s-deployment-example-app:v1
- wuestkamp/k8s-deployment-example-app:v2
Qhov sib txawv ntawm lawv tsuas yog JSON cov ntaub ntawv xa rov qab. Peb siv daim ntawv thov no kom pom tau yooj yim li sai tau uas peb tab tom tham nrog.
Infrastructure repository
Hauv qhov chaw cia khoom no peb yuav siv GitlabCI rau kev xa mus rau Kubernetes, .gitlab-ci.yml zoo li qhov no:
image: traherom/kustomize-dockerbefore_script:
- printenv
- kubectl versionstages:
- deploydeploy test:
stage: deploy
before_script:
- echo $KUBECONFIG
script:
- kubectl get all
- kubectl apply -f i/k8s only:
- master
Txhawm rau khiav koj tus kheej koj yuav xav tau pawg, koj tuaj yeem siv Gcloud:
gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b
gcloud compute firewall-rules create incoming-80 --allow tcp:80
Koj yuav tsum fork KUBECONFIG
hauv GitlabCI, uas yuav muaj cov config rau kev nkag kubectl
rau koj pawg.
Infrastructure Yaml
Nyob rau hauv lub infrastructure repository peb muaj kev pab:
apiVersion: v1
kind: Service
metadata:
labels:
id: rollout-canary
name: app
spec:
ports:
- port: 80
protocol: TCP
targetPort: 5000
selector:
id: app
type: LoadBalancer
thiab rollout.yaml:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: rollout-canary
spec:
replicas: 10
revisionHistoryLimit: 2
selector:
matchLabels:
id: rollout-canary
template:
metadata:
labels:
id: rollout-canary
spec:
containers:
- name: rollouts-demo
image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
imagePullPolicy: Always
strategy:
canary:
steps:
- setWeight: 10
# Rollouts can be manually resumed by running `kubectl argo rollouts promote ROLLOUT`
- pause: {}
- setWeight: 50
- pause: { duration: 120 } # two minutes
Rollout
ua hauj lwm ib yam li Deployment. Yog tias peb tsis teeb tsa lub tswv yim hloov tshiab (xws li canary ntawm no) nws yuav coj zoo li lub neej ntawd dov-hloov tshiab Kev xa tawm.
Peb txhais ob kauj ruam hauv yaml rau kev xa tawm canary:
- 10% ntawm kev khiav mus rau canary (tos phau ntawv OK)
- 50% kev khiav mus rau canary (tos 2 feeb ces txuas ntxiv mus rau 100%)
Ua qhov pib xa tawm
Tom qab kev xa tawm thawj zaug, peb cov peev txheej yuav zoo li no:
Thiab peb tau txais cov lus teb tsuas yog los ntawm thawj version ntawm daim ntawv thov:
Ua haujlwm Canary Deployment
Kauj Ruam 1: 10% kev khiav tsheb
Txhawm rau pib xa tawm canary, peb tsuas yog yuav tsum tau hloov cov duab version raws li peb feem ntau ua nrog kev xa tawm:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: rollout-canary
spec:
...
template:
metadata:
labels:
id: rollout-canary
spec:
containers:
- name: rollouts-demo
image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
...
Thiab peb thawb cov kev hloov pauv, yog li Gitlab CI xa mus thiab peb pom cov kev hloov pauv:
Tam sim no yog tias peb nkag mus rau qhov kev pabcuam:
Zoo heev! Peb nyob nruab nrab ntawm peb cov canary xa mus. Peb tuaj yeem pom qhov kev nce qib los ntawm kev khiav:
kubectl argo rollouts get rollout rollout-canary
Kauj ruam 2: 50% tsheb khiav:
Tam sim no cia peb mus rau kauj ruam tom ntej: redirecting 50% ntawm cov tsheb khiav. Peb configured kauj ruam no yuav tsum tau khiav manually:
kubectl argo rollouts promote rollout-canary # continue to step 2
Thiab peb daim ntawv thov rov qab 50% ntawm cov lus teb los ntawm cov ntawv tshiab:
Thiab rov qab xyuas dua:
Zoo kawg.
Kauj ruam 3: 100% tsheb khiav:
Peb teeb tsa nws kom tom qab 2 feeb 50% kauj ruam xaus tau txais thiab 100% kauj ruam pib:
Thiab daim ntawv thov tso zis:
Thiab rov qab xyuas dua:
Kev xa tawm Canary tiav lawm.
Ntau cov piv txwv nrog Argo Rollouts
Muaj ntau cov piv txwv ntawm no, xws li yuav ua li cas teeb tsa ib puag ncig saib ua ntej thiab kev sib piv raws li canary:
Video hais txog Argo Rollouts thiab Argo CI
Kuv yeej pom zoo cov yeeb yaj kiab no, nws qhia tau hais tias Argo Rollouts thiab Argo CI ua haujlwm li cas:
Qhov no
Kuv yeej nyiam lub tswv yim ntawm kev siv CRDs uas tswj kev tsim cov hom kev xa tawm ntxiv lossis cov khoom siv rov ua dua, hloov pauv tsheb, thiab lwm yam. Ua haujlwm nrog lawv mus zoo. Tom ntej no kuv xav sim kev koom ua ke nrog Argo CI.
Txawm li cas los xij, zoo li muaj kev sib koom ua ke loj ntawm Argo CI thiab Flux CI tuaj, yog li kuv yuav tos kom txog thaum qhov kev tso tawm tshiab tawm:
Koj puas tau muaj kev paub nrog Argo Rollouts lossis Argo CI?
Kuj nyeem lwm cov ntawv hauv peb blog:
Blue-Green Deployment of Spring applications nrog Nginx web server Kubernetes: vim li cas nws thiaj li tseem ceeb rau kev teeb tsa kev tswj hwm kev tswj hwm? Taw qhia rau Hashicorp Consul's Kubernetes Tso Cai Tekton Pipeline - Kubernetes-native pipelines Tsim dynamic modules rau Nginx Telegram bot rau Redmine. Yuav ua li cas yooj yim lub neej rau koj tus kheej thiab lwm tus
Tau qhov twg los: www.hab.com