GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

So führen Sie Canary-Bereitstellungen auf Kubernetes durch

Einführung

Das Testen einer neuen Funktion oder eines Upgrades in der Produktion ist ein stressiger Prozess. Sie möchten häufig Änderungen einführen, ohne die Benutzererfahrung zu beeinträchtigen. Um Ausfallzeiten in dieser Phase zu minimieren, richten Sie Canary-Bereitstellungen ein, um den Übergang zu optimieren.

Sie können Canary-Bereitstellungen auf jeder Infrastruktur verwenden. Dementsprechend ist es eine der Bereitstellungsstrategien in Kubernetes.

Erfahren Sie, was Canary-Bereitstellungen sind, wie sie funktionieren und wie Sie eine Canary-Bereitstellung auf Kubernetes durchführen.

Voraussetzungen

  • Zugriff auf eine Befehlszeile/ein Terminal
  • Docker auf dem System installiert
  • Kubernetes oder Minikube
  • Ein vollständig konfiguriertes kubectl-Befehlszeilentool auf Ihrem lokalen Computer

Was ist eine Canary-Bereitstellung?

Eine Canary-Bereitstellung ist eine aktualisierte Version einer vorhandenen Bereitstellung mit allen erforderlichen Anwendungscodes und Abhängigkeiten. Es wird verwendet, um neue Funktionen und Upgrades zu testen, um zu sehen, wie sie mit der Produktionsumgebung umgehen.

Wenn Sie die Canary-Bereitstellung zu einem Kubernetes-Cluster hinzufügen, wird sie von einem Dienst über Selektoren verwaltet und Etiketten . Der Dienst leitet den Datenverkehr an die Pods mit dem angegebenen Label weiter. Auf diese Weise können Sie Bereitstellungen einfach hinzufügen oder entfernen.

Die Menge an Verkehr, die der Kanarienvogel erhält, entspricht der Anzahl der Pods, die er hochfährt. In den meisten Fällen leiten Sie zunächst einen kleineren Prozentsatz des Datenverkehrs an den Canary weiter und erhöhen die Anzahl im Laufe der Zeit.

Wenn beide Bereitstellungen eingerichtet sind, überwachen Sie das Canary-Verhalten, um festzustellen, ob Probleme auftreten. Sobald Sie mit der Bearbeitung von Anfragen zufrieden sind, können Sie alle Bereitstellungen auf die neueste Version aktualisieren.

Canary-Bereitstellung auf Kubernetes einrichten

Die folgenden Schritte zeigen Ihnen, wie Sie eine Canary-Bereitstellung einrichten. Für diesen Artikel haben wir einen einfachen Kubernetes-Cluster von Nginx-Pods mit einer einfachen statischen HTML-Seite aus zwei Sätzen erstellt. Die Versionen der Bereitstellung unterscheiden sich je nach Inhalt, den sie auf der Webseite anzeigen.

Der Prozess zum Einrichten Ihrer Canary-Bereitstellung unterscheidet sich je nach Anwendung, die Sie ausführen.

Schritt 1:Docker-Image abrufen

Der erste Schritt besteht darin, das Image für die Container in Ihrem Kubernetes-Cluster abzurufen oder zu erstellen. Da wir in diesem Beispiel Nginx-Container erstellen, verwenden wir das auf Docker Hub verfügbare Nginx-Image.

1. Laden Sie das Bild herunter mit:

docker pull nginx

2. Bestätigen Sie, dass Sie es haben, indem Sie alle lokalen Images auflisten:

docker image ls

Schritt 2:Kubernetes-Bereitstellung erstellen

1. Erstellen Sie die Bereitstellungsdefinition mithilfe einer YAML-Datei. Verwenden Sie einen Texteditor Ihrer Wahl und geben Sie einen Namen für die Datei ein. Wir nennen die Datei nginx-deployment.yaml und erstellen Sie es mit Nano :

nano nginx-deployment.yaml

2. Fügen Sie der Datei folgenden Inhalt hinzu:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx
spec:
 selector:
  matchLabels:
   app: nginx
 replicas: 3
 template:
  metadata:
   labels:
    app: nginx
    version: "1.0"
  spec:
   containers:
    - name: nginx
      image: nginx:alpine
      resources:
      limits:
       memory: "128Mi"
       cpu: "50m"
      ports:
      - containerPort: 80
      volumeMounts:
      - mountPath: /usr/share/nginx/html
        name: index.html
      volumes:
      - name: index.html
        hostPath:
          path: /Users/sofija/Documents/nginx/v1

