Helm көмегімен канарларды орналастыруды автоматтандырудың қарапайым және қауіпсіз жолы

Helm көмегімен канарларды орналастыруды автоматтандырудың қарапайым және қауіпсіз жолы

Canary орналастыру - пайдаланушылардың ішкі жиынында жаңа кодты тексерудің өте тиімді жолы. Ол орналастыру процесі кезінде қиындық тудыруы мүмкін трафик жүктемесін айтарлықтай азайтады, себебі ол тек белгілі бір жиын ішінде орын алады. Бұл жазба 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 және in көмегімен елестету оңайырақ Kubernetes құжаттамасы Бұл сценарий бойынша тіпті толық оқу құралы бар. Бірақ бұл жазбаның басты сұрағы - бұл процесті Helm көмегімен қалай автоматтандыруға болатындығымыз.

Канарларды орналастыруды автоматтандыру

Ең алдымен, бізге жоғарыда талқылаған ресурстарды қамтитын 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 мен GitHub жүйесіндегі рульді автоматтандыру құралдары. Жоғарыда сипатталған әдісті жүзеге асыру үшін пайдаланылатын Helm диаграммалары Github сайтында, мұнда. Тұтастай алғанда, бұл нақты тұжырымдамалар мен мысалдармен канарлық нұсқаларды орналастыруды автоматтандыруды тәжірибеде қалай жүзеге асыруға болатыны туралы теориялық шолу болды.

Ақпарат көзі: www.habr.com

пікір қалдыру