Byddwn yn defnyddio'r rheolwr lleoli Argo Rollouts brodorol k8s a GitlabCI i redeg gosodiadau Canary i Kubernetes

Erthyglau yn y gyfres hon
- (Yr erthygl hon)
- Defnyddio Canari gan ddefnyddio Istio
- Defnydd Dedwydd gan ddefnyddio Jenkins-X Istio Flagger
Dedwyddiad Dedwydd
Gobeithiwn y darllenwch , lle yr eglurasom yn fyr beth yw Canary Deployments. Fe wnaethom hefyd ddangos sut i'w weithredu gan ddefnyddio adnoddau safonol Kubernetes.
Cyflwyno Argo
Mae Argo Rollouts yn rheolwr lleoli brodorol Kubernetes. Mae'n darparu CRD (Diffiniad o Adnoddau Cwsmer) ar gyfer Kubernetes. Diolch iddo, gallwn ddefnyddio endid newydd: Rollout, sy'n rheoli gosodiadau glaswyrdd a chaneri gyda gwahanol opsiynau ffurfweddu.
Rheolydd Argo Rollouts a ddefnyddir gan adnodd wedi'i deilwra
Rollout,Yn caniatΓ‘u ar gyfer strategaethau defnyddio ychwanegol fel gwyrddlas a chaneri ar gyfer Kubernetes. AdnoddRolloutyn darparu ymarferoldeb cyfatebolDeployment, dim ond gyda strategaethau defnyddio ychwanegol.
adnoddDeploymentsMae ganddi ddwy strategaeth ar gyfer eu defnyddio:RollingUpdateΠΈRecreate. Er bod y strategaethau hyn yn addas ar gyfer y rhan fwyaf o achosion, i'w defnyddio ar weinyddion ar raddfa fawr iawn, defnyddir strategaethau ychwanegol, fel glaswyrdd neu caneri, nad ydynt ar gael yn y rheolydd Defnyddio. Er mwyn defnyddio'r strategaethau hyn yn Kubernetes, roedd yn rhaid i ddefnyddwyr ysgrifennu sgriptiau ar ben eu Defnyddiau. Mae Rheolwr Cyflwyno Argo yn datgelu'r strategaethau hyn fel paramedrau syml, datganiadol, ffurfweddadwy.
Mae yna hefyd Argo CI, sy'n darparu rhyngwyneb gwe cyfleus i'w ddefnyddio gyda Rollouts, byddwn yn edrych ar hynny yn yr erthygl nesaf.
Gosod Argo Rollouts
Ochr y gweinydd
kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml
Yn ein maip seilwaith (gweler isod) rydym eisoes wedi ychwanegu install.yaml fel i/k8s/argo-rollouts/install.yaml. Fel hyn bydd GitlabCI yn ei osod yn y clwstwr.
Ochr cleient (ategyn kubectl)
Cais Enghreifftiol
Mae'n arfer da cael storfeydd ar wahΓ’n ar gyfer cod cymwysiadau a seilwaith.
Ystorfa ar gyfer y cais
Mae hwn yn API Python + Ffasg syml iawn sy'n dychwelyd ymateb fel JSON. Byddwn yn adeiladu'r pecyn gan ddefnyddio GitlabCI ac yn gwthio'r canlyniad i Gofrestrfa Gitlab. Yn y gofrestrfa mae gennym ddau fersiwn rhyddhau gwahanol:
- wuestkamp/k8s-deployment-example-app: v1
- wuestkamp/k8s-deployment-example-app: v2
Yr unig wahaniaeth rhyngddynt yw'r ffeil JSON a ddychwelwyd. Rydym yn defnyddio'r cymhwysiad hwn i ddelweddu mor hawdd Γ’ phosibl pa fersiwn yr ydym yn cyfathrebu ag ef.
Ystorfa seilwaith
Yn y storfa hon byddwn yn defnyddio GitlabCI i'w ddefnyddio i Kubernetes, mae .gitlab-ci.yml yn edrych fel hyn:
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
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 tystlythyrau ar gyfer clwstwr (Gcloud).
Isadeiledd Yaml
O fewn y storfa seilwaith mae gennym wasanaeth:
apiVersion: v1
kind: Service
metadata:
labels:
id: rollout-canary
name: app
spec:
ports:
- port: 80
protocol: TCP
targetPort: 5000
selector:
id: app
type: LoadBalancer
a 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 yn gweithio yr un fath Γ’ Deployment. Os na fyddwn yn gosod strategaeth ddiweddaru (fel caneri yma) bydd yn ymddwyn fel y rhagosodedig Defnyddio diweddariad treigl.
Rydym yn diffinio dau gam yn yaml ar gyfer defnyddio caneri:
- 10% o'r traffig i'r caneri (arhoswch am Γ’ llaw yn iawn)
- 50% o draffig i'r caneri (aros 2 funud ac yna parhau i 100%)
Perfformio lleoli cychwynnol
Ar Γ΄l y defnydd cychwynnol, bydd ein hadnoddau yn edrych fel hyn:

