
Ein Canary-Deploy ist eine Ă€uĂerst effektive Methode, um neuen Code bei einer bestimmten Benutzergruppe zu testen. Es reduziert erheblich die Verkehrslast, mit der Probleme wĂ€hrend des Deployments auftreten können, da es nur innerhalb einer definierten Untergruppe erfolgt. Diese Notiz widmet sich der Organisation eines solchen Deployments mithilfe von Kubernetes und Deployment-Automatisierung. Es wird vorausgesetzt, dass Sie etwas ĂŒber Helm und Kubernetes-Ressourcen wissen..

Ein einfaches Canary-Deployment in Kubernetes umfasst zwei zentrale Ressourcen: den Service selbst und das Deployment-Tool. Das Canary-Deployment funktioniert ĂŒber einen Dienst, der mit zwei verschiedenen Ressourcen interagiert, die den Aktualisierungstraffic bedienen. Eine dieser Ressourcen wird mit der "Canary"-Version arbeiten, die andere mit der stabilen Version. In dieser Situation können wir die Anzahl der Canary-Versionen regulieren, um das benötigte Verkehrsvolumen zu minimieren. Wenn Sie beispielsweise Yaml verwenden möchten, wird das in Kubernetes folgendermaĂen aussehen:
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 # Der Selector leitet den Verkehr an beide Deployments weiter.Ein solches Beispiel lĂ€sst sich sogar einfach ĂŒber kubectl darstellen, wĂ€hrend es sogar ein vollstĂ€ndiges Tutorial zu diesem Szenario gibt. Die zentrale Frage dieses Beitrags ist, wie wir diesen Prozess mit Helm automatisieren wollen.
Automatisierung des Canary-Deployments
ZunÀchst benötigen wir eine Helm-Chart-Datei, in der die oben besprochenen Ressourcen bereits aufgenommen sind. Sie sollte ungefÀhr so aussehen:
~/charts/app
âââ Chart.yaml
âââ README.md
âââ templates
â âââ NOTES.txt
â âââ _helpers.tpl
â âââ deployment.yaml
â âââ service.yaml
âââ values.yamlDas Grundkonzept von Helm ist die Verwaltung mehrerer Versionen von Releases. Die stabile Version ist unser Hauptzweig des stabilen Codes fĂŒr das Projekt. Aber mit Helm können wir ein Canary-Release mit unserem experimentellen Code bereitstellen. Das Wichtigste ist, den Traffic zwischen der stabilen Version und dem Canary-Release zu steuern. Wir werden dies mit einem speziellen Selector verwalten:
selector:
app.kubernetes.io/name: myappUnsere Deployment-Ressourcen, sowohl Canary- als auch Stable-Versionen, werden dieses Label in den Modulen anzeigen. Wenn alles korrekt konfiguriert ist, werden wir wĂ€hrend des Deployments der Canary-Version unserer Helm-Charts sehen, dass der Verkehr auf die neu bereitgestellten Module geleitet wird. Die Stable-Version dieses Kommandos sieht folgendermaĂen aus:
helm upgrade
--install myapp
--namespace default
--set app.name=myapp # Geht in app.kubernetes.io/name
--set app.version=v1 # Geht in app.kubernetes.io/version
--set image.tag=stable
--set replicaCount=5Jetzt lassen Sie uns unseren Canary-Release ĂŒberprĂŒfen. Um die Canary-Version bereitzustellen, mĂŒssen wir uns an zwei Dinge erinnern. Der Name des Releases muss unterschiedlich sein, damit wir kein Update auf die aktuelle Stable-Version anwenden. Die Version und das Tag mĂŒssen ebenfalls unterschiedlich sein, damit wir einen anderen Code bereitstellen und die Unterschiede anhand der Ressourcen-Labels feststellen können.
helm upgrade
--install myapp-canary
--namespace default
--set app.name=myapp # Geht in app.kubernetes.io/name
--set app.version=v2 # Geht in app.kubernetes.io/version
--set image.tag=canary
--set replicaCount=1Das ist es auch schon! Wenn man den Dienst anpingt, kann man sehen, dass das Canary-Update den Verkehr nur zeitweise umleitet.
Wenn Sie nach Automatisierungswerkzeugen fĂŒr Deployments suchen, die die beschriebene Logik beinhalten, sollten Sie sich auf und auf der . Die Helm-Charts, die zur Umsetzung der oben beschriebenen Methode verwendet werden, finden Sie auf GitHub, . Insgesamt war dies ein theoretischer Ăberblick darĂŒber, wie man die Automatisierung von Canary-Deployments in der Praxis umsetzen kann, mit konkreten Konzepten und Beispielen.
Quelle: habr.com
