కుబెర్నెటెస్ #2లో కానరీ విస్తరణ: అర్గో రోల్‌అవుట్‌లు

మేము Kubernetes కు కానరీ డిప్లాయ్‌మెంట్‌లను అమలు చేయడానికి k8s-native Argo Rollouts విస్తరణ కంట్రోలర్ మరియు GitlabCIని ఉపయోగిస్తాము

కుబెర్నెటెస్ #2లో కానరీ విస్తరణ: అర్గో రోల్‌అవుట్‌లు

https://unsplash.com/photos/V41PulGL1z0

ఈ సిరీస్‌లోని కథనాలు

కానరీ విస్తరణ

మీరు చదివారని ఆశిస్తున్నాము మొదటి భాగం, ఇక్కడ మేము కానరీ విస్తరణలు ఏమిటో క్లుప్తంగా వివరించాము. ప్రామాణిక కుబెర్నెట్స్ వనరులను ఉపయోగించి దీన్ని ఎలా అమలు చేయాలో కూడా మేము చూపించాము.

అర్గో రోల్అవుట్‌లు

అర్గో రోల్‌అవుట్స్ అనేది కుబెర్నెట్స్ స్థానిక విస్తరణ కంట్రోలర్. ఇది Kubernetes కోసం CRD (కస్టమ్ రిసోర్స్ డెఫినిషన్) అందిస్తుంది. దానికి ధన్యవాదాలు, మేము కొత్త ఎంటిటీని ఉపయోగించవచ్చు: Rollout, ఇది వివిధ కాన్ఫిగరేషన్ ఎంపికలతో నీలం-ఆకుపచ్చ మరియు కానరీ విస్తరణలను నిర్వహిస్తుంది.

కస్టమ్ రిసోర్స్ ద్వారా ఉపయోగించబడే Argo Rollouts కంట్రోలర్ Rollout, కుబెర్నెట్స్ కోసం బ్లూ-గ్రీన్ మరియు కానరీ వంటి అదనపు విస్తరణ వ్యూహాలను అనుమతిస్తుంది. వనరు Rollout సమానమైన కార్యాచరణను అందిస్తుంది Deployment, అదనపు విస్తరణ వ్యూహాలతో మాత్రమే.
వనరు Deployments విస్తరణ కోసం రెండు వ్యూహాలు ఉన్నాయి: RollingUpdate и Recreate. ఈ వ్యూహాలు చాలా సందర్భాలలో అనుకూలంగా ఉన్నప్పటికీ, చాలా పెద్ద స్థాయిలో సర్వర్‌లకు విస్తరణ కోసం, డిప్లాయ్‌మెంట్ కంట్రోలర్‌లో అందుబాటులో లేని బ్లూ-గ్రీన్ లేదా కానరీ వంటి అదనపు వ్యూహాలు ఉపయోగించబడతాయి. కుబెర్నెట్స్‌లో ఈ వ్యూహాలను ఉపయోగించడానికి, వినియోగదారులు వారి డిప్లాయ్‌మెంట్‌ల పైన స్క్రిప్ట్‌లను వ్రాయవలసి ఉంటుంది. Argo Rollouts కంట్రోలర్ ఈ వ్యూహాలను సాధారణ, డిక్లరేటివ్, కాన్ఫిగర్ చేయగల పారామీటర్‌లుగా బహిర్గతం చేస్తుంది.
https://argoproj.github.io/argo-rollouts

Argo CI కూడా ఉంది, ఇది రోల్‌అవుట్‌లతో ఉపయోగించడానికి అనుకూలమైన వెబ్ ఇంటర్‌ఫేస్‌ను అందిస్తుంది, మేము దానిని తదుపరి కథనంలో పరిశీలిస్తాము.

ఆర్గో రోల్‌అవుట్‌లను ఇన్‌స్టాల్ చేస్తోంది

సర్వర్ వైపు

kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml

మా ఇన్‌ఫ్రాస్ట్రక్చర్ టర్నిప్‌లో (క్రింద చూడండి) మేము ఇప్పటికే install.yamlని i/k8s/argo-rollouts/install.yamlగా జోడించాము. ఈ విధంగా GitlabCI దానిని క్లస్టర్‌లో ఇన్‌స్టాల్ చేస్తుంది.

క్లయింట్ వైపు (kubectl ప్లగిన్)

https://argoproj.github.io/argo-rollouts/features/kubectl-plugin

ఉదాహరణ అప్లికేషన్

