Von Michael Burnicki auf Donnerstag, 07. November 2019
Kategorie: News

Applikationen mit Helm auf Kubernetes deployen

Der erste Teil des Blogs k3s - Eine schlanke, skalierende Containerplattform kompatibel zu Kubernetes" beschäftigt sich mit dem Aufsetzen einer Containerplattform in Form eines Kubernetes-Clusters aus zwei Knoten sowie einem k3s-Server und einem k3s-Agenten. Er ist die Ausgangsbasis für diesen Beitrag.

Üblicherweise wird eine Applikation, die auf einem Kubernetes-Cluster deployed wird, mithilfe von Dateien im YAML-Format deklarativ beschrieben. Die Dateien enthalten sowohl die Beschreibung der Kubernetes-Objekteals auch die Parameter der Applikation.

In den letzten Jahren hat sich der Packagemanager Helm für die Kubernetes-Plattform als De-facto-Standard etabliert.

Helm abstrahiert die YAML-Dateien, die die Applikation beschreiben, separiert die Applikationsparameter, versioniert die Applikation, abstrahiert die clusterspezifischen Gegebenheiten wie Storage- und Netzwerkanbindung und hilft dadurch den Austausch, die Übertragbarkeit und das Verpacken zu vereinfachen.

Fertig verpackte Applikationen werden durch die Entwickler der Open-Source-Community in Repositories im Internet in sogenannten Helm-Charts zur Verfügung gestellt.

Helm-Charts beschreiben die Kubernetes-YAML-Dateien template-basiert, gesteuert durch die in einer 'values.yaml'-Datei abgelegten Parameter. Diese können bei der Installation des Charts auf die Umgebung des Clusters angepasst werden. Beispielsweise können so unterschiedliche Implementierungen des Netzwerkzugriffs wie Loadbalancer, Nodeport usw. in den Kubernetes-Clustern ausgeglichen werden. Auch installationspezifische Informationen wie Credentials oder Anzahl der Containerreplikationen lassen sich hier ablegen.

Helm besteht aus zwei Komponenten: Einem Client in Form des Kommandos helm und der Serverkomponente tiller.

Vorbereitung und Parametrierung

Beispielhaft wird nun die Applikation mysql aus dem öffentlichen Helm-Repository installiert. Zunächst die Anmeldung per ssh an den `k3s-server`:

ssh user@k3s-server

Das Repository kann folgendermaßen durchsucht werden:

Einige der vielen möglichen Parameter bei der Installation, werden im YAML-Format in der Datei ~/values.yaml gepflegt. Um die Datenbank extern nutzen zu können, muss der Container-Port nach außen im Cluster bereitgestellt werden. Die Wahl des KubernetesLoad-Balancers sorgt dafür, dass der in k3s enthaltene Loadbalancer traefik entsprechend konfiguriert wird und der Datenbankprozess sowohl unter k3s-server:3306, als auch k3s-agent:3306 im Netzwerk erreichbar ist.
Um die Daten der Datenbank zu persistieren (Pods bzw. Container sind in der Regel flüchtig), ist es notwendig, zunächst eine Kubernetes-Storageklasse zu erzeugen:

und diese dann durch die Parameter der Applikation zuzuordnen:

Zusätzlich werden die Accountinformationen festgelegt:

Damit hat die Parameterdatei nun folgenden Inhalt:  

  Installation

Nun kann die Applikation installiert werden:

Das Ergebnis:  helm hat den Kubernetes Namespace mysql-test erzeugt:

helm list zeigt die Installation:  

Der Namespace enthält die Kubernetes-Objekte, aus denen die Applikation besteht:

  Applikationstest

Zum Testen der Anwendung durch Anmelden an der Datenbank ist der mysql-client notwendig:  

Nun kann die Verbindung aufgebaut werden:  

Dabei sorgt der Loadbalancer traefik dafür, dass die Datenbank unabhängig auf welchen Knoten sie als Pod läuft, sowohl unter k3s-server als auch k3s-agent im Netzwerk erreichbar ist. In diesem Beispiel wurde der Pod durch den Kubernetes-Scheduler auf dem Konten k3s-agent gestartet: 

Die Daten des Pods werden auf dem Linuxsystem (Host) abgelegt:  

Sie befinden sich hier:

Fehlersuche  

Weitere Informationen zur Fehlerbehebung können den Logdateien auf Server und Agent entnommen werden:  

Die Installation von k3s erzeugt zusätzliche Dienste, die als Kubernetes Pods (Verbund von Containern) in speziellen Namespaces laufen:  

Die internen Dienste befinden sich im Namespace kube-system und können so angezeigt werden:
 

Fazit 

Applikationen wie mysql lassen sich mit helm relativ einfach auf einem Kubernetes-Cluster installieren und flexibel mit Hilfe der values.yaml an die Umgebung bzw. an die Anforderungen nach Datenpersistenz und die Erreichbarkeit im Netzwerk anpassen. Die values.yaml erlaubt darüber hinaus die Parametrierung der Applikation wie beispielsweise das Setzen der Credentials.

Helm erleichtert generell das Verpacken und den Austausch von Applikationen. Viele Open-Source-Technologien werden durch die Communities bereits als Helm-Charts zur Verfügung gestellt und unterstützen horizontal skalierende Kubernetes-Cluster.

Quellen  

mysql helm-Chart
https://github.com/helm/charts/blob/master/stable/mysql/values.yaml 

Kommentare hinterlassen