Kubernetes #2 හි කැනරි යෙදවීම: Argo Rollouts

අපි Kubernetes වෙත Canary යෙදවීම් ක්‍රියාත්මක කිරීමට k8s-native Argo Rollouts යෙදවුම් පාලකය සහ GitlabCI භාවිතා කරන්නෙමු.

Kubernetes #2 හි කැනරි යෙදවීම: Argo Rollouts

https://unsplash.com/photos/V41PulGL1z0

මෙම ලිපි මාලාවේ ලිපි

කැනරි යෙදවීම

ඔබ කියවනු ඇතැයි අපි බලාපොරොත්තු වෙමු පළමු කොටස, කැනරි යෙදවීම් යනු කුමක්දැයි අපි කෙටියෙන් පැහැදිලි කළෙමු. සම්මත Kubernetes සම්පත් භාවිතයෙන් එය ක්‍රියාත්මක කරන ආකාරය ද අපි පෙන්වා දුන්නෙමු.

Argo Rollouts

Argo Rollouts යනු Kubernetes දේශීය යෙදවුම් පාලකයකි. එය Kubernetes සඳහා CRD (අභිරුචි සම්පත් අර්ථ දැක්වීම) සපයයි. එයට ස්තූතියි, අපට නව ආයතනයක් භාවිතා කළ හැකිය: Rollout, විවිධ වින්‍යාස විකල්ප සමඟ නිල්-කොළ සහ කැනරි යෙදවීම් කළමනාකරණය කරයි.

අභිරුචි සම්පතක් භාවිතා කරන Argo Rollouts පාලකය Rollout, Kubernetes සඳහා නිල්-කොළ සහ කැනරි වැනි අතිරේක යෙදවීමේ උපාය මාර්ග සඳහා ඉඩ ලබා දේ. සම්පත් Rollout ක්‍රියාකාරීත්වය සමාන සපයයි Deployment, අතිරේක යෙදවීමේ උපාය මාර්ග සමඟ පමණි.
සම්පත් Deployments යෙදවීම සඳහා උපාය මාර්ග දෙකක් ඇත: RollingUpdate и Recreate. මෙම උපාය මාර්ග බොහෝ අවස්ථාවන් සඳහා සුදුසු වුවද, ඉතා විශාල පරිමාණයෙන් සේවාදායකයන් වෙත යෙදවීම සඳහා, විහිදුම් පාලකයෙහි නොමැති නිල්-කොළ හෝ කැනරි වැනි අතිරේක උපාය මාර්ග භාවිතා කරනු ලැබේ. Kubernetes හි මෙම උපක්‍රම භාවිතා කිරීමට, පරිශීලකයින්ට ඔවුන්ගේ යෙදවීම් මත ස්ක්‍රිප්ට් ලිවීමට සිදු විය. Argo Rollouts Controller මෙම උපාය මාර්ග සරල, ප්‍රකාශන, වින්‍යාසගත කළ හැකි පරාමිති ලෙස හෙලිදරව් කරයි.
https://argoproj.github.io/argo-rollouts

Rollouts සමඟ භාවිතා කිරීම සඳහා පහසු වෙබ් අතුරු මුහුණතක් සපයන Argo CI ද ඇත, අපි එය ඊළඟ ලිපියෙන් බලමු.

Argo Rollouts ස්ථාපනය කිරීම

සේවාදායක පැත්ත

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

අපගේ යටිතල පහසුකම් turnip හි (පහත බලන්න) අපි දැනටමත් 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

මෙය JSON ලෙස ප්‍රතිචාරයක් ලබා දෙන ඉතා සරල Python+Flask API එකකි. අපි GitlabCI භාවිතයෙන් පැකේජය ගොඩනඟා ප්‍රතිඵලය Gitlab Registry වෙත තල්ලු කරන්නෙමු. රෙජිස්ට්රි තුළ අපට විවිධ නිකුතු අනුවාද දෙකක් තිබේ:

  • 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 Deployment ලෙසම ක්‍රියා කරයි. අපි යාවත්කාලීන උපාය මාර්ගයක් සකසා නොමැති නම් (මෙහි කැනරි වැනි) එය පෙරනිමි rolling-update Deployment ලෙස ක්‍රියා කරයි.

අපි කැනරි යෙදවීම සඳහා yaml වලින් පියවර දෙකක් නිර්වචනය කරමු:

  1. කැනරි වෙත ගමනාගමනයෙන් 10% (අත්පොත හරි සඳහා රැඳී සිටින්න)
  2. කැනරි වෙත 50% තදබදයක් (විනාඩි 2 ක් රැඳී සිට 100% දක්වා ඉදිරියට යන්න)

