Canary deployment yeni kodu istifadəçilərin bir hissəsində sınaqdan keçirmək üçün çox təsirli bir üsuldur. O, yerləşdirmə zamanı problem yarada biləcək trafik yükünü əhəmiyyətli dərəcədə azaldır, çünki bu, yalnız müəyyən bir alt qrup daxilində baş verir. Bu qeyd Kubernetes və yerləşdirmə avtomatlaşdırmasından istifadə edərək belə bir yerləşdirmənin necə təşkil edilməsinə həsr olunub. Güman edirik ki, Helm və Kubernetes resursları haqqında nəsə bilirsiniz.
Kubernetes-ə sadə kanareyka yerləşdirilməsi iki əsas resurs ehtiva edir: xidmətin özü və yerləşdirmə aləti. Canary yerləşdirilməsi yeniləmə trafikinə xidmət edən iki müxtəlif resursla qarşılıqlı əlaqədə olan tək bir xidmət vasitəsilə işləyir. Bu resurslardan biri “kanareyka” versiyası ilə, ikincisi isə stabil versiya ilə işləyəcək. Bu vəziyyətdə, xidmət üçün tələb olunan trafik miqdarını azaltmaq üçün kanareyka versiyalarının sayını tənzimləyə bilərik. Məsələn, Yaml istifadə etməyi üstün tutursunuzsa, o zaman Kubernetes-də belə görünəcək:
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 seçimi kubectl-dən istifadə edərək təsəvvür etmək daha asandır
Kanareyka yerləşdirilməsinin avtomatlaşdırılması
İlk növbədə, yuxarıda müzakirə etdiyimiz resursları özündə birləşdirən Helm chart xəritəsi lazımdır. Bu kimi bir şey görünməlidir:
~/charts/app
├── Chart.yaml
├── README.md
├── templates
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ └── service.yaml
└── values.yaml
Helm konsepsiyasının əsasını çox versiyalı buraxılışların idarə edilməsi təşkil edir. Stabil versiya layihə kodunun əsas stabil qolumuzdur. Lakin Helm ilə biz eksperimental kodumuzla kanareyka buraxılışını yerləşdirə bilərik. Əsas odur ki, stabil versiya ilə kanareyka buraxılışı arasında trafik mübadiləsini təmin edin. Bütün bunları xüsusi bir seçicidən istifadə edərək idarə edəcəyik:
selector:
app.kubernetes.io/name: myapp
Bizim “kanareyka” və sabit yerləşdirmə resurslarımız modullarda bu etiketi göstərəcək. Hər şey düzgün konfiqurasiya edilibsə, o zaman Helm diaqram xəritəmizin kanareyka versiyasının yerləşdirilməsi zamanı biz trafikin yeni yerləşdirilmiş modullara yönəldiləcəyini görəcəyik. Bu əmrin stabil versiyası belə görünəcək:
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
İndi kanareyka buraxılışımızı yoxlayaq. Kanareyka versiyasını yerləşdirmək üçün iki şeyi yadda saxlamalıyıq. Buraxılış adı fərqli olmalıdır ki, biz cari stabil versiyaya yeniləməni yaymayaq. Versiya və etiket də fərqli olmalıdır ki, biz başqa kodu yerləşdirə bilək və resurs teqləri ilə fərqləri müəyyən edək.
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
Hamısı budur! Xidmətə ping atsanız, kanareyka yeniləməsinin trafiki yalnız vaxtın bir hissəsini yönləndirdiyini görə bilərsiniz.
Təsvir edilən məntiqi ehtiva edən yerləşdirmə avtomatlaşdırma vasitələrini axtarırsınızsa, diqqət yetirin
Mənbə: www.habr.com