Wir haben 3 Replikate erstellt von Nginx-Pods für den Kubernetes-Cluster. Alle Pods haben die Bezeichnung version: "1.0 ". Zusätzlich haben sie ein Host-Volume, das die index.html enthält am Behälter montiert. Die Beispiel-HTML-Datei bestehend aus:

<html>
<h1>Hello World!</h1>
<p>This is version 1</p>
</html>

3. Speichern und beenden Sie die Datei.

4. Erstellen Sie die Bereitstellung, indem Sie Folgendes ausführen:

k apply -f nginx-deployment.yaml

5. Überprüfen Sie, ob Sie die Pods erfolgreich bereitgestellt haben mit:

k get pods -o wide

Die Ausgabe sollte drei laufende Nginx-Pods anzeigen .

Schritt 3:Dienst erstellen

Der nächste Schritt besteht darin, eine Dienstdefinition zu erstellen für den Kubernetes-Cluster. Der Dienst leitet Anfragen an die angegebenen Pods weiter.

1. Erstellen Sie eine neue yaml Datei mit:

nano nginx-deployment.service.yaml

2. Fügen Sie dann den folgenden Inhalt hinzu:

apiVersion: v1
kind: Service
metadata:
 name: nginx-service
spec:
 type: LoadBalancer
selector:
 app: nginx
 version: "1.0"
ports:
- port: 8888
  targetPort: 80

Die yaml-Datei gibt den Diensttyp an – LoadBalancer . Es weist den Dienst an, Workloads zwischen Pods mit den Bezeichnungen app: nginx auszugleichen und version: "1.0" . Der Pod muss beide Labels haben, um Teil des Dienstes zu sein.

3. Speichern und beenden Sie die Servicedatei.

4. Erstellen Sie nun den Dienst:

kubectl apply -f nginx-deployment.service.yaml

Schritt 4:Erste Version des Clusters prüfen

Um zu überprüfen, ob der Dienst ausgeführt wird, öffnen Sie einen Webbrowser und navigieren Sie zu der in der Dienstdatei definierten IP- und Portnummer.

Um die externe IP-Adresse anzuzeigen des Dienstes verwenden Sie den Befehl:

kubectl get service

Wenn Sie Kubernetes lokal ausführen , verwenden Sie localhost als IP.

Da der von uns erstellte Beispielcluster lokal auf Port 8888 ausgeführt wird, lautet die URL:

http://localhost:8888

Der Browser sollte ein Hello World anzeigen Nachricht von Version 1 .

Schritt 5:Canary-Bereitstellung erstellen

Mit Version 1 der vorhandenen Anwendung stellen Sie Version 2 bereit , die Canary-Bereitstellung.

1. Beginnen Sie mit der Erstellung der yaml Datei für die Canary-Bereitstellung. Führen Sie den Befehl aus:

nano nginx-canary-deployment.yaml

2. Fügen Sie der Datei folgenden Inhalt hinzu:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-canary-deployment
spec:
 selector:
  matchLabels:
   app: nginx
 replicas: 3
 template:
  metadata:
   labels:
    app: nginx
    version: "2.0"
  spec:
   containers:
    - name: nginx
      image: nginx:alpine
      resources:
      limits:
       memory: "128Mi"
       cpu: "50m"
      ports:
      - containerPort: 80
      volumeMounts:
      - mountPath: /usr/share/nginx/html
        name: index.html
      volumes:
      - name: index.html
        hostPath:
          path: /Users/sofija/Documents/nginx/v2

Der Inhalt der Canary-Bereitstellungsdatei unterscheidet sich durch drei wichtige Parameter:

  • Der Name in den Metadaten lautet nginx-canary-deployment .
  • Sie trägt die Bezeichnung version: “2.0” .
  • Es ist mit einer HTML-Datei index.html verknüpft bestehend aus:
<html>
<h1>Hello World!</h1>
<p>This is version 2</p>
</html>

3. Speichern und beenden Sie die Datei.

4. Erstellen Sie die Canary-Bereitstellung mit dem folgenden Befehl:

k apply -f nginx-canary-deployment.yaml