මූලික යෙදවීම සිදු කිරීම

මූලික යෙදවීමෙන් පසුව, අපගේ සම්පත් මේ ආකාරයෙන් පෙනෙනු ඇත:

Kubernetes #2 හි කැනරි යෙදවීම: Argo Rollouts

තවද අපට ප්‍රතිචාරයක් ලැබෙන්නේ යෙදුමේ පළමු අනුවාදයෙන් පමණි:

Kubernetes #2 හි කැනරි යෙදවීම: Argo Rollouts

කැනරි යෙදවීම සිදු කිරීම

පියවර 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 යොදවන අතර අපි වෙනස්කම් දකිමු:

Kubernetes #2 හි කැනරි යෙදවීම: Argo Rollouts

දැන් අපි සේවාවට පිවිසෙන්නේ නම්:

Kubernetes #2 හි කැනරි යෙදවීම: Argo Rollouts

මහා! අපි අපේ කැනරි යෙදවීම මැද. ධාවනය කිරීමෙන් අපට ප්‍රගතිය දැකිය හැකිය:

kubectl argo rollouts get rollout rollout-canary

Kubernetes #2 හි කැනරි යෙදවීම: Argo Rollouts

පියවර 2: 50% තදබදය:

දැන් අපි ඊළඟ පියවරට යමු: ගමනාගමනයෙන් 50% යළි හරවා යැවීම. අපි මෙම පියවර අතින් ක්‍රියාත්මක කිරීමට වින්‍යාස කළෙමු:

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

Kubernetes #2 හි කැනරි යෙදවීම: Argo Rollouts

අපගේ යෙදුම නව අනුවාද වලින් ප්‍රතිචාර වලින් 50% ක් ලබා දුන්නේය:

Kubernetes #2 හි කැනරි යෙදවීම: Argo Rollouts

සහ විකාශනය සමාලෝචනය:

Kubernetes #2 හි කැනරි යෙදවීම: Argo Rollouts

ප්‍රෙක්‍රාස්නෝ.

පියවර 3: 100% තදබදය:

මිනිත්තු 2 කට පසු 50% පියවර ස්වයංක්‍රීයව අවසන් වන අතර 100% පියවර ආරම්භ වන පරිදි අපි එය සකස් කරමු:

Kubernetes #2 හි කැනරි යෙදවීම: Argo Rollouts

සහ යෙදුම් ප්‍රතිදානය:

Kubernetes #2 හි කැනරි යෙදවීම: Argo Rollouts

සහ විකාශනය සමාලෝචනය:

Kubernetes #2 හි කැනරි යෙදවීම: Argo Rollouts

කැනරි යෙදවීම සම්පූර්ණයි.

Argo Rollouts සමඟ තවත් උදාහරණ

කැනරි මත පදනම්ව පරිසර පෙරදසුන් සහ සැසඳීම් පිහිටුවන ආකාරය වැනි තවත් උදාහරණ මෙහි ඇත:

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

Argo Rollouts සහ Argo CI පිළිබඳ වීඩියෝව

මම ඇත්තටම මෙම වීඩියෝව නිර්දේශ කරමි, එය Argo Rollouts සහ Argo CI එකට වැඩ කරන ආකාරය පෙන්වයි:

ප්රතිඵලය

අතිරේක ආකාරයේ යෙදවුම් හෝ අනුරූ නිර්මාණය කිරීම, ගමනාගමනය යළි-යොමු කිරීම් යනාදිය කළමනාකරණය කරන CRDs භාවිතා කිරීමේ අදහසට මම ඇත්තෙන්ම කැමතියි. ඔවුන් සමඟ වැඩ කිරීම සුමටව සිදු වේ. ඊළඟට මම Argo CI සමඟ ඒකාබද්ධ කිරීම පරීක්ෂා කිරීමට කැමතියි.

කෙසේ වෙතත්, Argo CI සහ Flux CI විශාල ඒකාබද්ධ කිරීමක් ඇති බව පෙනේ, එබැවින් නව නිකුතුව නිකුත් වන තෙක් මම බලා සිටිය හැකිය: ආර්ගෝ ෆ්ලක්ස්.

ඔබට Argo Rollouts හෝ Argo CI සමඟ අත්දැකීම් තිබේද?

අපගේ බ්ලොග් අඩවියේ වෙනත් ලිපිද කියවන්න:

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න