Tidzagwiritsa ntchito owongolera oyendetsa ma k8s-native Argo Rollouts ndi GitlabCI kuyendetsa ma Canary deployments ku Kubernetes.
Nkhani zotsatizanazi
Kutumiza kwa Canary ku Kubernetes #1: Gitlab CI - (Nkhani iyi)
- Kutumiza kwa Canary pogwiritsa ntchito Istio
- Kutumiza kwa Canary pogwiritsa ntchito Jenkins-X Istio Flagger
Kutumiza kwa Canary
Tikukhulupirira kuti mukuwerenga
Kutulutsa kwa Argo
Argo Rollouts ndi wolamulira wa Kubernetes. Imapereka CRD (Custom Resource Definition) ya Kubernetes. Chifukwa chake, titha kugwiritsa ntchito chinthu chatsopano: Rollout
, yomwe imayang'anira zobiriwira zobiriwira ndi canary zokhala ndi zosankha zosiyanasiyana.
Wowongolera wa Argo Rollouts wogwiritsidwa ntchito ndi makonda
Rollout,
Imalola njira zowonjezera zotumizira monga blue-green ndi canary za Kubernetes. ZothandiziraRollout
imapereka magwiridwe antchito ofananaDeployment
, pokhapokha ndi njira zowonjezera zotumizira.
gweroDeployments
ili ndi njira ziwiri zotumizira:RollingUpdate
иRecreate
. Ngakhale kuti njirazi ndizoyenera nthawi zambiri, kuti zitumizidwe ku ma seva pamlingo waukulu kwambiri, njira zowonjezera zimagwiritsidwa ntchito, monga buluu-wobiriwira kapena canary, zomwe sizipezeka mu Wolamulira wa Deployment. Kuti agwiritse ntchito njirazi ku Kubernetes, ogwiritsa ntchito adayenera kulemba zolemba pamwamba pa Zomwe Amatumiza. Wolamulira wa Argo Rollouts amawulula njirazi ngati zosavuta, zofotokozera, zosinthika.
https://argoproj.github.io/argo-rollouts
Palinso Argo CI, yomwe imapereka mawonekedwe osavuta a intaneti kuti agwiritsidwe ntchito ndi Rollouts, tiwona izi m'nkhani yotsatira.
Kukhazikitsa Argo Rollouts
Mbali ya seva
kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml
M'malo athu a turnip (onani m'munsimu) tawonjezera kale install.yaml monga i/k8s/argo-rollouts/install.yaml. Mwanjira iyi GitlabCI idzayiyika mumagulu.
Mbali ya kasitomala (kubectl plugin)
Chitsanzo Ntchito
Ndibwino kukhala ndi nkhokwe zosiyana zamakhodi ogwiritsira ntchito ndi zomangamanga.
Posungira ntchito
Kim Wuestkamp/k8s-deployment-chitsanzo-app
Iyi ndi Python + Flask API yosavuta kwambiri yomwe imabwezera yankho ngati JSON. Tipanga phukusi pogwiritsa ntchito GitlabCI ndikukankhira zotsatira ku Gitlab Registry. Mu registry tili ndi mitundu iwiri yotulutsa:
- wuestkamp/k8s-deployment-app:v1
- wuestkamp/k8s-deployment-app:v2
Kusiyana kokha pakati pawo ndi fayilo ya JSON yobwezedwa. Timagwiritsa ntchito pulogalamuyi kuti tiwone mosavuta momwe tingathere mtundu womwe tikulankhula nawo.
Malo osungirako zomangamanga
Munkhokwe iyi tidzagwiritsa ntchito GitlabCI potumiza ku Kubernetes, .gitlab-ci.yml ikuwoneka motere:
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
Kuti muyendetse nokha mudzafunika tsango, mutha kugwiritsa ntchito Gcloud:
gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b
gcloud compute firewall-rules create incoming-80 --allow tcp:80
Muyenera kufota KUBECONFIG
mu GitlabCI, yomwe idzakhala ndi config kuti mufike kubectl
ku gulu lanu.
Infrastructure Yaml
Mkati mwa nkhokwe ya zomangamanga tili ndi ntchito:
apiVersion: v1
kind: Service
metadata:
labels:
id: rollout-canary
name: app
spec:
ports:
- port: 80
protocol: TCP
targetPort: 5000
selector:
id: app
type: LoadBalancer
ndi 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
imagwira ntchito mofanana ndi Deployment. Ngati sitikhazikitsa njira yosinthira (monga canary apa) ikhala ngati Kutumiza kosintha.
Timatanthauzira masitepe awiri mu yaml pakuyika kwa canary:
- 10% ya magalimoto kupita ku canary (dikirani buku labwino)
- 50% magalimoto kupita ku canary (dikirani mphindi 2 kenako pitilizani mpaka 100%)
Kukonzekera koyamba
Pambuyo pa kutumizidwa koyamba, zothandizira zathu zidzawoneka motere:
Ndipo timapeza yankho kuchokera ku mtundu woyamba wa pulogalamuyi:
Kuchita Kutumiza kwa Canary
Khwerero 1: 10% magalimoto
Kuti tiyambe kutumiza ma canary, timangofunika kusintha mawonekedwe azithunzi monga momwe timachitira nthawi zambiri ndi kutumiza:
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
...
Ndipo timakankhira zosintha, kotero Gitlab CI imatumiza ndipo tikuwona zosintha:
Tsopano ngati titha kupeza ntchito:
Zabwino! Tili pakati pa kutumizidwa kwathu kwa canary. Titha kuwona kupita patsogolo ndikuthamanga:
kubectl argo rollouts get rollout rollout-canary
Gawo 2: 50% magalimoto:
Tsopano tiyeni tipitirire ku sitepe yotsatira: kulozeranso 50% ya magalimoto. Tidakonza kuti izi ziziyendetsedwa pamanja:
kubectl argo rollouts promote rollout-canary # continue to step 2
Ndipo ntchito yathu idabweza 50% ya mayankho kuchokera kumitundu yatsopano:
Ndipo kubwereza kubwereza:
Zodabwitsa.
Gawo 3: 100% magalimoto:
Tidayikhazikitsa kuti pakatha mphindi 2 gawo la 50% litha zokha ndipo gawo la 100% liyamba:
Ndipo zotsatira za ntchito:
Ndipo kubwereza kubwereza:
Kutumiza kwa Canary kwatha.
Zitsanzo zambiri ndi Argo Rollouts
Pali zitsanzo zambiri apa, monga momwe mungakhazikitsire zowonera za chilengedwe ndi kufananitsa kutengera canary:
Kanema wa Argo Rollouts ndi Argo CI
Ndikupangira vidiyoyi, ikuwonetsa momwe Argo Rollouts ndi Argo CI amagwirira ntchito limodzi:
Zotsatira
Ndimakonda kwambiri lingaliro logwiritsa ntchito ma CRD omwe amayang'anira kupanga mitundu yowonjezereka ya zotumizira kapena zofananira, kuwongolera magalimoto, ndi zina zambiri. Kugwira nawo ntchito kumayenda bwino. Kenako ndikufuna kuyesa kuphatikiza ndi Argo CI.
Komabe, zikuwoneka kuti pali kuphatikiza kwakukulu kwa Argo CI ndi Flux CI kubwera, kotero nditha kudikirira mpaka kutulutsidwa kwatsopano kutuluke:
Kodi mudakumanapo ndi Argo Rollouts kapena Argo CI?
Werenganinso zolemba zina pa blog yathu:
Blue-Green Deployment of Spring applications ndi Nginx web server Kubernetes: chifukwa chiyani kuli kofunikira kukhazikitsa kasamalidwe kazinthu zamakina? Chidziwitso cha Hashicorp Consul's Kubernetes Authorization Mapaipi a Tekton - mapaipi amtundu wa Kubernetes Kupanga ma module amphamvu a Nginx Telegraph bot ya Redmine. Momwe mungachepetsere moyo wanu ndi ena
Source: www.habr.com