So stellen Sie Anwendungen in Kubernetes bereit

Kubernetes ist eine der beliebtesten Automatisierungsplattformen für die Bereitstellung, Skalierung und den Betrieb von Anwendungscontainern auf einem Cluster von Hosts oder Knoten.

Dieser Artikel behandelt eines der zentralen Objekte in Kubernetes: die Bereitstellung. Das Ziel besteht darin, sein Verhalten zu verstehen und zu erfahren, wie es erstellt, aktualisiert und gelöscht wird.

Was ist eine Bereitstellung?

Eine Bereitstellung ist eines der Objekte, die zum Starten von Pods verwendet werden. Kubernetes Best Practices fördern die Verwendung von Bereitstellungen für zustandslose Anwendungen. Ohne eine Bereitstellung müssten Sie mehrere Pods manuell erstellen, aktualisieren und löschen, was für viele Pods mühsam und nicht durchführbar wäre.

Eine Bereitstellung deklariert ein einzelnes Objekt in YAML, das nicht nur die Pods erstellt, sondern auch sicherstellt, dass sie auf dem neuesten Stand sind und ausgeführt werden. Sie können Ihre Anwendungen auch einfach automatisch skalieren, indem Sie eine Bereitstellung auf Kubernetes verwenden. Daher wird eine Bereitstellung verwendet, um Versionen Ihrer Anwendungen in Pods zu skalieren, bereitzustellen und zurückzusetzen.

Ein Deployment teilt Kubernetes auch mit, wie viele Kopien eines Pods wir ausführen möchten, und Kubernetes kümmert sich um den Rest. Der zugeordnete Controller erstellt beim Erstellen einer Bereitstellung ein ReplicaSet aus Ihrer Konfiguration. Der dem ReplicaSet zugeordnete Controller erstellt eine Reihe von Pods aus der ReplicaSet-Konfiguration.

Die Vorteile der Verwendung einer Bereitstellung anstelle der direkten Erstellung eines ReplicaSets sind:

  • Historisierung des Objekts: Jede Änderung des Objekts (über ein „Anwenden“ oder ein „Bearbeiten“) erzeugt ein Backup der vorherigen Version.
  • Rollout- und Rollback-Management: Sie können auf eine Konfiguration in Verbindung mit dem vorherigen Punkt zurückgreifen.

Erstellen einer Bereitstellung

Es gibt zwei Methoden, mit denen wir eine Kubernetes-Bereitstellung erstellen können:

  11 Tools zum Hinzufügen eines Einkaufswagens zu Ihrer Website in 5 Minuten

Imperative Methode

Die Kubernetes-APIs ermöglichen einen direkteren und zwingenderen Ansatz, ohne dass Konfigurationsdateien oder Manifeste im YAML-Format erforderlich sind. Bei diesem Ansatz müssen wir nur sagen, was wir tun möchten, und Kubernetes übernimmt die Verantwortung dafür, zu definieren, was getan werden muss, um das erwartete Ergebnis zu erzielen.

Um die imperative Methode zu verwenden, verwenden Sie einfach den folgenden Befehl:

kubectl create deployment nginx-deployment --image nginx --port=80

Deklarative Methode

Bei dieser Methode müssen Sie alles deklarieren, und wenn Sie diesen Code verwenden, liest Kubernetes einfach Ihre Definitionen und erstellt genau wie dargestellt oder deklariert.

Um die deklarative Bereitstellung zu verwenden, müssen Sie eine YAML-Datei erstellen.

YAML-Datei für die Bereitstellung mit dem Namen new_deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  #Specifies the number of Pod Copies
  replicas: 3
 #Selects the Pod to be managed by the deployment
  selector:
    #Matches the defined labels
    matchLabels:
      deploy: example
  template:
    metadata:
      #Specifies the labels on the Pod.
       labels:
         deploy: example
    spec:
      containers:
        - name: nginx
          image: nginx:1.20.2 

In dieser YAML-Datei befindet sich nach dem Definieren der Kubernetes-API-Version, des Objekttyps, den Sie erstellen, und des Namens der Bereitstellung der Abschnitt spec. In diesem Abschnitt definieren Sie zunächst den Replicas-Schlüssel, der die Anzahl der Pod-Instanzen angibt, die die Bereitstellung aktiv halten muss.

Verwenden Sie eine Auswahlbezeichnung, um die Pods in der Bereitstellung zu identifizieren. Dazu können Sie das Deployment-Label verwenden, das angibt, dass alle Pods, die mit diesen Labels übereinstimmen, in der Bereitstellung gruppiert werden.

Danach haben Sie das Vorlagenobjekt, in dem Sie ein Pod-Modell in Ihrer Bereitstellungsspezifikation haben. Wenn die Bereitstellung Pods erstellt, werden sie mithilfe dieser Vorlage erstellt. Die Spezifikation eines regulären Pods finden Sie unter dem Vorlagenschlüssel.

