Kubernetes №2 дахь Канарын байршуулалт: Argo Rollouts

Бид Kubernetes-д Canary байршуулалтыг ажиллуулахын тулд k8s-ийн төрөлх Argo Rollouts байршуулалтын хянагч болон GitlabCI-г ашиглана.

Kubernetes №2 дахь Канарын байршуулалт: Argo Rollouts

https://unsplash.com/photos/V41PulGL1z0

Энэ цувралын нийтлэлүүд

Канарын байршуулалт

Таныг уншина гэж найдаж байна эхний хэсэг, Энд бид Canary Deployment гэж юу болохыг товч тайлбарлав. Бид мөн 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

Манай дэд бүтцийн манжинд (доороос харна уу) бид install.yaml-г i/k8s/argo-rollouts/install.yaml болгон нэмсэн. Ингэснээр GitlabCI үүнийг кластерт суулгах болно.

Үйлчлүүлэгч тал (kubectl залгаас)

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

Хэрэглээний жишээ

Хэрэглээний код болон дэд бүтцэд зориулсан тусдаа хадгалах газартай байх нь сайн туршлага юм.

Програмын хадгалах газар

Kim Wuestkamp/k8s-deployment-example-apple

Энэ бол хариултыг JSON хэлбэрээр буцаадаг маш энгийн Python+Flask API юм. Бид GitlabCI ашиглан багцыг бүтээж, үр дүнг Gitlab Бүртгэл рүү түлхэх болно. Бүртгэлд бид хоёр өөр хувилбартай байна:

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

Тэдний хоорондох цорын ганц ялгаа нь буцаасан JSON файл юм. Бид аль хувилбартай харилцаж байгаагаа дүрслэн харуулахын тулд энэ програмыг ашигладаг.

Дэд бүтцийн агуулах

Энэ агуулахад бид GitlabCI-г Kubernetes-д байршуулахад ашиглах болно, .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-тай адил ажилладаг. Хэрэв бид шинэчлэх стратеги (энд канар шиг) тохируулахгүй бол энэ нь анхдагч шинэчлэлтийн Deployment шиг ажиллах болно.

Канарыг байрлуулахын тулд бид ямл дахь хоёр алхамыг тодорхойлдог.

  1. Канар руу чиглэсэн хөдөлгөөний 10% (гараар OK болтол хүлээнэ үү)
  2. Канар руу 50% замын хөдөлгөөн (2 минут хүлээгээд 100% хүртэл үргэлжлүүлээрэй)

Эхний байршуулалтыг хийж байна

Анхны суулгацын дараа манай нөөц дараах байдлаар харагдах болно.

Kubernetes №2 дахь Канарын байршуулалт: Argo Rollouts

Бид зөвхөн програмын эхний хувилбараас л хариу авдаг.

Kubernetes №2 дахь Канарын байршуулалт: Argo Rollouts

Canary Deployment хийж байна

Алхам 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 хэрхэн хамтран ажилладагийг харуулж байна:

Үр дүн

Нэмэлт төрлийн байршуулалт эсвэл хуулбар үүсгэх, урсгалыг дахин чиглүүлэх гэх мэтийг удирддаг CRD ашиглах санаа надад үнэхээр таалагдаж байна. Тэдэнтэй ажиллах нь саадгүй явагддаг. Дараа нь би Argo CI-тэй нэгтгэхийг туршиж үзэхийг хүсч байна.

Гэсэн хэдий ч Argo CI болон Flux CI-ийн томоохон нэгдэл гарч байгаа тул шинэ хувилбар гарах хүртэл хүлээж магадгүй юм. Арго Флюс.

Та Argo Rollouts эсвэл Argo CI-тэй холбоотой туршлага байсан уу?

Мөн манай блог дээрх бусад нийтлэлүүдийг уншина уу:

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх