Eine einfache und sichere Methode zur Automatisierung von Canary-Deployments mit Helm

Eine einfache und sichere Methode zur Automatisierung von Canary-Deployments mit Helm

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..

Eine einfache und sichere Methode zur Automatisierung von Canary-Deployments mit Helm

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 in der Dokumentation zu Kubernetes 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.yaml

Das 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: myapp

Unsere 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=5

Jetzt 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=1

Das 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 Deliverybot und auf der Automatisierungstools von Helm auf GitHub. Die Helm-Charts, die zur Umsetzung der oben beschriebenen Methode verwendet werden, finden Sie auf GitHub, hier nachlesen. 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

Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server đŸ”„ Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster