Mit den vielen einleitenden Worten und Vorbemerkungen ist jetzt Schluss.

Umgebung für die Clustererzeugung vorbereiten

Im ersten Schritt legen wir ein Basisverzeichnis und darin das Verzeichnis repos an. Das Basisverzeichnis heißt bei mir clusterbase. Nachdem ich die Verzeichnisse angelegt habe, clone ich das Repository nettista-bootstrap Dann werden einige für das weitere Setup notwendige Abhängigkeiten installiert und schließlich die Tools Terraform, Helm und die Hetzner CLI heruntergeladen.

Die Schritte im Einzelnen:

# Create folder <clusterbase>/repos
mkdir -p <clusterbase>/repos
# Change to directory <clusterbase>/repos/
cd <clusterbase>/repos/
# Clone nettista-bootstrap repository
git clone https://github.com/NettistaNet/nettista-bootstrap.git
# Change to directroy <clusterbase>/repos/nettista-bootstrap
cd nettista-bootstrap
# Install prerequisties
sudo pip install -r ./client_requirements.txt
# Download tools
./nettista-dl-tools.sh

Von nun an sind alle relativen Pfadangaben auf das Verzeichnis des lokalen Repositories nettista-bootstrap bezogen.

Basisinfrastruktur für das erste Kubernetes-Cluster erzeugen

Alle Schritte bis hierhin waren nicht clusterspezifisch. Im nächsten Schritt erzeugen wir nun ein SSH-Schlüsselpaar für unser erstes Kubernetes-Cluster. <clustername> kann beliebig gewählt werden. Allerdings muss der Name im folgenden konsistent verwendet werden.

# Generate ssh-keys
./nettista-gen-keys.sh --cluster-name <clustername>

Das SSH-Schlüsselpaar wird im Ordner <clusterbase>/clusters/<clustername>/keys/ erzeugt.

Nun sind einige wenige manuelle Schritte in der Weboberfläche von Hetzner (Hetzner Cloud Console) notwendig. Es wird ein neues Projekt angelegt und ein API-Token für dieses Projekt generiert (Zugänge > API-Token # API-TOKEN HINZUFÜGEN). Bei mir heißt das Projekt .

Damit sind die notwendigen Vorraussetzungen geschaffen. Die Basisinfrastruktur kann nun mit Terraform erzeugt werden. Dazu wird das Script nettista-tf.sh ausgeführt. Das Script klont das Repository nettista-terraform oder aktualisiert dieses und führt nacheinander tf init, tf plan und tf apply aus. Der Terraformzustand (tfstate) wird im Verzeichnis <clusterbase>/<clustername>/tf gespeichert.

Ich gehe im Folgenden davon aus, dass wir ein Kubernetes-Cluster mit fünf Knoten anlegen. Die Knoten eins und zwei sind gleichzeitig Master und der ETCD-Cluster wird von den Knoten 1-3 gebildet. Abweichungen von diesem Setup sind möglich, müssen aber auch später beachtet werden.

Ohne weitere Anpassung erzeugt Terraform fünf Server des Typs CX21 (2 vCPUs, 4 GB RAM, 40 GB SSD) in Nürnberg (nbg1). Als Betriebsystem dient Ubuntu 18.04.

Das Script erwartet drei Parameter:

  1. Den Namen des Clusters - <clustername>
  2. Den oben erzeugten Hetzner API-Token - <api-token>
# Create virtual servers using terraform
./nettista-tf.sh --cluster-name <clustername> --token <api-token>

Abweichend davon können die default-Werte aus der variables.tf überschrieben werden. So kann z.B. die Anzahl der Server auf sechs erhöht werden:

# Create virtual servers using terraform
./nettista-tf.sh --cluster-name <clustername> --token <api-token> --var "node_count=6"

Kubernetes-Terminologie

Hier ein Hinweis für alle, die mit der Kubernetes-Terminologie noch nicht so vertraut sind. Eine gute Übersicht bietet die Dokumentation zu Kubernetes. Wer sich das Ganze lieber spielerisch zu Gemüte führen möchte, dem sei das Youtube-Video The Illustrated Children’s Guide to Kubernetes ans Herz gelegt.


Wir haben nun die Basisinfrastruktur bestehend aus fünf virtuellen Servern erzeugt. Verifiziert werden kann dies am Besten über die Weboberfläche von Hetzner Cloud.

Im nächsten Blogpost wird es darum gehen, die fünf Server vorzubereiten, um danach ein Kubernetes-Cluster aufsetzen zu können.