Helm yordamida kanareykalarni joylashtirishni avtomatlashtirishning oddiy va xavfsiz usuli

Helm yordamida kanareykalarni joylashtirishni avtomatlashtirishning oddiy va xavfsiz usuli

Canary deployment - bu foydalanuvchilarning kichik to'plamida yangi kodni sinab ko'rishning juda samarali usuli. O'rnatish jarayonida muammoli bo'lishi mumkin bo'lgan trafik yukini sezilarli darajada kamaytiradi, chunki u faqat ma'lum bir kichik to'plamda sodir bo'ladi. Ushbu eslatma Kubernetes va joylashtirishni avtomatlashtirishdan foydalangan holda bunday joylashtirishni qanday tashkil etishga bag'ishlangan. Siz Helm va Kubernetes resurslari haqida biror narsa bilasiz deb taxmin qilamiz.

Helm yordamida kanareykalarni joylashtirishni avtomatlashtirishning oddiy va xavfsiz usuli

Kubernetes-ga oddiy kanareykalarni joylashtirish ikkita asosiy manbani o'z ichiga oladi: xizmatning o'zi va tarqatish vositasi. Canary deployment yangilanish trafigiga xizmat qiluvchi ikki xil manbalar bilan o'zaro aloqada bo'lgan yagona xizmat orqali ishlaydi. Ushbu resurslardan biri "kanareyka" versiyasi bilan, ikkinchisi esa barqaror versiya bilan ishlaydi. Bunday vaziyatda biz xizmat ko'rsatish uchun zarur bo'lgan trafik miqdorini kamaytirish uchun kanareyka versiyalari sonini tartibga solishimiz mumkin. Agar siz, masalan, Yaml dan foydalanishni afzal ko'rsangiz, u Kubernetesda shunday ko'rinadi:

kind: Deployment
metadata:
  name: app-canary
  labels:
    app: app
spec:
  replicas: 1
  ...
    image: myapp:canary
---
kind: Deployment
metadata:
  name: app
  labels:
    app: app
spec:
  replicas: 5
  ...
    image: myapp:stable
---
kind: Service
selector:
  app: app # Selector will route traffic to both deployments.

Bu variantni kubectl va in-dan foydalanib tasavvur qilish yanada osonroq Kubernetes hujjatlari Ushbu stsenariy bo'yicha hatto to'liq qo'llanma ham mavjud. Ammo bu postning asosiy savoli - bu jarayonni Helm yordamida qanday avtomatlashtirishimiz.

Kanareykalarni joylashtirishni avtomatlashtirish

Avvalo, biz yuqorida muhokama qilgan resurslarni o'z ichiga olgan Helm diagramma xaritasiga muhtojmiz. Bu shunday ko'rinishi kerak:

~/charts/app
├── Chart.yaml
├── README.md
├── templates
│   ├── NOTES.txt
│   ├── _helpers.tpl
│   ├── deployment.yaml
│   └── service.yaml
└── values.yaml

Helm kontseptsiyasining asosi ko'p versiyali relizlarni boshqarishdir. Barqaror versiya loyiha kodining asosiy barqaror bo'limidir. Ammo Helm yordamida biz eksperimental kodimiz bilan kanareykalarni chiqarishimiz mumkin. Asosiysi, barqaror versiya va kanareyka versiyasi o'rtasida trafik almashinuvini ta'minlash. Bularning barchasini maxsus selektor yordamida boshqaramiz:

selector:
  app.kubernetes.io/name: myapp

Bizning "kanareyka" va barqaror joylashtirish resurslarimiz modullarda ushbu belgini ko'rsatadi. Agar hamma narsa to'g'ri sozlangan bo'lsa, bizning Helm diagramma xaritamizning kanareyka versiyasini o'rnatish paytida biz trafik yangi o'rnatilgan modullarga yo'naltirilishini ko'ramiz. Ushbu buyruqning barqaror versiyasi quyidagicha ko'rinadi:

helm upgrade
  --install myapp 
  --namespace default 
  --set app.name=myapp       # Goes into app.kubernetes.io/name
  --set app.version=v1       # Goes into app.kubernetes.io/version
  --set image.tag=stable 
  --set replicaCount=5

Endi kanareykalar chiqarilishini tekshiramiz. Kanareyka versiyasini joylashtirish uchun biz ikkita narsani eslab qolishimiz kerak. Joriy barqaror versiyaga yangilanish chiqarmasligimiz uchun nashr nomi boshqacha bo'lishi kerak. Versiya va teg ham boshqacha bo'lishi kerak, shunda biz boshqa kodni o'rnatishimiz va manba teglari bo'yicha farqlarni aniqlashimiz mumkin.

helm upgrade
  --install myapp-canary 
  --namespace default 
  --set app.name=myapp       # Goes into app.kubernetes.io/name
  --set app.version=v2       # Goes into app.kubernetes.io/version
  --set image.tag=canary 
  --set replicaCount=1

Ana xolos! Agar siz xizmatga ping yuborsangiz, kanareyka yangilanishi trafikni vaqtning faqat bir qismini yo'naltirishini ko'rishingiz mumkin.

Agar siz tavsiflangan mantiqni o'z ichiga olgan joylashtirishni avtomatlashtirish vositalarini qidirsangiz, e'tibor bering Deliverybot va GitHub-da rulni avtomatlashtirish vositalari. Yuqorida tavsiflangan usulni amalga oshirish uchun ishlatiladigan Helm jadvallari Github-da, Bu erda. Umuman olganda, bu aniq tushunchalar va misollar bilan kanareyka versiyalarini joylashtirishni avtomatlashtirishni amaliyotda qanday amalga oshirish haqida nazariy sharh edi.

Manba: www.habr.com

a Izoh qo'shish