Роҳи оддӣ ва бехатари автоматикунонии ҷойгиркунии канарӣ бо Helm

Роҳи оддӣ ва бехатари автоматикунонии ҷойгиркунии канарӣ бо Helm

Ҷойгиркунии канарӣ як роҳи хеле муассири санҷиши коди нав дар зергурӯҳи корбарон мебошад. Он сарбории трафикро, ки дар ҷараёни ҷойгиркунӣ метавонад мушкил бошад, ба таври назаррас коҳиш медиҳад, зеро он танҳо дар як зергурӯҳи мушаххас рух медиҳад. Ин ёддошт ба чӣ гуна ташкили чунин густариш бо истифода аз Kubernetes ва автоматикунонии густариш бахшида шудааст. Мо гумон мекунем, ки шумо дар бораи захираҳои Helm ва Kubernetes чизе медонед.

Роҳи оддӣ ва бехатари автоматикунонии ҷойгиркунии канарӣ бо Helm

Ҷойгиркунии оддии канарӣ ба Kubernetes ду захираи калидиро дар бар мегирад: худи хидмат ва абзори ҷойгиркунӣ. Ҷойгиркунии Canary тавассути хидмати ягона кор мекунад, ки бо ду манбаи гуногун, ки ба трафики навсозӣ хидмат мерасонанд, ҳамкорӣ мекунад. Яке аз ин захираҳо бо версияи "канарӣ" ва дуюм бо версияи устувор кор хоҳад кард. Дар ин вазъият, мо метавонем шумораи версияҳои канариро танзим кунем, то миқдори трафики барои хидмат заруриро кам кунем. Агар, масалан, шумо истифодаи Yaml-ро афзалтар донед, он гоҳ дар Kubernetes чунин хоҳад буд:

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 боз ҳам осонтар аст ва дар Ҳуҷҷатҳои Kubernetes Ҳатто як дастури пурра оид ба ин сенария вуҷуд дорад. Аммо саволи асосии ин паём ин аст, ки мо бо истифода аз 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

Ҳамааш ҳамин! Агар шумо хидматро пинг кунед, шумо мебинед, ки навсозии канария трафикро танҳо як қисми вақт масир мекунад.

Агар шумо дар ҷустуҷӯи асбобҳои автоматикунонии ҷойгиркунӣ бошед, ки мантиқи тавсифшударо дар бар мегиранд, пас ба он диққат диҳед Deliverybot ва дар бораи он Воситаҳои автоматикунонии Helm дар GitHub. Диаграммаҳои Helm, ки барои татбиқи усули дар боло тавсифшуда истифода мешаванд, дар Github мебошанд, дар ин ҷо. Умуман, ин шарҳи назариявӣ дар бораи чӣ гуна дар амал татбиқ кардани автоматикунонии ҷойгиркунии версияҳои канарӣ бо консепсияҳо ва мисолҳои мушаххас буд.

Манбаъ: will.com

Илова Эзоҳ