అప్లికేషన్ కోడ్ మరియు ఇన్‌ఫ్రాస్ట్రక్చర్ కోసం ప్రత్యేక రిపోజిటరీలను కలిగి ఉండటం మంచి పద్ధతి.

అప్లికేషన్ కోసం రిపోజిటరీ

Kim Wuestkamp/k8s-deployment-example-app

ఇది చాలా సులభమైన పైథాన్+ఫ్లాస్క్ API, ఇది JSONగా ప్రతిస్పందనను అందిస్తుంది. మేము GitlabCIని ఉపయోగించి ప్యాకేజీని నిర్మిస్తాము మరియు ఫలితాన్ని Gitlab రిజిస్ట్రీకి పుష్ చేస్తాము. రిజిస్ట్రీలో మనకు రెండు వేర్వేరు విడుదల వెర్షన్లు ఉన్నాయి:

  • wuestkamp/k8s-deployment-example-app:v1
  • wuestkamp/k8s-deployment-example-app:v2

వాటి మధ్య ఉన్న ఒకే ఒక్క తేడా JSON ఫైల్ తిరిగి ఇవ్వబడింది. మేము ఏ వెర్షన్‌తో కమ్యూనికేట్ చేస్తున్నామో వీలైనంత సులభంగా విజువలైజ్ చేయడానికి ఈ అప్లికేషన్‌ని ఉపయోగిస్తాము.

ఇన్‌ఫ్రాస్ట్రక్చర్ రిపోజిటరీ

ఈ రిపోజిటరీలో మేము Kubernetesకి విస్తరణ కోసం GitlabCIని ఉపయోగిస్తాము, .gitlab-ci.yml ఇలా కనిపిస్తుంది:

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

దీన్ని మీరే అమలు చేయడానికి మీకు క్లస్టర్ అవసరం, మీరు Gcloudని ఉపయోగించవచ్చు:

gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b
gcloud compute firewall-rules create incoming-80 --allow tcp:80

మీరు ఫోర్క్ చేయాలి https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure మరియు వేరియబుల్ సృష్టించండి KUBECONFIG GitlabCIలో, యాక్సెస్ కోసం కాన్ఫిగర్ ఉంటుంది kubectl మీ క్లస్టర్‌కి.

ఇది క్లస్టర్ (Gcloud) కోసం ఆధారాలను ఎలా పొందాలో మీరు చదువుకోవచ్చు.

ఇన్ఫ్రాస్ట్రక్చర్ Yaml

ఇన్‌ఫ్రాస్ట్రక్చర్ రిపోజిటరీ లోపల మాకు సేవ ఉంది:

apiVersion: v1
kind: Service
metadata:
 labels:
   id: rollout-canary
 name: app
spec:
 ports:
 - port: 80
   protocol: TCP
   targetPort: 5000
 selector:
   id: app
 type: LoadBalancer

మరియు 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 డిప్లాయ్‌మెంట్ మాదిరిగానే పని చేస్తుంది. మేము నవీకరణ వ్యూహాన్ని సెట్ చేయకుంటే (ఇక్కడ కానరీ లాగా) అది డిఫాల్ట్ రోలింగ్-అప్‌డేట్ డిప్లాయ్‌మెంట్ లాగా ప్రవర్తిస్తుంది.

మేము కానరీ విస్తరణ కోసం yamlలో రెండు దశలను నిర్వచించాము:

  1. కానరీకి 10% ట్రాఫిక్ (మాన్యువల్ సరే కోసం వేచి ఉండండి)
  2. కానరీకి 50% ట్రాఫిక్ (2 నిమిషాలు వేచి ఉండి తర్వాత 100% వరకు కొనసాగండి)

ప్రారంభ విస్తరణను నిర్వహిస్తోంది

ప్రారంభ విస్తరణ తర్వాత, మా వనరులు ఇలా కనిపిస్తాయి:

కుబెర్నెటెస్ #2లో కానరీ విస్తరణ: అర్గో రోల్‌అవుట్‌లు

మరియు మేము అప్లికేషన్ యొక్క మొదటి వెర్షన్ నుండి మాత్రమే ప్రతిస్పందనను పొందుతాము:

కుబెర్నెటెస్ #2లో కానరీ విస్తరణ: అర్గో రోల్‌అవుట్‌లు

కానరీ విస్తరణను నిర్వహిస్తోంది

దశ 1: 10% ట్రాఫిక్

కానరీ డిప్లాయ్‌మెంట్‌ని ప్రారంభించడానికి, మేము సాధారణంగా డిప్లాయ్‌మెంట్‌లతో చేసే విధంగా ఇమేజ్ వెర్షన్‌ను మార్చాలి:

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
...