A dim ond o fersiwn gyntaf y cais rydyn ni'n cael ymateb:

Perfformio Defnydd Canary
Cam 1: 10% traffig
I ddechrau defnyddio caneri, does ond angen i ni newid fersiwn y ddelwedd fel rydyn ni'n ei wneud fel arfer gyda gosodiadau:
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
...
Ac rydyn ni'n gwthio newidiadau, felly mae Gitlab CI yn eu defnyddio ac rydyn ni'n gweld y newidiadau:

Nawr os ydym yn cyrchu'r gwasanaeth:

Gwych! Rydym yng nghanol ein defnydd caneri. Gallwn weld y cynnydd trwy redeg:
kubectl argo rollouts get rollout rollout-canary

Cam 2: 50% o draffig:
Nawr, gadewch i ni symud ymlaen i'r cam nesaf: ailgyfeirio 50% o'r traffig. Fe wnaethom ffurfweddu'r cam hwn i gael ei redeg Γ’ llaw:
kubectl argo rollouts promote rollout-canary # continue to step 2

A dychwelodd ein cais 50% o'r ymatebion o fersiynau newydd:

Ac adolygiad cyflwyno:

PrΠ΅ΠΊΡΠ°ΡΠ½ΠΎ.
Cam 3: 100% o draffig:
Fe wnaethom ei sefydlu fel bod y cam 2% yn dod i ben yn awtomatig ar Γ΄l 50 funud a bod y cam 100% yn dechrau:

Ac allbwn y cais:

Ac adolygiad cyflwyno:

Mae'r defnydd caneri wedi'i gwblhau.
Mwy o enghreifftiau gyda Argo Rollouts
Mae mwy o enghreifftiau yma, megis sut i sefydlu rhagolygon amgylchedd a chymariaethau yn seiliedig ar ganeri:
Fideo am Argo Rollouts ac Argo CI
Rwy'n argymell y fideo hwn yn fawr, mae'n dangos sut mae Argo Rollouts ac Argo CI yn gweithio gyda'i gilydd:
Cyfanswm
Rwy'n hoff iawn o'r syniad o ddefnyddio CRDs sy'n rheoli creu mathau ychwanegol o leoliadau neu atgynhyrchiadau, ailgyfeirio traffig, ac ati. Mae gweithio gyda nhw yn mynd yn esmwyth. Nesaf hoffwn brofi'r integreiddio ag Argo CI.
Fodd bynnag, mae'n ymddangos bod cyfuniad mawr o Argo CI a Flux CI yn dod, felly efallai y byddaf yn aros nes bydd y datganiad newydd yn dod allan: .
Ydych chi wedi cael unrhyw brofiad gydag Argo Rollouts neu Argo CI?
Darllenwch erthyglau eraill ar ein blog hefyd:
Ffynhonnell: hab.com
