Isu tichashandisa Gitlab CI uye bhuku GitOps kuita uye kushandisa Canary deployment muKubernetes.
Zvinyorwa kubva munhevedzano iyi:
- (Chinyorwa ichi)
Canary Deployment uchishandisa ArgoCI - Canary Deployment uchishandisa Istio
- Canary Deployment uchishandisa Jenkins-X Istio Flagger
Isu tichaita iyo Canary deployment nemaoko kuburikidza neGitOps uye kugadzira / kugadzirisa iyo huru Kubernetes zviwanikwa. Chinyorwa ichi chakanyanyoitirwa sumo nemafambisirwo anoitwa basa muKubernetes Canary, sezvo paine nzira dzinoshanda dzeautomation, dzatichakurukura munyaya dzinotevera.
Canary Deployment
Nehurongwa hweCanary, zvigadziriso zvinotanga kushandiswa kune chete subset yevashandisi. Kuburikidza nekutarisa, dhata regi, kuyedzwa kwemanyorero, kana mamwe maitiro emhinduro, kuburitswa kunoedzwa kusati kwaburitswa kune vese vashandisi.
Kubernetes Deployment (inotenderedza update)
Iyo yekusarudzika zano reKubernetes Deployment iri rolling-update, uko imwe nhamba yemapods inotangwa neshanduro nyowani dzemifananidzo. Kana dzakasikwa pasina matambudziko, mapodhi ane mavhezheni ekare emifananidzo anogumiswa, uye mapodhi matsva anogadzirwa akafanana.
GitOps
Isu tinoshandisa GitOps mumuenzaniso uyu nekuti isu:
- kushandisa Git sechinhu chimwe chete chechokwadi
- isu tinoshandisa Git Operations yekuvaka uye kutumira (hapana mirairo kunze kwegit tag/merge inodiwa)
Muenzaniso:
Ngatitorei tsika yakanaka - kuve neimwe repository yekodhi yekushandisa uye imwe yezvivakwa.
Application repository
Iyi iri nyore kwazvo Python + Flask API inodzosera mhinduro seJSON. Isu tichavaka pasuru kuburikidza neGitlabCI uye tosundira mhedzisiro kuGitlab Registry. Mune registry tine maviri akasiyana ekuburitsa shanduro:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Musiyano uripo pakati pavo ndeye shanduko mune yakadzoserwa JSON faira. Isu tinoshandisa iyi application kuona zviri nyore sezvinobvira iyo shanduro yatiri kutaurirana nayo.
Infrastructure repository
Mune ino turnip isu tichaendesa kuburikidza neGitlabCI kuenda Kubernetes, .gitlab-ci.yml
zvinoita seizvi:
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
Kuti uimhanye iwe uchada sumbu, unogona kushandisa Gcloud:
gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b
gcloud compute firewall-rules create incoming-80 --allow tcp:80
Unofanira forogo KUBECONFIG
muGitlabCI, iyo ichange iine config yekuwana kubectl
kuboka rako.
Unogona kuverenga nezve maitiro ekuwana zvitupa zveboka (Gcloud)
Infrastructure Yaml
Muinfrastructure repository tine sevhisi:
apiVersion: v1
kind: Service
metadata:
labels:
id: app
name: app
spec:
ports:
- port: 80
protocol: TCP
targetPort: 5000
selector:
id: app
type: LoadBalancer
Uye kuiswa mukati 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
Uye kumwe kutumirwa mukati 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
Ziva kuti app-deploy haisati yave nereplicas yakatsanangurwa parizvino.
Kuita kutumirwa kwekutanga
Kuti utange kutumira kwekutanga, unogona kutanga pombi yeGitlabCI nemaoko pane master bazi. Mushure maizvozvo kubectl
inofanira kuburitsa zvinotevera:
Tinoona app
deployment with 10 replicas and app-canary with 0. Kune zvakare LoadBalancer yatinokwanisa kuwana kuburikidza curl
kuburikidza neExternal IP:
while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done
Isu tinoona kuti bvunzo yedu application inongodzosera "v1".
Kuita Canary deployment
Nhanho 1: buritsa vhezheni itsva yevamwe vashandisi
Isu takaisa nhamba yezvinyorwa ku 1 mune deploy-canary.yaml faira uye iyo itsva vhezheni mufananidzo:
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
Mufaira deploy.yaml
isu takachinja nhamba ye replicas kuita 9:
kind: Deployment
metadata:
name: app
spec:
replicas: 9
selector:
matchLabels:
id: app
...
Isu tinosundira shanduko idzi kune repository kubva kunotanga kutumirwa (kuburikidza neGitlabCI) uye ona semhedzisiro:
Sevhisi yedu inonongedza kune ese ma deployments, sezvo ese ari maviri ane app selector. Nekuda kweKubernetes 'default randomization, isu tinofanirwa kuona mhinduro dzakasiyana dze ~ 10% yezvikumbiro:
Mamiriro azvino echishandiso chedu (GitOps, yakatorwa kubva kuGit seSimba Rimwechete ReChokwadi) kuvepo kwemaviri ekutumira ane anoshanda replicas, imwe yega yega yega.
~ 10% yevashandisi vanojairana neshanduro nyowani uye vasingazivi vanoiedza. Ino ndiyo nguva yekutarisa zvikanganiso mumatanda uye yekutarisa data kuti uwane matambudziko.
Danho 2: Sunungura iyo vhezheni itsva kune vese vashandisi
Isu takasarudza kuti zvese zvakafamba zvakanaka uye ikozvino tinoda kuburitsa vhezheni iyi kune vese vashandisi. Kuti tiite izvi tinongovandudza deploy.yaml
kuisa shanduro itsva yemufananidzo uye nhamba ye replicas yakaenzana ne 10. In deploy-canary.yaml
tinoisa nhamba ye replicas kudzokera ku 0. Mushure mekuendesa, mugumisiro uchava sezvinotevera:
Summing up
Kwandiri, kumhanyisa kutumirwa nenzira iyi kunobatsira kunzwisisa kuti inogona kugadzirwa sei uchishandisa k8s. Sezvo Kubernetes ichikubvumidza kuti uvandudze zvese kuburikidza neAPI, matanho aya anogona otomatiki kuburikidza nezvinyorwa.
Chimwe chinhu chinoda kuitwa ndeye tester yekupinda nzvimbo (LoadBalancer kana kuburikidza neIngress) kuburikidza iyo chete vhezheni itsva inogona kuwanikwa. Inogona kushandiswa kubhurawuza yemanyorero.
Mune zvinyorwa zvinotevera, tichatarisa mamwe magadzirirwo ega ega anoshandisa zvizhinji zvatakaita.
Verengawo zvimwe zvinyorwa pane yedu blog:
Ko kutama kubva kuClickHouse pasina mvumo kuenda kuClickHouse nemvumo kwakatungamira kupi? Kuvaka dynamic modules yeNginx Gadziridza nxs-kuvaka-zvishandiso - mubatsiri mukuvaka deb uye rpm mapakeji Nhanganyaya kune Hashicorp Consul's Kubernetes Mvumo Zvataifanira kutarisana nazvo pakushandisa Csync2 utility Teregiramu bot yeRedmine. Nzira yekurerutsa hupenyu iwe pachako uye nevamwe
Source: www.habr.com