5. Vergewissern Sie sich, dass Sie die drei zusätzlichen Pods erfolgreich bereitgestellt haben:

k get pods -o wide

Die Ausgabe sollte die Nginx Canary Deployment Pods anzeigen , zusammen mit den ursprünglichen Nginx-Pods .

Schritt 6:Canary-Bereitstellung ausführen

Öffnen Sie einen Webbrowser und navigieren Sie zu derselben IP-Adresse wie in Schritt 4. Sie werden feststellen, dass es keine Änderungen an der Webseite gibt. Dies liegt daran, dass die Dienstdatei so konfiguriert ist, dass sie nur Pods mit der Bezeichnung version: "1.0" ausbalanciert .

Um die aktualisierten Pods zu testen, müssen Sie die Dienstdatei ändern und leiten Sie einen Teil des Datenverkehrs an version: "2.0" weiter .

1. Öffnen Sie dazu die yaml Datei mit:

nano nginx-deployment.service.yaml

2. Suchen und entfernen Sie die Zeile version: “1.0” . Die Datei sollte Folgendes enthalten:

apiVersion: v1
kind: Service
metadata:
 name: nginx-service
spec:
 type: LoadBalancer
selector:
 app: nginx
ports:
- port: 8888
  targetPort: 80

3. Speichern Sie die Änderungen und beenden Sie die Datei.

4. Erstellen Sie den aktualisierten Dienst mit dem Befehl:

k apply -f nginx-deployment.service.yml

5. Der Datenverkehr wird jetzt zwischen Pods der Version 1 und Version 2 aufgeteilt. Wenn Sie die Webseite einige Male aktualisieren, sehen Sie unterschiedliche Ergebnisse, je nachdem, wohin der Dienst Ihre Anfrage umleitet.

Schritt 7:Beobachten Sie das Canary-Verhalten

Überwachen Sie das Verhalten der neuen Bereitstellung, während beide Bereitstellungen ausgeführt werden. Abhängig von den Ergebnissen können Sie die Bereitstellung rückgängig machen oder auf die neuere Version aktualisieren.

Canary-Bereitstellung zurücksetzen

Wenn Sie feststellen, dass Canary nicht wie erwartet funktioniert, können Sie die Bereitstellung rückgängig machen und die aktualisierten Pods löschen mit:

kubectl delete deployment.apps/nginx-canary-deployment

Der Dienst fährt mit dem Lastenausgleich des Datenverkehrs zu den anfänglichen Pods (Version 1) fort.

Verbesserte Bereitstellung einführen

Wenn Sie zu dem Schluss kommen, dass die Canary-Bereitstellung wie erwartet funktioniert, können Sie den gesamten eingehenden Datenverkehr an die aktualisierte Version weiterleiten. Dafür gibt es drei Möglichkeiten:

1. Aktualisieren Sie die erste Version, indem Sie das Docker-Image ändern und eine neue Bereitstellung erstellen. Entfernen Sie dann die Kanarienvögel mit:

kubectl delete deployment.apps/nginx-canary-deployment

2. Sie können die aktualisierten Pods behalten und diejenigen mit der Version 1 entfernen Bezeichnung:

kubectl delete deployment.apps/nginx

3. Alternativ können Sie auch die service.yaml ändern Datei und fügen Sie die Version hinzu Bezeichner zum selector Etikette. Dadurch wird der Load Balancer angewiesen, den Datenverkehr nur an Version 2 weiterzuleiten Hülsen.


Ubuntu
  1. So richten Sie einen Kubernetes-Cluster mit Rancher ein

  2. So stellen Sie Elasticsearch auf Kubernetes bereit

  3. So stellen Sie eine WordPress-Instanz auf Kubernetes bereit

  4. So löschen Sie eine Kubernetes-Bereitstellung [Schnelle K8s-Tipps]

  5. So löschen Sie einen Dienst in Kubernetes

So stellen Sie RabbitMQ auf Kubernetes bereit

So erstellen Sie eine Bereitstellung in Kubernetes

So installieren Sie Kubernetes unter Ubuntu 20.04

So installieren Sie Kubernetes Minikube unter Ubuntu 20.04

So installieren Sie Kubernetes auf Ubuntu 18.04 LTS

So installieren Sie Kubernetes auf Ubuntu 20.04 LTS