Isu tichashandisa iyo k8s-yekuzvarwa Argo Rollouts deployment controller uye GitlabCI kumhanya Canary deployments kuKubernetes.
Zvinyorwa munhevedzano iyi
Canary Deployment muKubernetes #1: Gitlab CI - (Chinyorwa ichi)
- Canary Deployment uchishandisa Istio
- Canary Deployment uchishandisa Jenkins-X Istio Flagger
Canary Deployment
Tinovimba wakaverenga
Argo Rollouts
Argo Rollouts ndeye Kubernetes chizvarwa chekuendesa controller. Iyo inopa CRD (Custom Resource Definition) yeKubernetes. Kutenda kwazviri, tinogona kushandisa chinhu chitsva: Rollout
, iyo inogadzirisa bhuruu-girinhi uye canary deployments ine akasiyana siyana ekugadzirisa sarudzo.
Argo Rollouts controller inoshandiswa netsika sosi
Rollout,
Inobvumira mamwe maitiro ekutumira akadai sebhuruu-girinhi uye canary yeKubernetes. ResourceRollout
inopa kushanda kwakaenzanaDeployment
, chete nemaitiro ekuwedzera ekutumira.
ZvinyorwaDeployments
ine nzira mbiri dzekutumira:RollingUpdate
ΠΈRecreate
. Kunyange zvazvo mazano aya akakodzera kuzviitiko zvakawanda, pakuendeswa kumaseva pamwero mukuru kwazvo, mamwe mazano anoshandiswa, akadai sebhuruu-girinhi kana canary, izvo zvisingawaniki muDeployment controller. Kuti ushandise mazano aya muKubernetes, vashandisi vaifanira kunyora zvinyorwa pamusoro peDeployments yavo. Iyo Argo Rollouts Controller inofumura mazano aya seakareruka, anozivisa, anogadziriswa paramita.
https://argoproj.github.io/argo-rollouts
Kune zvakare Argo CI, iyo inopa yakareruka yewebhu interface yekushandisa neRollouts, isu tichatarisa izvo mune inotevera chinyorwa.
Kuisa 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
Mune yedu yekuvaka turnip (ona pazasi) takatowedzera install.yaml se i/k8s/argo-rollouts/install.yaml. Nenzira iyi GitlabCI ichaiisa musumbu.
Chikamu chemutengi (kubectl plugin)
Muenzaniso Application
Iyo yakanaka tsika kuve neakasiyana repositories yekodhi yekushandisa uye zvivakwa.
Repository yekushandisa
Kim Wuestkamp/k8s-deployment-example-app
Iyi iri nyore kwazvo Python + Flask API inodzosera mhinduro seJSON. Isu tichavaka iyo package tichishandisa GitlabCI uye tosundira mhedzisiro kuGitlab Registry. Mune registry tine maviri akasiyana ekuburitsa shanduro:
- wuestkamp/k8s-deployment-muenzaniso-app:v1
- wuestkamp/k8s-deployment-muenzaniso-app:v2
Musiyano uripo pakati pavo ifaira reJSON rakadzoswa. Isu tinoshandisa iyi application kuona zviri nyore sezvinobvira iyo shanduro yatiri kutaurirana nayo.
Infrastructure repository
Mune ino repository tichashandisa GitlabCI yekuendesa kuKubernetes, .gitlab-ci.yml inoita seizvi:
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 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.
Infrastructure Yaml
Mukati mezvivakwa repository tine sevhisi:
apiVersion: v1
kind: Service
metadata:
labels:
id: rollout-canary
name: app
spec:
ports:
- port: 80
protocol: TCP
targetPort: 5000
selector:
id: app
type: LoadBalancer
and 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
inoshanda zvakafanana neDeployment. Kana tikasaisa zano rekuvandudza (senge canary pano) rinoita senge default rolling-update Deployment.
Isu tinotsanangura nhanho mbiri muyaml yekutumirwa kwecanary:
- 10% yetraffic kuenda kucanary (mirira bhuku OK)
- 50% traffic kuenda kucanary (mira maminetsi maviri wozoenderera ku2%)
Kuita kutumirwa kwekutanga
Mushure mekutanga kutumirwa, zviwanikwa zvedu zvinotaridzika seizvi:
Uye isu tinowana mhinduro chete kubva kune yekutanga vhezheni yekushandisa:
Kuita Canary Deployment
Nhanho 1: 10% traffic
Kuti utange kutumirwa kwecanary, isu tinongoda kushandura iyo vhezheni yemufananidzo sezvatinowanzoita ne deployments:
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
...
Uye isu tinosundira shanduko, saka Gitlab CI inotumira uye tinoona shanduko:
Zvino kana tikawana sevhisi:
Hukuru! Isu tiri pakati pekutumirwa kwedu canary. Tinogona kuona kufambira mberi nekumhanya:
kubectl argo rollouts get rollout rollout-canary
Nhanho 2: 50% traffic:
Zvino ngatiendererei kune chinhanho chinotevera: kutungamira 50% yetraffic. Isu takagadzirisa danho iri kuti riitwe nemaoko:
kubectl argo rollouts promote rollout-canary # continue to step 2
Uye application yedu yakadzosa 50% yemhinduro kubva kushanduro itsva:
Uye kuongorora kwekutanga:
Wonderful.
Nhanho 3: 100% traffic:
Isu takazvigadzirisa kuitira kuti mushure memaminitsi maviri nhanho ye2% inopera otomatiki uye nhanho ye50% yaizotanga:
Uye iyo application inobuda:
Uye kuongorora kwekutanga:
Canary deployment yapera.
Mimwe mienzaniso neArgo Rollouts
Kune mimwe mienzaniso pano, senge nzira yekumisikidza nharaunda yekutarisa uye kuenzanisa kunoenderana necanary:
Vhidhiyo nezve Argo Rollouts uye Argo CI
Ini ndinonyatso kurudzira iyi vhidhiyo, inoratidza mashandiro anoita Argo Rollouts uye Argo CI pamwe chete:
Mugumisiro
Ini ndinoda chaizvo zano rekushandisa maCRD anogadzirisa kugadzirwa kwemamwe marudzi ekutumirwa kana kudhindwa, redirect traffic, nezvimwe. Kushanda navo kunofamba zvakanaka. Tevere ndinoda kuyedza kubatanidzwa neArgo CI.
Nekudaro, panoratidzika kunge paine kubatanidzwa kukuru kweArgo CI neFlux CI iri kuuya, saka ndinogona kumirira kusvika kuburitswa kutsva kwabuda:
Wakambove neruzivo here neArgo Rollouts kana Argo CI?
Verengawo zvimwe zvinyorwa pane yedu blog:
Blue-Green Deployment yeChitubu application neNginx web server Kubernetes: nei zvakakosha kumisikidza sisitimu yekushandisa manejimendi? Nhanganyaya kune Hashicorp Consul's Kubernetes Mvumo Tekton Pipeline - Kubernetes-native mapaipi Kuvaka dynamic modules yeNginx Teregiramu bot yeRedmine. Nzira yekurerutsa hupenyu iwe pachako uye nevamwe
Source: www.habr.com