మరియు మేము మార్పులను పుష్ చేస్తాము, కాబట్టి Gitlab CI అమలు చేస్తుంది మరియు మేము మార్పులను చూస్తాము:

కుబెర్నెటెస్ #2లో కానరీ విస్తరణ: అర్గో రోల్‌అవుట్‌లు

ఇప్పుడు మేము సేవను యాక్సెస్ చేస్తే:

కుబెర్నెటెస్ #2లో కానరీ విస్తరణ: అర్గో రోల్‌అవుట్‌లు

గొప్ప! మేము మా కానరీ విస్తరణ మధ్యలో ఉన్నాము. మేము రన్ చేయడం ద్వారా పురోగతిని చూడవచ్చు:

kubectl argo rollouts get rollout rollout-canary

కుబెర్నెటెస్ #2లో కానరీ విస్తరణ: అర్గో రోల్‌అవుట్‌లు

దశ 2: 50% ట్రాఫిక్:

ఇప్పుడు తదుపరి దశకు వెళ్దాం: 50% ట్రాఫిక్‌ను దారి మళ్లించడం. మేము ఈ దశను మాన్యువల్‌గా అమలు చేయడానికి కాన్ఫిగర్ చేసాము:

kubectl argo rollouts promote rollout-canary # continue to step 2

కుబెర్నెటెస్ #2లో కానరీ విస్తరణ: అర్గో రోల్‌అవుట్‌లు

మరియు మా అప్లికేషన్ కొత్త వెర్షన్‌ల నుండి 50% ప్రతిస్పందనలను అందించింది:

కుబెర్నెటెస్ #2లో కానరీ విస్తరణ: అర్గో రోల్‌అవుట్‌లు

మరియు రోల్అవుట్ సమీక్ష:

కుబెర్నెటెస్ #2లో కానరీ విస్తరణ: అర్గో రోల్‌అవుట్‌లు

ప్రెక్రాస్నో.

దశ 3: 100% ట్రాఫిక్:

మేము దీన్ని సెటప్ చేసాము, తద్వారా 2 నిమిషాల తర్వాత 50% దశ స్వయంచాలకంగా ముగుస్తుంది మరియు 100% దశ ప్రారంభమవుతుంది:

కుబెర్నెటెస్ #2లో కానరీ విస్తరణ: అర్గో రోల్‌అవుట్‌లు

మరియు అప్లికేషన్ అవుట్‌పుట్:

కుబెర్నెటెస్ #2లో కానరీ విస్తరణ: అర్గో రోల్‌అవుట్‌లు

మరియు రోల్అవుట్ సమీక్ష:

కుబెర్నెటెస్ #2లో కానరీ విస్తరణ: అర్గో రోల్‌అవుట్‌లు

కానరీ విస్తరణ పూర్తయింది.

ఆర్గో రోల్‌అవుట్‌లతో మరిన్ని ఉదాహరణలు

కానరీ ఆధారంగా పర్యావరణ పరిదృశ్యాలు మరియు పోలికలను ఎలా సెటప్ చేయాలి వంటి మరిన్ని ఉదాహరణలు ఇక్కడ ఉన్నాయి:

https://github.com/argoproj/argo-rollouts/tree/master/examples

Argo Rollouts మరియు Argo CI గురించిన వీడియో

నేను నిజంగా ఈ వీడియోను సిఫార్సు చేస్తున్నాను, ఇది Argo Rollouts మరియు Argo CI ఎలా కలిసి పని చేస్తుందో చూపిస్తుంది:

ఫలితం

అదనపు రకాల విస్తరణలు లేదా ప్రతిరూపాలు, దారిమార్పు ట్రాఫిక్ మొదలైన వాటి సృష్టిని నిర్వహించే CRDలను ఉపయోగించాలనే ఆలోచన నాకు చాలా ఇష్టం. వారితో పని సాఫీగా సాగుతుంది. తర్వాత నేను అర్గో CIతో ఏకీకరణను పరీక్షించాలనుకుంటున్నాను.

అయినప్పటికీ, Argo CI మరియు Flux CI యొక్క పెద్ద విలీనం వస్తున్నట్లు కనిపిస్తోంది, కాబట్టి కొత్త విడుదల వచ్చే వరకు నేను వేచి ఉండవచ్చు: అర్గో ఫ్లక్స్.

మీకు అర్గో రోల్‌అవుట్‌లు లేదా అర్గో CIతో ఏదైనా అనుభవం ఉందా?

మా బ్లాగ్‌లోని ఇతర కథనాలను కూడా చదవండి:

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి