Canary deployment нь хэрэглэгчдэд шинэ кодыг турших маш үр дүнтэй арга юм. Энэ нь зөвхөн тодорхой дэд бүлэгт тохиолддог тул байршуулах явцад асуудал үүсгэж болох замын ачааллыг эрс багасгадаг. Энэхүү тэмдэглэл нь Kubernetes болон байршуулалтын автоматжуулалтыг ашиглан ийм байршуулалтыг хэрхэн зохион байгуулахад зориулагдсан болно. Таныг Helm болон Kubernetes нөөцийн талаар ямар нэг зүйл мэддэг гэж бид таамаглаж байна.
Kubernetes-д энгийн канарын байршуулалт нь үйлчилгээ өөрөө болон байршуулах хэрэгсэл гэсэн хоёр үндсэн нөөцийг агуулдаг. Canary deployment нь шинэчлэлтийн урсгалд үйлчлэх хоёр өөр эх сурвалжтай харилцан үйлчилдэг нэг үйлчилгээгээр дамжуулан ажилладаг. Эдгээр нөөцийн нэг нь "канар" хувилбартай, хоёр дахь нь тогтвортой хувилбартай ажиллах болно. Ийм нөхцөлд үйлчлэхэд шаардагдах хөдөлгөөний хэмжээг багасгахын тулд бид канарын хувилбаруудын тоог зохицуулж болно. Жишээлбэл, та Yaml ашиглахыг илүүд үзэж байгаа бол Кубернетес дээр иймэрхүү харагдах болно.
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.
kubectl болон in ашиглан энэ сонголтыг төсөөлөхөд бүр ч хялбар байдаг
Канарыг байрлуулах автоматжуулалт
Юуны өмнө бидэнд дээр дурдсан нөөцүүдийг багтаасан Helm диаграмын газрын зураг хэрэгтэй байна. Энэ нь иймэрхүү харагдах ёстой:
~/charts/app
├── Chart.yaml
├── README.md
├── templates
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ └── service.yaml
└── values.yaml
Helm концепцийн үндэс нь олон хувилбарт хувилбаруудыг удирдах явдал юм. Тогтвортой хувилбар нь төслийн кодын бидний үндсэн тогтвортой салбар юм. Гэхдээ Helm-ийн тусламжтайгаар бид туршилтын кодоороо канарын хувилбарыг байрлуулж болно. Хамгийн гол нь тогтвортой хувилбар ба канарын хувилбарын хоорондох хөдөлгөөний солилцоог хадгалах явдал юм. Бид энэ бүгдийг тусгай сонгогч ашиглан удирдах болно.
selector:
app.kubernetes.io/name: myapp
Манай "канар" болон тогтвортой байршуулах нөөц нь модулиуд дээрх шошгыг зааж өгөх болно. Хэрэв бүх зүйл зөв тохируулагдсан бол манай Helm диаграмын газрын зургийн канар хувилбарыг байрлуулах явцад бид траффик шинээр байрлуулсан модулиуд руу чиглүүлэх болно. Энэ тушаалын тогтвортой хувилбар нь дараах байдлаар харагдах болно.
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
Одоо канарын хувилбараа шалгацгаая. Канарын хувилбарыг ашиглахын тулд бид хоёр зүйлийг санах хэрэгтэй. Бид одоогийн тогтвортой хувилбар руу шинэчлэлт гаргахгүйн тулд хувилбарын нэр өөр байх ёстой. Хувилбар болон шошго нь бас өөр байх ёстой бөгөөд ингэснээр бид бусад кодыг байрлуулж, нөөцийн шошгуудаар ялгааг тодорхойлох боломжтой болно.
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
Тэгээд л болоо! Хэрэв та үйлчилгээнд пинг хийвэл, canary update нь замын хөдөлгөөнийг зөвхөн хэсэг хугацаанд чиглүүлдэг болохыг харж болно.
Хэрэв та тайлбарласан логикийг агуулсан байршуулах автоматжуулалтын хэрэгслийг хайж байгаа бол анхаарлаа хандуулаарай
Эх сурвалж: www.habr.com