
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ë 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ë 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.yamlThelbĂ«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: myappBurimet 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=5Tani 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=1Ja, 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 dhe në . Chart-et Helm, të përdorura për realizimin e metodës së përshkruar më parë, ndodhen në GitHub, . 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
