Një mënyrë e thjeshtë dhe e sigurt për të automatizuar canary deploys me Helm

Një mënyrë e thjeshtë dhe e sigurt për të automatizuar canary deploys me Helm

Kanarinë e deploy është një mënyrë shumë e efektshme për të testuar kodin e ri mbi një nëngrup të caktuar përdoruesish. Ajo zvogëlon ndjeshëm ngarkesën e trafikut, me të cilën mund të lindin probleme gjatë dislokimit, pasi ndodh vetëm brenda një nëngrupi të caktuar. Ky artikull është dedikuar asaj si të organizoni një deploy të tillë duke përdorur Kubernetes dhe automatizimin e deploy. Presupozohet që ju dini disa gjëra rreth Helm dhe burimeve të Kubernetes..

Një mënyrë e thjeshtë dhe e sigurt për të automatizuar canary deploys me Helm

Një deploy i thjeshtë kanarine në Kubernetes përfshin dy burime kryesore: shërbimin e vet dhe mjetin e dislokimit. Deploy kanarine funksionon përmes një shërbimi, i cili ndërvepron me dy burime të ndryshme që shërbejnë për trafik të përditësimit. Një nga këto burime do të punojë me versionin "kanarine", ndërsa tjetri me versionin e stabilizuar. Në këtë situatë, ne mund të rregullojmë numrin e versioneve kanarine për të zvogëluar volumin e trafikut që duhet të përballohet. Nëse, për shembull, preferoni të përdorni Yaml, do të duket në Kubernetes ashtu si më poshtë:

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 do të drejtojë trafikun tek të dyja dislokimet.

Edhe më e thjeshtë për të paraqitur një variant të tillë është në kubectl, dhe në dokumentacionin e Kubernetes ka një tutorial të plotë mbi këtë skenar. Por pyetja kryesore e këtij postimi është, si do të automatizojmë këtë proces duke përdorur Helm.

Automatizimi i deploy kanarine

Së pari, do na nevojitet një hartë chartesh Helm, në të cilën tashmë janë përfshirë burimet që përmendëm më lart. Ajo duhet të duket pak a shumë kështu:

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

Thelbësore e konceptit Helm është menaxhimi i versioneve të shumta të lëshimeve. Versioni stabil është vula jonë kryesore e qëndrueshme e kodit të projektit. Por me ndihmën e Helm ne mund të dislokojmë një lëshim kanarine me kodin tonë eksperimental. E rëndësishme është të ruajmë shkëmbimin e trafikut midis versionit stabil dhe lëshimit kanarine. Të gjithë këtë do ta menaxhojmë përmes një selektori të veçantë:

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

Burimet tona, si ato "canary" ashtu edhe ato të stabilizuara për deploy do të tregojnë etiketën në module. Nëse gjithçka është konfiguruar siç duhet, gjatë deploy-it të versionit canary të hartës sonë Helm do të shohim që trafiku do të drejtohet në modulet e sapo-disponueshme. Versioni stabil i kësaj komande do të duket kështu:

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

Tani le të kontrollojmë release-in tonë canary. Për të deploy-uar versionin canary, duhet të mbajmë mend dy gjëra. Emri i release-it duhet të jetë i ndryshëm, në mënyrë që të mos përhapim përditësimin në versionin stabil aktual. Versioni dhe etiketa gjithashtu duhet të jenë të ndryshme, në mënyrë që të mund të shpërndajmë kod të ndryshëm dhe të përcaktojmë dallimet sipas etiketave të burimeve.

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

Ja, në thelb, është gjithçka! Nëse pingoni shërbimin, mund të shihni se përditësimi canary drejton trafikun vetëm për një pjesë të kohës.

Nëse po kërkoni mjete për automatizimin e deploy-eve që përfshijnë logjikën e përshkruar, shikoni Deliverybot dhe në mjetet e automatizimit Helm në GitHub. Chart-et Helm, të përdorura për realizimin e metodës së përshkruar më parë, ndodhen në GitHub, këtu. Në përgjithësi, ky ishte një shqyrtim teorik se si të realizohet automatizimi i deploy-eve canary në praktikë, me koncepte dhe shembuj konkretë.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster