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

ఈ సిరీస్లోని కథనాలు
- (ఈ వ్యాసం)
- Istio ఉపయోగించి కానరీ విస్తరణ
- జెంకిన్స్-ఎక్స్ ఇస్టియో ఫ్లాగర్ ఉపయోగించి కానరీ విస్తరణ
కానరీ విస్తరణ
మీరు చదివారని ఆశిస్తున్నాము , ఇక్కడ మేము కానరీ విస్తరణలు ఏమిటో క్లుప్తంగా వివరించాము. ప్రామాణిక కుబెర్నెట్స్ వనరులను ఉపయోగించి దీన్ని ఎలా అమలు చేయాలో కూడా మేము చూపించాము.
అర్గో రోల్అవుట్లు
అర్గో రోల్అవుట్స్ అనేది కుబెర్నెట్స్ స్థానిక విస్తరణ కంట్రోలర్. ఇది Kubernetes కోసం CRD (కస్టమ్ రిసోర్స్ డెఫినిషన్) అందిస్తుంది. దానికి ధన్యవాదాలు, మేము కొత్త ఎంటిటీని ఉపయోగించవచ్చు: Rollout, ఇది వివిధ కాన్ఫిగరేషన్ ఎంపికలతో నీలం-ఆకుపచ్చ మరియు కానరీ విస్తరణలను నిర్వహిస్తుంది.
కస్టమ్ రిసోర్స్ ద్వారా ఉపయోగించబడే Argo Rollouts కంట్రోలర్
Rollout,కుబెర్నెట్స్ కోసం బ్లూ-గ్రీన్ మరియు కానరీ వంటి అదనపు విస్తరణ వ్యూహాలను అనుమతిస్తుంది. వనరుRolloutసమానమైన కార్యాచరణను అందిస్తుందిDeployment, అదనపు విస్తరణ వ్యూహాలతో మాత్రమే.
వనరుDeploymentsవిస్తరణ కోసం రెండు వ్యూహాలు ఉన్నాయి:RollingUpdateиRecreate. ఈ వ్యూహాలు చాలా సందర్భాలలో అనుకూలంగా ఉన్నప్పటికీ, చాలా పెద్ద స్థాయిలో సర్వర్లకు విస్తరణ కోసం, డిప్లాయ్మెంట్ కంట్రోలర్లో అందుబాటులో లేని బ్లూ-గ్రీన్ లేదా కానరీ వంటి అదనపు వ్యూహాలు ఉపయోగించబడతాయి. కుబెర్నెట్స్లో ఈ వ్యూహాలను ఉపయోగించడానికి, వినియోగదారులు వారి డిప్లాయ్మెంట్ల పైన స్క్రిప్ట్లను వ్రాయవలసి ఉంటుంది. 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 ప్లగిన్)
ఉదాహరణ అప్లికేషన్
అప్లికేషన్ కోడ్ మరియు ఇన్ఫ్రాస్ట్రక్చర్ కోసం ప్రత్యేక రిపోజిటరీలను కలిగి ఉండటం మంచి పద్ధతి.
అప్లికేషన్ కోసం రిపోజిటరీ
ఇది చాలా సులభమైన పైథాన్+ఫ్లాస్క్ 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మీరు ఫోర్క్ చేయాలి మరియు వేరియబుల్ సృష్టించండి 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 minutesRollout డిప్లాయ్మెంట్ మాదిరిగానే పని చేస్తుంది. మేము నవీకరణ వ్యూహాన్ని సెట్ చేయకుంటే (ఇక్కడ కానరీ లాగా) అది డిఫాల్ట్ రోలింగ్-అప్డేట్ డిప్లాయ్మెంట్ లాగా ప్రవర్తిస్తుంది.
మేము కానరీ విస్తరణ కోసం yamlలో రెండు దశలను నిర్వచించాము:
- కానరీకి 10% ట్రాఫిక్ (మాన్యువల్ సరే కోసం వేచి ఉండండి)
- కానరీకి 50% ట్రాఫిక్ (2 నిమిషాలు వేచి ఉండి తర్వాత 100% వరకు కొనసాగండి)
ప్రారంభ విస్తరణను నిర్వహిస్తోంది
ప్రారంభ విస్తరణ తర్వాత, మా వనరులు ఇలా కనిపిస్తాయి:

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

కానరీ విస్తరణను నిర్వహిస్తోంది
దశ 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 అమలు చేస్తుంది మరియు మేము మార్పులను చూస్తాము:

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

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

దశ 2: 50% ట్రాఫిక్:
ఇప్పుడు తదుపరి దశకు వెళ్దాం: 50% ట్రాఫిక్ను దారి మళ్లించడం. మేము ఈ దశను మాన్యువల్గా అమలు చేయడానికి కాన్ఫిగర్ చేసాము:
kubectl argo rollouts promote rollout-canary # continue to step 2

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

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

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

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

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

కానరీ విస్తరణ పూర్తయింది.
ఆర్గో రోల్అవుట్లతో మరిన్ని ఉదాహరణలు
కానరీ ఆధారంగా పర్యావరణ పరిదృశ్యాలు మరియు పోలికలను ఎలా సెటప్ చేయాలి వంటి మరిన్ని ఉదాహరణలు ఇక్కడ ఉన్నాయి:
Argo Rollouts మరియు Argo CI గురించిన వీడియో
నేను నిజంగా ఈ వీడియోను సిఫార్సు చేస్తున్నాను, ఇది Argo Rollouts మరియు Argo CI ఎలా కలిసి పని చేస్తుందో చూపిస్తుంది:

ఫలితం
అదనపు రకాల విస్తరణలు లేదా ప్రతిరూపాలు, దారిమార్పు ట్రాఫిక్ మొదలైన వాటి సృష్టిని నిర్వహించే CRDలను ఉపయోగించాలనే ఆలోచన నాకు చాలా ఇష్టం. వారితో పని సాఫీగా సాగుతుంది. తర్వాత నేను అర్గో CIతో ఏకీకరణను పరీక్షించాలనుకుంటున్నాను.
అయినప్పటికీ, Argo CI మరియు Flux CI యొక్క పెద్ద విలీనం వస్తున్నట్లు కనిపిస్తోంది, కాబట్టి కొత్త విడుదల వచ్చే వరకు నేను వేచి ఉండవచ్చు: .
మీకు అర్గో రోల్అవుట్లు లేదా అర్గో CIతో ఏదైనా అనుభవం ఉందా?
మా బ్లాగ్లోని ఇతర కథనాలను కూడా చదవండి:
మూలం: www.habr.com