Bei dieser Bereitstellung werden Nginx-Images mit Labels auf Pods bereitgestellt. Darüber hinaus müssen Sie auch in diesem Punkt vorsichtig sein, und der Pod ist die Skalierbarkeitseinheit in Kubernetes, also müssen Sie sich überlegen, welches Muster Sie verwenden möchten, wenn Sie mehrere Container in denselben Pod stellen.

  So benennen Sie eine Datenreihe in Microsoft Excel um

Wenden Sie als Nächstes die Yaml-Datei new_deployment.yaml an und verwenden Sie den folgenden Befehl:

kubectl apply -f new_deployment.yaml

Nach einigen Sekunden können Sie den Bereitstellungsstatus wie folgt abrufen:

kubectl get all

Bereitstellung abrufen und aktualisieren

Beachten Sie, dass Sie die Pods erstellt haben, die Bereitstellung und auch ein Replicaset. Eine Bereitstellung erstellt und verwaltet also immer ein Replikatset. Jetzt können Sie den folgenden Befehl verwenden, um die Bereitstellung zu beschreiben:

kubectl describe deployment nginx-deployment 

Jetzt haben Sie eine vollständige Beschreibung der Bereitstellung. Es hebt die Strategie hervor, die verwendet wird, um die Pods zu erstellen/neu zu erstellen, wenn ein Update als RollingUpdate definiert wurde.

Die RollingUpdate-Strategie ermöglicht eine geordnete Migration einer Version einer Anwendung auf eine neuere Version. Dies ist die in Kubernetes verwendete Standardstrategie.

Darüber hinaus haben wir auch die folgenden Strategien:

  • Neu erstellen: Beendet die derzeit laufenden Pod-Instanzen und „erstellt“ sie mit der neuen Version neu;
  • Blau/Grün: Diese Strategie erstellt zwei separate, aber identische Umgebungen. In der blauen Umgebung läuft die Anwendung so, wie sie ist, während die Anwendung in der grünen Umgebung so läuft, wie sie in Zukunft sein wird;
  • Canary: Eine Bereitstellungsstrategie, bei der eine Teilmenge von Benutzern an der inkrementellen Veröffentlichung einer Anwendung oder eines Dienstes beteiligt ist.

Wenn Sie sich für „Rolling-Update“ entscheiden, können Sie sein Verhalten über die Anzahl der gewünschten Replikate konfigurieren.

  • Mit maxSurge können Sie (in Prozent oder absolut) angeben, wie viele Pods zusätzlich zur Anzahl der derzeit konfigurierten Replikate erstellt werden können.
  • Mit maxUnavailable können Sie (in Prozent oder absolut) angeben, wie viele Pods während der Aktualisierung „nicht verfügbar“ sein können, abhängig von der Anzahl der konfigurierten Replikate.
  So aktualisieren Sie HomePod mini oder HomePod

Abhängig von Ihrer Anwendung und Ihrem Autoscaler können Sie mit diesen Konfigurationen QoS sicherstellen oder Ihre Bereitstellungen beschleunigen.

Als nächstes müssen Sie die Pods auf 10 skalieren und das Nginx-Image-Tag auf das neueste ändern.

kubectl scale deployment nginx-deployment --replicas=10

Beachten Sie, dass 5 Container erstellt werden und von 10 Pods 5 verfügbar sind.

Verwenden Sie nach einigen Sekunden den folgenden Befehl:

kubectl get all

Hier sehen Sie, dass alle Pods erstellt wurden und die Container ausgeführt werden.

Löschen Ihrer Bereitstellung

Um eine Kubernetes-Bereitstellung zu löschen, können Sie die folgenden Befehle verwenden:

kubectl delete deploy nginx-deployment 
kubectl delete deploy new_deployment.yaml

Helm: Vereinfachen Sie Bereitstellungen

Wenn Sie eine komplexe Anwendung bereitstellen möchten, die Dutzende oder sogar Hunderte von Kubernetes-Ressourcen verwendet, wird das kubectl-Tool ungeeignet, weshalb das Helm-Tool entwickelt wurde. Helm ist ein Paketmanager für Kubernetes, der auf kubectl aufbaut und die Anwendungsbereitstellung vereinfacht.

Im Helm-Vokabular wird eine Anwendung als Release bezeichnet. Es ist mit einem Diagramm verknüpft, dh einer Sammlung von Konfigurationsdateien im YAML-Format, die globale Variablen und Vorlagen enthalten, die Kubernetes-Ressourcen beschreiben.

Fazit

Die Bereitstellung ist ein wesentliches Kubernetes-Objekt. Da eine große Macht eine große Verantwortung mit sich bringt, müssen Sie vorsichtig sein, wenn Sie sie konfigurieren, oder riskieren Sie unerwartetes Verhalten. Weitere Informationen zu den Bereitstellungskonfigurationen finden Sie in der Kubernetes-Dokumentation.

Sie können auch einige der besten Kubernetes-Tutorials erkunden, um von Grund auf neu zu lernen und ein Experte zu werden.