single.php
< Beitrag von Frank Oltmanns-Mack

Container on Azure 6: Kubernetes-Beispielanwendung

Nachdem es im letzten Teil dieser kleinen Blog-Serie um die Erstellung des Kubernetes-Clusters auf Azure ging, zeige ich in diesem Beitrag, wie Sie eine Kubernetes-Beispielanwendung bereitstellen können. Dabei konzentriere ich mich zunächst nur auf die Bereitstellung der Plattform für Anwendungen. Normalerweise ist in Kubernetes folgendes Vorgehen sinnvoll:

  1. Entwurf Anwendung
  2. Containerisierung der Anwendung
  3. Bereitstellung der Anwendung in einer Entwicklungsumgebung basierend auf Kubernetes (lokal oder remote)
  4. Test der Anwendung in einer Testumgebung (lokal oder remote)
  5. Bereitstellung in der Produktionsumgebung (lokal oder remote)

Neue Versionen der Anwendungen werden anschließend automatisiert auf den einzelnen Staging-Umgebungen bereitgestellt. Ich zeige diesen Prozess durch einen kleinen Kniff in der Kubernetes-Beispielanwendung auch in der Praxis. Wie im letzten Beitrag erkläre ich Schritt für Schritt die Befehle, die Sie in der Azure CLI oder in der Kubernetes CLI ausführen müssen. Als Beispiel verwende ich dazu eine Beispielanwendung von der offiziellen Kubernetes-Webseite. Dabei handelt es sich um eine Gästebuch-Anwendung, die am Ende aus folgenden Komponenten besteht:

  • Einer einzelnen Instanz für den Redis-Master, der die Gästebucheinträge speichert
  • Mehrfache Repliken der Redis-Instanzen, um die Zugriffe zu verarbeiten
  • Mehrere Frontend-Instanzen

Redis ist eine In-Memory-Datenbank mit einfacher Schlüssel-Werte-Datenstruktur und fällt in die Klasse der NoSQL-Datenbanken. Ich habe mich auch deshalb für ein Beispiel der offiziellen Kubernetes-Webseite entschieden, um zu zeigen, dass die Bereitstellung unabhängig ist von der zugrunde liegenden Plattform. Sie können die Beispielanwendung auf jedem Kubernetes-Cluster bereitstellen.

Bereitstellung des Kubernetes-Cluster

Für die Bereitstellung der Kubernetes-Beispielanwendung brauchen Sie zunächst einen Kubernetes-Cluster. Theoretisch können Sie den Cluster aus dem letzten Beitrag weiterverwenden, aber der Vollständigkeit halber führe ich hier nochmal die Befehle zur Erzeugung der Umgebung auf. Ich erstelle einen Cluster mit 3 Nodes und der Version 1.10.9.

Die Ausgabe sollte nach der Ausführung von kubectl get nodes so aussehen:

Erstellung des Redis-Master

Als nächstes erstelle ich den Redis-Master. Die Bereitstellung in Kubernetes erfolgt durch sogenannte YAML-Dateien. Für das Deployment verwende ich die folgende Datei:

Um diese Datei im Kubernetes-Cluster bereitzustellen, führe ich folgenden Befehl aus:

Es folgt der Befehl kubectl get pods. Jetzt können Sie den Pod für den Redis-Master sehen:

Erzeugung des Redis-Master-Service

Damit die Gästebuchanwendung mit dem Redis-Master kommunizieren kann, erstelle ich einen Service in Kubernetes, der wiederum den Zugriff auf den Pod steuert.

Diese YAML-Datei wende ich anschließend wieder auf den Kubernetes-Cluster an.

Mit folgendem Befehl zeige ich den erzeugten Services an:

Erzeugung der Redis-Slaves

Um Redis hochverfügbar zu machen, können Sie zusätzliche Redis-Slaves erzeugen. Mit dieser Datei erzeugen Sie 2 Repliken eines Redis-Slave.

Anschließend stelle ich die Datei dem Kubernetes-Cluster zur Verfügung:

Die Ausführung von kubectl get pods liefert folgende Ausgabe:

Erzeugung des Redis-Slave Service

Für die Slaves müssen Sie anschließend wiederum einen Service erzeugen.

