Die Werkzeugkiste #1: Helm – Kubernetes-Deployments richtig gemacht

In der Serie "Die Werkzeugkiste" stellen Entwickler nützliche Tools vor: Zum Auftakt den Paketmanager Helm, der das Deployment von Kubernetes-Applikationen vereinfacht.

Werkzeuge  –  0 Kommentare
Die Werkzeugkiste #1: Helm [--] Kubernetes-Deployments richtig gemacht

In der heise-Developer-Serie "Die Werkzeugkiste" stellen Entwickler in regelmäßigen Abständen ihre nützlichsten Werkzeuge, Tools, und Hilfsmittelchen vor. Wie bei der Werkzeugkiste von Handwerkern gilt auch hier: Die Kisten sind meist ziemlich voll – die Auswahl des bevorzugten Werkzeugs für eine Arbeit immer subjektiv. Wenn Sie ihr Lieblings-Tool vermissen oder selber gerne in einem Artikel vorstellen wollen, schreiben Sie doch einfach eine E-Mail an heise Developer.

Kubernetes ist derzeit auf seinem Siegeszug in der Container-Welt schwer zu übersehen. Allerdings ist beständiges Schreiben und Anpassen der Objekte mit YAML- oder JSON-Dokumenten nicht unbedingt Jedermanns Sache. Der Paketmanager Helm kann helfen, das Deployment von Applikationen und Abhängigkeiten zu vereinfachen.

Eine kleine Helm-Kunde

Kubernetes arbeitet wie andere Orchestrierungswerkzeuge deklarativ. Das bedeutet, dass Nutzer für ihre Applikationen einen Zielzustand definieren. Die Control Plane des Clusters versucht dann, sie in der Realität möglichst gut herzustellen. Die dafür nötigen Primitive wie Pods, Deployments oder Services teilen Nutzer dem System über eine REST API mit. Die Definition der Objekte direkt ist aber eher unpraktisch. Zum Beispiel ändert sich die Struktur einer Applikation weniger häufig als die Versionen der verwendeten Komponenten. Daher ist ein Mechanismus nötig, der die Beschreibungen bei Bedarf ändern kann, ohne jedesmal eine Menge Dateien manuell anpassen zu müssen.

Helm ist ein Paketmanager zum Verwalten von Kubernetes-Applikationen, der die Probleme mindert. Entwickler hinterlegen innerhalb sogenannter Helm Charts Beschreibungen von Kubernetes-Objekten. Sie landen beim Deployment im Cluster. Die Definition der Objekte kann eine Templating Engine dynamisch gestalten. Sollte sich nur die Versionsnummer eines beteiligten Docker Images geändert haben, können Entwickler sie somit beim Deployment manuell durch einen anderen Wert überschreiben.

Die Cloud Native Computing Foundation (CNCF) unterstützt die Entwicklung von Helm organisatorisch. Sie hostet ebenfalls Kubernetes und zahlreiche andere Projekte. Helm ist kürzlich innerhalb der CNCF in den Incubator aufgestiegen und reorganisiert derzeit seine Strukturen. Zuletzt wählte man ein Maintainer-Kommitee, das das Projekt repräsentieren und organisieren soll. Das soll für Unabhängigkeit von den Unternehmen sorgen, die die Entwicklung des Projekts ursprünglich angeschoben haben. Die Entwicklung von Helm und weiterer Komponenten erfolgt auf GitHub.

Die Architektur von Helm

Helm besteht aus zwei Komponenten. Benutzerseitig erfolgt die Kontrolle über ein Kommandozeilenprogramm. Auf der Seite des verwalteten Kubernetes-Clusters ist eine serverseitige Komponente namens Tiller notwendig. Sie verwaltet zentral die Historie der Deployments. Wer eine grafische Oberfläche wünscht, kann zudem mit monocular eine Webapplikation für die Verwaltung im Cluster installieren.

Installation von Helm

Die Installation gestaltet sich für Benutzer daher denkbar einfach. Zunächst müssen Entwickler das Helm-Binary aus dem GitHub-Repository herunterladen. Das sollte danach im Pfad der Benutzer verfügbar sein und über den Befehl helm ausführbar sein. Zudem brauchen Anwender noch ein Kubernetes-Cluster zum Ausprobieren. Für den Laptop bietet sich minikube an. Außerdem bieten alle großen Cloud-Anbieter gemanagte Cluster an.

Nun können Entwickler Helm installieren. Sollte das Cluster Role-based Access Control (RBAC) nutzen, müssen sie zunächst einen Service-Account für Tiller einrichten und ihm administrative Rechte einräumen. Das ermöglicht Tiller, aus dem Cluster heraus Änderungen durchzuführen. Die folgenden Befehle installieren Tiller mit einem Kubernetes-Cluster mit entsprechenden Rechten:

kubectl -n kube-system create sa tiller
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
helm init --service-account tiller