Byddwn yn defnyddio Gitlab CI a GitOps Γ’ llaw i weithredu a defnyddio defnydd Canary yn Kubernetes.

Erthyglau o'r gyfres hon:
- (Yr erthygl hon)
- Defnyddio Canary gydag Istio
- Defnyddio Canary gyda Jenkins-X Istio Flagger
Byddwn yn perfformio'r defnydd o Canary Γ’ llaw trwy GitOps ac yn creu/addasu'r prif adnoddau Kubernetes. Bwriadwyd yr erthygl hon yn bennaf at ddibenion cyflwyno. gyda sut mae defnyddio'n gweithio yn Kubernetes Canary, gan fod dulliau awtomeiddio mwy effeithlon, y byddwn yn eu trafod mewn erthyglau yn y dyfodol.

Dedwyddiad Dedwydd
Gyda strategaeth Canary, dim ond i is-set o ddefnyddwyr y caiff diweddariadau eu cyflwyno i ddechrau. Trwy fonitro, data log, profion Γ’ llaw, neu sianeli adborth eraill, caiff y datganiad ei brofi cyn ei gyflwyno i bob defnyddiwr.
Defnyddio Kubernetes (diweddariad treigl)
Y strategaeth ddiofyn ar gyfer Kubernetes Deployment yw diweddaru-rholio, sy'n lansio nifer penodol o godau gyda fersiynau delwedd newydd. Os cΓ’nt eu creu heb broblemau, caiff y codau gyda'r hen fersiynau delwedd eu terfynu, a chaiff codau newydd eu creu ochr yn ochr.
GitOps
Rydym yn defnyddio GitOps yn yr enghraifft hon oherwydd ein bod ni:
- Rydym yn defnyddio Git fel un ffynhonnell o wirionedd.
- Rydym yn defnyddio Git Operations ar gyfer adeiladu a defnyddio (nid oes angen unrhyw orchmynion heblaw am git tag/merge)
Enghraifft
Gadewch i ni gymryd arfer da - cael un storfa ar gyfer cod cymhwysiad ac un ar gyfer seilwaith.
Storfa gymwysiadau
Mae hwn yn API Python+Flask syml iawn sy'n dychwelyd ymateb JSON. Byddwn yn adeiladu'r pecyn gan ddefnyddio GitlabCI ac yn gwthio'r canlyniad i'r Gofrestrfa Gitlab. Mae gennym ddau fersiwn rhyddhau gwahanol yn y gofrestrfa:
wuestkamp/k8s-deployment-example-app:v1wuestkamp/k8s-deployment-example-app:v2
Yr unig wahaniaeth rhyngddynt yw newid yn y ffeil JSON a ddychwelir. Rydym yn defnyddio'r rhaglen hon i weld yn hawdd pa fersiwn yr ydym yn siarad Γ’ hi.
Ystorfa seilwaith
Yn y repo hwn byddwn yn ei ddefnyddio trwy GitlabCI i Kubernetes, .gitlab-ci.yml fel a ganlyn:
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
Er mwyn ei redeg eich hun bydd angen clwstwr arnoch, gallwch ddefnyddio Gcloud:
gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b
gcloud compute firewall-rules create incoming-80 --allow tcp:80
Mae angen i chi fforchio a chreu newidyn KUBECONFIG yn GitlabCI, a fydd yn cynnwys y ffurfwedd ar gyfer mynediad kubectl i'ch clwstwr.
Gallwch ddarllen am sut i gael manylion mewngofnodi ar gyfer clwstwr (Gcloud) yma. .
Isadeiledd Yaml
Yn y storfa seilwaith mae gennym wasanaeth:
apiVersion: v1
kind: Service
metadata:
labels:
id: app
name: app
spec:
ports:
- port: 80
protocol: TCP
targetPort: 5000
selector:
id: app
type: LoadBalancer
A'i ddefnyddio yn 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
A defnydd arall yn 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
Sylwch nad oes gan app-deploy unrhyw atgynhyrchiadau wedi'u diffinio eto.
Perfformio lleoli cychwynnol
I redeg y defnydd cychwynnol, gallwch redeg y biblinell GitlabCI Γ’ llaw ar y gangen feistr. Ar Γ΄l hynny kubectl dylai allbynnu'r canlynol:

Rydyn ni'n gweld app defnydd gyda 10 replica ac app-canary gyda 0. Mae yna LoadBalancer hefyd y gallwn gael mynediad iddo drwy curl gan IP Allanol:
while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done

Gwelwn fod ein cymhwysiad prawf yn dychwelyd βv1β yn unig.
Perfformio Deployment Canary
Cam 1: Rhyddhau fersiwn newydd i rai defnyddwyr
Fe wnaethon ni osod y cyfrif replica i 1 yn y ffeil deploy-canary.yaml a delwedd y fersiwn newydd:
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
Mewn ffeil deploy.yaml Fe wnaethon ni newid nifer y copΓ―au i 9:
kind: Deployment
metadata:
name: app
spec:
replicas: 9
selector:
matchLabels:
id: app
...
Rydym yn gwthio'r newidiadau hyn i'r storfa y bydd y defnydd yn cael ei lansio ohoni (trwy GitlabCI) ac yn gweld y canlyniad:

Bydd ein Gwasanaeth yn pwyntio at y ddau ddefnyddiad, gan fod gan y ddau ddewiswr apiau. Oherwydd dosbarthiad ar hap diofyn Kubernetes, dylem weld ymatebion gwahanol ar gyfer ~10% o geisiadau:

Cyflwr presennol ein cymhwysiad (GitOps, wedi'i gymryd o Git fel Single Source Of Truth) yw bod gennym ddau ddefnyddiad gyda replicΓ’u gweithredol, un ar gyfer pob fersiwn.
Mae tua 10% o ddefnyddwyr yn rhoi cynnig ar y fersiwn newydd ac yn ei phrofi'n anfwriadol. Nawr mae'n bryd gwirio logiau a data monitro am wallau i nodi unrhyw broblemau.
Cam 2: Rhyddhau'r fersiwn newydd i bob defnyddiwr
Penderfynon ni fod popeth wedi mynd yn dda a nawr mae angen i ni gyflwyno'r fersiwn newydd i bob defnyddiwr. I wneud hyn, rydyn ni'n syml yn diweddaru deploy.yaml gosod fersiwn newydd o'r ddelwedd a nifer y copΓ―au yn hafal i 10. deploy-canary.yaml Rydym yn gosod nifer y copΓ―au yn Γ΄l i 0. Ar Γ΄l eu defnyddio, bydd y canlyniad fel a ganlyn:

Crynhoi
I mi, mae rhedeg y gosodiad Γ’ llaw fel hyn yn fy helpu i ddeall pa mor hawdd y gellir ei ffurfweddu gan ddefnyddio K8s. Gan fod Kubernetes yn caniatΓ‘u diweddariadau trwy'r API, gellir awtomeiddio'r camau hyn gan ddefnyddio sgriptiau.
Peth arall sydd angen ei weithredu yw pwynt mynediad profwr (LoadBalancer neu drwy Ingress) a fydd ond yn caniatΓ‘u mynediad i'r fersiwn newydd. Gellir defnyddio hwn ar gyfer adolygiad Γ’ llaw.
Mewn erthyglau yn y dyfodol, byddwn yn edrych ar atebion awtomataidd eraill sy'n gweithredu'r rhan fwyaf o'r hyn rydyn ni wedi'i wneud.
Darllenwch erthyglau eraill ar ein blog hefyd:
Ffynhonnell: hab.com
