Die Reihe der Blogposts und Scripte orientiert sich an einem geschichteten Aufbau von der niedrigen Abstraktion zur immer höheren Abstraktion.

In der Abbildung sind die einzelnen Schichten und die zugehörigen Automatisierungswerkzeuge (Terraform, Ansible, Helm) abgebildet. Außerdem verwende ich gerne Bash-Scripte, um einzelne Schritte zusammenzufassen.

Darstellung Schichten

Die Automatisierung

Um im nächsten Blogpost sofort loslegen zu können, hier bereits vorab einige Informationen zur Organisation der Automatisierung.

Die meisten Schritte sind mittels Terraform, Ansible und Helm sowie einigen Scripten automatisiert. Trotzdem stelle ich keinen Oneclick-Installer oder ein einzelnes Script zur Verfügung. Schnell geht einer der Schritte, die ich beschreiben werde schief. Fehler lassen sich zwar meist durch ein erneutes Ausführen des Schritts z.B. mit geänderten Parametern korrigieren, trotzdem erfordert es oft ein manuelles Eingreifen. Außerdem dauern die Schritte teilweise durchaus mehrere Minuten und eine erneute komplette Ausführung würde viel Zeit in Anspruch nehmen. Ich habe mich daher entschieden, zwar viel zu automatisieren und Scripte zu erstellen, aber die einzelnen Schritte, die sich an den Schichten und Werkzeugen orientieren, die ich oben beschrieben hatte, müssen einzelnen gestartet werden. Falls sich über die Zeit herausstellen sollte, dass die einzelnen Schritte sehr stabil laufen, werde ich ggf. über eine weitere Automatisierung nachdenken.

Die Struktur

Die einzelnen Bausteine der Automatisierung befinden sich in mehreren Git-Repositories. Ein manuelles Klonen ist dennoch selten notwendig.

Die Automatisierung ist so organisiert, dass mehrere Kubernetes-Cluster erzeugt werden können. Die Basis-Verzeichnisstruktur besteht später aus drei Verzeichnissen.

  1. repos - In diesem Verzeichnis befinden sich später sämtliche Git-Repositories. Das repos Verzeichnis teilen sich alle Kubernetes-Cluster.
  2. tools - In diesem Verzeichnis befinden sich später alle Werkzeuge wie die Hetzner Cloud CLI, Helm und Terraform. Auch das tools Verzeichnis teilen sich alle Kubernetes-Cluster.
  3. cluster - In diesem Verzeichnis befindet sich pro aufgesetztem Kubernetes-Cluster ein Ordner. In diesen Cluster-Ordnern befinden sich dann die SSH-Keys für das Cluster, Ansible Inventories und der Terraformzustand.

Bei mir heißt das Basisverzeichnis, in dem sich später diese drei Verzeichnisse befinden, clustebase.

Notation

In meinen Blogposts verwende ich für veränderbare Namen spitze Klammern (z.B. <clusterbase>). So gekennzeichnete Namen können beliebig gewählt werden, müssen aber im weiteren Verlauf konsistent verwendet werden.

Im nächsten Post geht es endlich richtig los. Ich beschreibe darin, wie mit Terraform die Basisinfrastruktur erzeugt wird.

Der Cloud-Provider

Ich habe mich entschieden, für meine Blogposts Hetzner als Cloud-Provider zu nutzen. Eine Abwägung von Vor- und Nachteilen im Detail habe ich nicht vorgenommen. Hetzner ist preislich attraktiv und bietet mit seinem Commandline Interface (CLI) und der Terraform-Unterstützung die notwendigen Vorraussetzungen, um die Basisinfrastruktur automatisiert aufsetzen zu können.

Der nächste Blogpost und die entsprechende Automatisierung basiert auf dieser Entscheidung. Anpassungen für andere Cloud-Provider, die Terraform unterstützen, sollten dennoch nur wenig aufwändig sein.