Erzeugung des Gästebuch-Frontend

Die Gästebuch-Anwendung besitzt ein Frontend, das in PHP geschrieben wurde. Die Anwendung verbindet sich für Schreibvorgänge automatisch zum Redis-Master-Service und für Lesevorgänge zu den Redis-Slaves.

Anschließend stelle ich die Datei wieder dem Kubernetes-Cluster zur Verfügung.

Mit dem folgenden Befehl lassen Sie sich nun die Pods des Frontends ausgeben.

Erzeugung des Gästebuch-Frontend-Service

Die Services für den Redis-Master und die Redis-Slaves habe ich so erzeugt, so dass sie nur innerhalb des Clusters erreichbar sind. Allerdings soll das Gästebuch jetzt auch extern erreichbar sein. Dafür stellt Azure automatisch einen Loadbalancer zur Verfügung, der die Last auf die verschiedenen Frontend-Instanzen verteilt. Diesen Service erzeuge ich mit der folgenden Datei:

Wie Sie sehen, wurde dem Frontend-Service automatisch eine externe IP zugewiesen. Unter dieser IP kann das Gästebuch dann auch angezeigt werden:

Kubernetes-Beispielanwendung

Kubernetes-Beispielanwendung

Skalierung des Frontend

Die Skalierung des Frontend ist mithilfe des Loadbalancers sehr einfach. Ich skaliere die Anzahl der Frontend-Pods im nächsten Schritt auf 6 hoch:

Für die Besucher des Gästebuchs ist die Bereitstellung der neuen Repliken unterbrechungsfrei. Damit steht also ein hochverfügbares Gästebuch bereit. Wenn Sie sich die Verteilung der Pods über die Nodes anschauen, so stellen Sie fest, dass diese gleichmäßig verteilt wurden.

Kubernetes-Beispielanwendung

Verteilung der Pods

Aktualisierung der Anwendung

Wenn Sie sich die YAML-Datei des Frontends ansehen, dann erkennen Sie, dass zur Bereitstellung das Image gcr.io/google-samples/gb-frontend in der Version v4 verwendet wurde. Mittlerweile wurde das Image allerdings auf die Version v6 aktualisiert. Wollen Sie diese Version nun in Ihrem Cluster nutzen, dann müssen Sie nur die Datei anpassen. Dazu setze ich die Anzahl der Repliken wieder auf den Wert 3.

Kubernetes kümmert sich nun selbständig um die Reduzierung der Replikas und die Bereitstellung der neuen Image-Version. Dabei ist jederzeit gewährleistet, dass die Anwendung weiterhin verfügbar ist.

Kubernetes-Beispielanwendung: schnell bereitgestellt, einfach skalier- und aktualisierbar

Die praktische Anleitung zur Kubernetes-Beispielanwendung zeigt: Mithilfe von Kubernetes können Sie hochverfügbare Anwendungen sehr schnell bereitstellen. Die Skalierung wie auch die Aktualisierung der Anwendung ist sehr einfach und robust. Die Verwendung einer Cloud-Umgebung wie Azure vereinfacht den Einsatz von Kubernetes erheblich, da die Bereitstellung der notwendigen Dienste automatisiert im Hintergrund abläuft.

Mit dieser Beispielanwendung bin ich nun vorläufig am Ende der Reihe zu Kubernetes und Azure angekommen. Allerdings gibt es zu diesem Thema noch viele weitere Aspekte, die eine nähere Betrachtung lohnen. Wenn Sie daran Interesse haben, dann lassen Sie mich dies gerne in den Kommentaren wissen. Ich bedanke mich bei allen Lesern dieser Reihe und hoffe, Ihnen einen guten Einblick in das Thema vermittelt zu haben.

Bisherige Teile der Serie „Container on Azure“:

  1. Was sind Container?
  2. Was ist Kubernetes?
  3. Architektur von Kubernetes
  4. Kubernetes-Sicherheit
  5. Azure Kubernetes Service
  6. Kubernetes-Beispielanwendung
Folgen
X

Folgen

E-mail : *
Kategorie: Cloud | Schlagwörter: , , | Kommentare: 0

Beitrag kommentieren

CAPTCHA * Time limit is exhausted. Please reload CAPTCHA.