
En kanariedeplyering Àr en mycket effektiv metod för att testa ny kod pÄ en delmÀngd av anvÀndarna. Den minskar betydligt den trafikbelastning som kan orsaka problem under distributionen, eftersom den endast sker inom en specifik undergrupp. Denna anteckning handlar om hur man organiserar en sÄdan deployment med hjÀlp av Kubernetes och automatisering. Det förutsÀtts att du har en viss kunskap om Helm och Kubernetes-resurser..

En enkel kanariedeplyering i Kubernetes omfattar tvÄ nyckelresurser: sjÀlva tjÀnsten och verktyget för distribution. Kanariedeplyeringen fungerar via en tjÀnst som interagerar med tvÄ olika resurser som hanterar trafikuppdateringen. En av dessa resurser kommer att hantera den 'kanariegula' versionen, medan den andra kommer att hantera den stabila versionen. I denna situation kan vi reglera mÀngden kanariegula versioner för att minska mÀngden trafik som behöver hanteras. Om du till exempel föredrar att anvÀnda Yaml, kommer det att se ut i Kubernetes sÄ hÀr:
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 # Selektorn kommer att dirigera trafik till bÄda distributionerna.Det Àr Ànnu enklare att förestÀlla sig ett sÄdant alternativ med kubectl, och i finns faktiskt en fullstÀndig handledning för detta scenario. Men den centrala frÄgan i detta inlÀgg handlar om hur vi planerar att automatisera denna process med hjÀlp av Helm.
Automatisering av kanariedeplyering
Först och frÀmst behöver vi ett Helm-diagram som redan inkluderar de resurser vi diskuterade ovan. Det ska se ut ungefÀr sÄ hÀr:
~\/charts\/app
âââ Chart.yaml
âââ README.md
âââ templates
â âââ NOTES.txt
â âââ _helpers.tpl
â âââ deployment.yaml
â âââ service.yaml
âââ values.yamlGrunden för Helm-konceptet Ă€r hantering av flera versioner av distributioner. Stabil version Ă€r vĂ„r huvudstabila gren av projektets kod. Men med hjĂ€lp av Helm kan vi distribuera en kanariefördelning med vĂ„r experimentella kod. Det viktigaste Ă€r att bevara trafikflödet mellan den stabila versionen och kanariefördelningen. Vi kommer att hantera allt detta med en speciell selektor:
selector:
app.kubernetes.io\/name: myappVÄra bÄde "kanariefÄgel"- och stabila distribueringsresurser kommer att ange denna tagg pÄ modulerna. Om allt konfigureras korrekt, kommer vi under distributionen av vÄr kanarifÄgelversion av Helm-diagrammet att se att trafiken dirigeras till de nyligen distribuerade modulerna. Den stabila versionen av detta kommando kommer att se ut sÄ hÀr:
helm upgrade
--install myapp
--namespace default
--set app.name=myapp # GÄr in i app.kubernetes.io/name
--set app.version=v1 # GÄr in i app.kubernetes.io/version
--set image.tag=stable
--set replicaCount=5Nu ska vi kontrollera vÄr kanarifÄgelrelease. För att distribuera kanarifÄgelversionen mÄste vi tÀnka pÄ tvÄ saker. Namnet pÄ release mÄste skilja sig sÄ att vi inte uppdaterar den nuvarande stabila versionen. Version och tagg mÄste ocksÄ vara olika sÄ att vi kan distribuera annan kod och avgöra skillnaderna genom resursens taggar.
helm upgrade
--install myapp-canary
--namespace default
--set app.name=myapp # GÄr in i app.kubernetes.io/name
--set app.version=v2 # GÄr in i app.kubernetes.io/version
--set image.tag=canary
--set replicaCount=1SÄ, det Àr allt! Om du pingar tjÀnsten kan du se att kanarifÄgeluppdateringen dirigerar trafiken endast en del av tiden.
Om du letar efter automatiseringsverktyg för distribueringsprocessen som inkluderar den beskrivna logiken, ta en titt pÄ och pÄ . Helm-diagrammen som anvÀnds för att implementera den ovan beskrivna metoden finns pÄ Github, . Generellt var detta en teoretisk översikt över hur man implementerar automatisering av kanarifÄgelversioner i praktiken, med specifika koncept och exempel.
KĂ€lla: habr.com
