O metodă simplă și sigură de automatizare a implementărilor canar cu ajutorul Helm

O metodă simplă și sigură de automatizare a implementărilor canar cu ajutorul Helm

Implementarea canariei este o metodă foarte eficientă de testare a unui nou cod pe un subset de utilizatori. Aceasta reduce semnificativ încărcătura de trafic, ceea ce poate provoca probleme în timpul desfășurării, deoarece are loc doar în cadrul unei subgrupuri definite. Această notă este dedicată modului de organizare a unei astfel de desfășurări prin intermediul Kubernetes și a automatizării desfășurării. Se presupune că știți câte ceva despre Helm și resursele Kubernetes..

O metodă simplă și sigură de automatizare a implementărilor canar cu ajutorul Helm

O desfășurare simplă canarie în Kubernetes include două resurse cheie: serviciul în sine și instrumentul de desfășurare. Desfășurarea canarie funcționează printr-un singur serviciu care interacționează cu două resurse diferite, care gestionează traficul de actualizare. Una dintre aceste resurse va funcționa cu versiunea „canarie”, iar a doua — cu versiunea stabilă. În această situație, putem regla cantitatea de versiuni canarie pentru a reduce volumul de trafic ce trebuie gestionat. Dacă, de exemplu, preferați să folosiți Yaml, aceasta ar arăta în Kubernetes astfel:

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 # Selectorul va ruta traficul către ambele desfășurări.

Un alt mod simplu de a vizualiza acest scenariu este prin kubectl, iar în documentația Kubernetes există chiar un tutorial complet pentru acest scenariu. Însă întrebarea principală a acestui post este cum ne propunem să automatizăm acest proces folosind Helm.

Automatizarea desfășurării canariei

În primul rând, avem nevoie de o hartă Helm a charturilor, în care sunt deja incluse resursele discutate mai sus. Aceasta ar trebui să arate cam așa:

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

Baza conceptului Helm este gestionarea versiunilor multiple ale eliberărilor. Versiunea stabilă este ramura principală stabilă a codului proiectului nostru. Dar cu ajutorul Helm, putem desfășura o eliberare canarie cu codul nostru experimental. Principalul aspect este să menținem schimbul de trafic între versiunea stabilă și eliberarea canarie. Vom gestiona totul cu ajutorul unui selector special:

selector:
  app.kubernetes.io\/name: myapp

Resursele noastre, atât cele «canar», cât și cele stable de desfășurare, vor indica această etichetă pe module. Dacă totul este configurat corect, în timpul desfășurării versiunii canar a graficului nostru Helm, vom observa că traficul va fi redirecționat către modulele nou desfășurate. Versiunea stabilă a acestei comenzi va arăta astfel:

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

Acum să verificăm lansarea noastră canar. Pentru a desfășura versiunea canar, trebuie să ținem cont de două lucruri. Numele lansării trebuie să fie diferit, astfel încât să nu aplicăm o actualizare pe versiunea stabilă actuală. Versiunea și eticheta trebuie, de asemenea, să fie diferite, pentru a putea desfășura un cod diferit și a determina diferențele pe baza etichetelor resurselor.

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

Asta e tot! Dacă pingăm serviciul, putem vedea că actualizarea canar redirecționează traficul doar o parte din timp.

Dacă căutați instrumente de automatizare a desfășurării care includ logica descrisă, atunci aruncați o privire asupra Deliverybot și pe instrumentelor de automatizare Helm de pe GitHub. Graficele Helm folosite pentru implementarea metodei descrise mai sus se află pe GitHub, aici. În general, aceasta a fost o revizuire teoretică a modului de implementare a automatizării desfășurării versiunilor canar în practică, cu concepte și exemple specifice.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster