Siza kusebenzisa isilawuli se-k8s-native Argo Rollouts kunye neGitlabCI ukuqhuba ukuthunyelwa kweCanary eKubernetes
Amanqaku kolu ngcelele
Ukuhanjiswa kweCanary kwiKubernetes #1: Gitlab CI - (Oku kubhaliwe)
- Ukuhanjiswa kweCanary usebenzisa i-Istio
- Ukuhanjiswa kweCanary usebenzisa iJenkins-X Istio Flagger
Ukusasazwa kweCanary
Siyathemba ukuba uyayifunda
Ukukhutshwa kweArgo
Ukukhutshwa kwe-Argo ngumlawuli wokusasazwa we-Kubernetes. Ibonelela ngeCRD (iNgcaciso yeSibonelelo seSiko) yeKubernetes. Enkosi kuyo, sinokusebenzisa iziko elitsha: Rollout
, elawula i-blue-green kunye ne-canary deployments kunye neendlela ezahlukeneyo zoqwalaselo.
Isilawuli se-Argo Rollouts esisetyenziswe ngumthombo oqhelekileyo
Rollout,
Ivumela izicwangciso zokusasaza ezongezelelweyo ezifana neblue-green kunye necanary yeKubernetes. UmthomboRollout
inikeza umsebenzi olinganayoDeployment
, kuphela ngezicwangciso zokusasazwa ezongezelelweyo.
ubutyebiDeployments
ineendlela ezimbini zokusasaza:RollingUpdate
иRecreate
. Nangona ezi zicwangciso zifanelekile kwiimeko ezininzi, ukuthunyelwa kwiiseva kwizinga elikhulu kakhulu, izicwangciso ezongezelelweyo zisetyenzisiweyo, ezifana ne-blue-green okanye i-canary, engafumanekiyo kwi-Deployment controller. Ukusebenzisa ezi zicwangciso kwi-Kubernetes, abasebenzisi bekufuneka babhale izikripthi phezulu kwi-Deployments yabo. UMlawuli we-Argo Rollouts uveza ezi zicwangciso njengezinto ezilula, ezichazayo, iiparameters ezilungisekayo.
https://argoproj.github.io/argo-rollouts
Kukwakho neArgo CI, ebonelela ngojongano lwewebhu olufanelekileyo ukuze lusetyenziswe kunye noRolout, siza kujonga oko kwinqaku elilandelayo.
Ukufakela iArgo Rollouts
Icala lomncedisi
kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml
Kwi-infrastructure turnip yethu (jonga ngezantsi) sele songeze i-install.yaml njenge-i/k8s/argo-rollouts/install.yaml. Ngale ndlela i-GitlabCI iya kuyifaka kwiqela.
Icala lomthengi (kubectl plugin)
Umzekelo wosetyenziso
Yinkqubo elungileyo ukuba neendawo zokugcina ezahlukeneyo zekhowudi yesicelo kunye neziseko zoncedo.
Indawo yokugcina isicelo
Kim Wuestkamp/k8s-deployment-example-app
Le yiPython+Flask API elula kakhulu ebuyisela impendulo njenge-JSON. Siza kwakha ipakethe sisebenzisa iGitlabCI kwaye sityhale umphumo kwiRegistry yeGitlab. Kwirejistri sineenguqulelo ezimbini ezahlukeneyo zokukhupha:
- wuestkamp/k8s-deployment-example-app:v1
- wuestkamp/k8s-deployment-example-app:v2
Umahluko kuphela phakathi kwabo yifayile ye-JSON ebuyisiweyo. Sisebenzisa esi sicelo ukubona umfanekiso ngokulula kangangoko ukuba yeyiphi inguqulelo esinxibelelana nayo.
Uvimba weziseko zophuhliso
Kulo vimba siza kusebenzisa i-GitlabCI yokusasazwa kwi-Kubernetes, .gitlab-ci.yml ijongeka ngolu hlobo:
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
Ukuyiqhuba ngokwakho uya kufuna iqela, ungasebenzisa iGcloud:
gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b
gcloud compute firewall-rules create incoming-80 --allow tcp:80
Udinga ifolokhwe KUBECONFIG
kwi-GitlabCI, eya kuqulatha uqwalaselo lofikelelo kubectl
kwiqela lakho.
Ulwakhiwo lweYaml
Ngaphakathi kwendawo yokugcina izixhobo sinenkonzo:
apiVersion: v1
kind: Service
metadata:
labels:
id: rollout-canary
name: app
spec:
ports:
- port: 80
protocol: TCP
targetPort: 5000
selector:
id: app
type: LoadBalancer
kunye nokukhutshwa.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
isebenza ngokufanayo nokusasazwa. Ukuba asiyibeki isicwangciso sohlaziyo (njenge canary apha) siyakuziphatha njengoSaziso lohlaziyo olungagqibekanga.
Sichaza amanyathelo amabini kwi-yaml yokuthunyelwa kwe-canary:
- I-10% yetrafikhi ukuya e-canary (linda imanuwali Kulungile)
- I-50% yetrafikhi ukuya e-canary (linda imizuzu emi-2 uze uqhubeke uye kwi-100%)
Ukwenza ukusasazwa kokuqala
Emva kokuthunyelwa kokuqala, izixhobo zethu ziya kujongeka ngolu hlobo:
Kwaye sifumana impendulo kuphela kwinguqulelo yokuqala yesicelo:
Ukwenza iCanary Deployment
Inyathelo 1: 10% yetrafikhi
Ukuqala ukuthunyelwa kwe-canary, kufuneka sitshintshe inguqulelo yomfanekiso njengoko siqhele ukwenza ngokusasazwa:
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
...
Kwaye sityhala utshintsho, ke iGitlab CI iyathumela kwaye siyalubona utshintsho:
Ngoku ukuba sifikelela kwinkonzo:
Kakhulu! Siphakathi kwi-canary yethu yokuthunyelwa. Sinokuyibona inkqubela ngokuqhuba:
kubectl argo rollouts get rollout rollout-canary
Inyathelo 2: 50% yetrafikhi:
Ngoku masigqithele kwinyathelo elilandelayo: ukuqondisa ngokutsha i-50% yetrafikhi. Siqwalasele eli nyathelo ukuba liqhutywe ngesandla:
kubectl argo rollouts promote rollout-canary # continue to step 2
Kwaye isicelo sethu sibuyise i-50% yeempendulo kwiinguqulelo ezintsha:
Kwaye ukuphononongwa kokukhutshwa:
Iyamangalisa.
Inyathelo 3: 100% yetrafikhi:
Siyimise ukuze emva kwemizuzu emi-2 inyathelo le-50% liphele ngokuzenzekelayo kwaye inyathelo le-100% liqale:
Kwaye imveliso yesicelo:
Kwaye ukuphononongwa kokukhutshwa:
Ukuthunyelwa kweCanary kugqityiwe.
Eminye imizekelo ene-Argo Rollouts
Kukho imizekelo eyongeziweyo apha, efana nendlela yokuseta umboniso wemo engqongileyo kunye nothelekiso olusekwe kwicanary:
Ividiyo malunga neArgo Rollouts kunye neArgo CI
Ndiyincoma ngokwenene le vidiyo, ibonisa indlela iArgo Rollouts kunye neArgo CI esebenzisana ngayo:
Isiphumo
Ndiwuthanda kakhulu umbono wokusebenzisa ii-CRD ezilawula ukuyilwa kweentlobo ezongezelelweyo zokuthunyelwa okanye ukuphindaphinda, ukuqondisa kwakhona itrafikhi, njl. Ukusebenza nabo kuhamba kakuhle. Okulandelayo ndingathanda ukuvavanya ukudibanisa kunye neArgo CI.
Nangona kunjalo, kubonakala ngathi kukho ukudityaniswa okukhulu kweArgo CI kunye neFlux CI ezayo, ke ndingalinda de kuphume ukhupho olutsha:
Ngaba ukhe wanamava ngeArgo Rollouts okanye iArgo CI?
Funda namanye amanqaku kwibhlog yethu:
IBlue-Green Deployment yeSpring applications kunye ne-Nginx web server Kubernetes: kutheni kubaluleke kangaka ukuqwalasela ulawulo lwemithombo yenkqubo? Intshayelelo kuGunyaziso lwe-Hashicorp Consul's Kubernetes I-Tekton Pipeline-i-Kubernetes-native pipelines Ukwakha iimodyuli eziguqukayo zeNginx Ibhot yeTelegram yeRedmine. Indlela yokwenza ubomi bube lula kuwe nakwabanye
umthombo: www.habr.com