Website-Icon HOPPLIN GmbH [dev] Blog

Aufbau eines Kubernetes Cluster in der Hetzner Cloud

Aufbau eines Kubernetes-Cluster in der Hetzner Cloud
5/5 - (1 vote)

Heute schreibe ich einen Artikel über den Aufbau eines Kubernetes Clusters in der Hetzner Cloud. Und damit nach langer Zeit mal wieder ein Artikel der Reihe: Die vielen Wege ein Kubernetes-Cluster aufzusetzen. Für den Betrieb einer K8s Infrastruktur habe ich mir heute das Hosting Unternehmen Hetzner ausgesucht (den ich im Übrigen bevorzugt für meine Kunden verwende).

Vorbereitung

Für den eigentlichen Aufbau auf benötigst du zuerst einmal lokal einige Werkzeuge.

kubectl

Dazu gehört unter anderem die CLI-Anwendung kubectl. Auf der Webseite von Kubernetes findest du für Linux, Windows und MacOS eine ausführliche Installationsbeschreibung. Ich verwende meinem Mac Homebrew und somit ist die Installation für mich sehr schnell erledigt:

Mac:# brew install kubernetes-cli

Somit ist diese Installation abgeschlossen.

hetzner-kube

Erfreulicherweise hat David Steiman (stytex.de) eine Konsolenanwendung auf Basis von GO geschaffen, mit der du mit wenigen Parametern ein komplettes K8s Cluster bauen kannst. Die aktuellste Version (auch hier für Windows, Linux und MacOS) kannst du über die Github-Seite herunterladen: github.com/xetys/hetzner-kube

Mac:# curl -L -O https://github.com/xetys/hetzner-kube/releases/download/0.5.0-rc2/hetzner-kube-0.5.0-rc2-darwin-amd64
Mac:# mv hetzner-kube-0.5.0-rc2-darwin-amd64 /usr/local/bin/hetzner-kube
Mac:# chmod +x /usr/local/bin/hetzner-kube

Kunden-Account auf hetzner.de

Registrierung

Sofern du noch keinen Account auf hetzner.de hast, kannst du dich auf in wenigen Schritten bei accounts.hetzner.com/signUp registrieren. Nach erfolgreicher Kontoerstellung kannst du über den Link console.hetzner.cloud direkt auf die Management-Konsole zugreifen.

Projekterstellung

Jetzt erstellst du dir ein neues Projekt. Dazu einfach auf “+ Neues Projekt” klicken und einen Namen eingeben.

SSH-Schlüssel

Sofern du dir noch keinen SSH-Schlüssel erstellt hast, ist jetzt ein guter Zeitpunkt dafür. Dafür brauchst du das Terminal-Fenster:

Mac:# ssh-keygen -t rsa 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/[Benutzer]/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):

Verwende hier in jedem Fall ein Passwort. Anschließend füge den öffentlichen Schlüssel in deinem neuen Projekt unter “Zugänge” -> “SSH-Keys” hinzu:

Mac:# cat ~/.ssh/id_rsa.pub

Aufbau des Kubernetes Cluster in der Hetzner Cloud

So, jetzt haben wir alle Vorbereitungen abgeschlossen und können das Kubernetes Cluster aufbauen. Grundsätzlich solltest du zuerst darüber nachdenken, ob du dieses Cluster zum Testen aufbaust oder produktiv verwenden möchtest. Daraus leiten sich einige Parameter ab (bspw die Hochverfügbarkeit, Typ der virtuellen Maschine)

Lokalen Projekt Kontext anlegen und vorbereiten

Zuerst legst du lokal einen neuen Projekt Kontext an. Dazu benötigst du zuerst einen neuen API-Schlüssel. Diesen bekommst du über “Zugänge” -> “API-Token” in deinem Projekt. Bitte speichere dir diesen Token, du brauchst diesen noch einige Male.

Als nächstes startest du deine Konsole und legst den Kontext mit folgendem Befehl an:

Mac:# hetzner-kube context add k8s-project
 Token: [dein-API-Token]
 added context 'k8s-project'

Jetzt muss du deinen SSH-Schlüssel hinzufügen:

Mac:# hetzner-kube ssh-key add -n meinKey
 sshKeyAdd called
 SSH key will be added to hetzner as 'meinKey'
 SSH key will be added to your config as 'meinKey'
 SSH key meinKey(1132456) created

Kubernetes Cluster anlegen

Jetzt sind wir endlich an der Stelle angekommen ein neues Kubernetes Cluster in der Hetzner Cloud anzulegen. Für einen ersten Setup kannst du mit dem Befehl starten. Dazu gebe deinem Cluster einen Namen (hier habe ich “my-k8s-cluster” gewählt) und den Namen deines SSH-Keys (findest du auch unter hetzner-kube ssh-key list ). Bevor die erste Maschine startet musst du deine Passphrase eingeben.

Mac:# hetzner-kube cluster create --name my-k8s-cluster --ssh-key meinKey                                   
 2019/10/01 15:43:26 Creating new cluster
 NAME:my-k8s-cluster
 MASTERS: 1
 WORKERS: 1
 ETCD NODES: 0
 HA: false
 ISOLATED ETCD: false
 Enter passphrase for SSH key /Users/[Benutzer]/.ssh/id_rsa: 
 2019/10/01 15:43:36 creating server 'my-k8s-cluster-master-01'...
   --- [======================================] 100%
 2019/10/01 15:43:41 Created node 'my-k8s-cluster-master-01' with IP XXX.XXX.XXX.XXX
 2019/10/01 15:43:41 creating server 'my-k8s-cluster-worker-01'...
   --- [======================================] 100%
 2019/10/01 15:43:46 Created node 'my-k8s-cluster-worker-01' with IP XXX.XXX.XXX.XXX
 2019/10/01 15:43:46 sleep for 10s...
 ...-cluster-master-0 : complete!               100.0% [==============]
 ...-cluster-worker-0 : complete!               100.0% [==============]
 2019/10/01 15:54:26 Cluster successfully created!

Kubernetes Konfiguration für kubectl speichern

Das du jetzt auch kubectl auf deinem lokalen Rechner verwenden kannst, musst du dir die Konfiguration deines Clusters auf deinen Rechner kopieren lassen. Das geht mit hetzner-kube relativ einfach:

Mac:# hetzner-kube cluster kubeconfig my-k8s-cluster -b
Enter passphrase for SSH key /Users/[Benutzer]/.ssh/id_rsa:

Mit diesem Befehl wurde die Konfiguration in die Datei ~/.kube/config geschrieben und kubectl kann seine Arbeit aufnehmen.

Freestyle – jetzt kannst du ein K8s Cluster in der Hetzner Cloud nach deinen Wünschen bauen

Nachdem du jetzt verstanden hast, wie einfach und schnell sich ein neues Kubernetes Cluster mit diesem Tool bauen lässt, hier einige Erweiterungen für dich.

Hochverfügbarkeit

Das CLI-Tool kann über den Parameter --ha-enabled ein hochverfügbares K8s Cluster anlegen. Dazu werden 3 Kubernetes Master angelegt. Zusätzlich kannst du mit --isolated-etcd oder mit der Menge der etc Knoten --etcd-count X die Key/Value-Server auf eigene virtuelle Server installieren.

Grundsätzlich werden die Master Systeme im Hochverfügbarkeits-Modus auf die 3 Rechenzentren: Nürnberg, Falkenstein und Helsinki verteilt.

Weitere Informationen hierzu findest du in der Dokumentation unter: github.com/xetys/hetzner-kube/blob/master/docs/high-availability.md

Container Storage Interface für Hetzner Cloud

Vorausgesetzt du hast ein funktionierendes Cluster am Laufen, kannst du mit dem CSI-Treiber deine K8s Installation erweitern. Dieser Treiber kann ganz einfach in wenigen Schritten hinzugefügt werden und nutzt die Hetzner Cloud Funktion Volumes.

Den entsprechenden Treiber für die Schnittstelle findest du unter: github.com/hetznercloud/csi-driver

Zuerst werden die entsprechenden Ressourcen zum Cluster hinzugefügt:

Mac:# kubectl apply -f https://raw.githubusercontent.com/kubernetes/csi-api/release-1.13/pkg/crd/manifests/csidriver.yaml
Mac:# kubectl apply -f https://raw.githubusercontent.com/kubernetes/csi-api/release-1.13/pkg/crd/manifests/csinodeinfo.yaml

Danach musst du den API-Token, den du anfangs erstellt hast, dem Cluster als “Secret” zur Verfügung stellen:

Mac:# echo "apiVersion: v1
 kind: Secret
 metadata:
   name: hcloud-csi
   namespace: kube-system
 stringData:
   token: [dein-API-Token]
 " | kubectl apply -f -

Und zuletzt den CSI-Treiber ausrollen:

Mac:# kubectl apply -f https://raw.githubusercontent.com/hetznercloud/csi-driver/master/deploy/kubernetes/hcloud-csi.yml

hetzner-kube Erweiterungen

Sobald das Cluster zur Verfügung steht, kannst du mittels hetzner-kube cluster addon list eine ganze Reihe Erweiterungen hinzufügen:

Diese werden mit nachfolgenden Befehl installiert:

Mac:# hetzner-kube cluster addon install [name]

Cluster löschen

Solltest du schließlich das Cluster nicht benötigen, so kannst du es mit einem einfachen Befehl löschen:

Mac:# hetzner-kube cluster delete my-k8s-cluster

Ein kleiner Hinweis: Um sicher zu gehen, dass alles gelöscht wurde, empfehle ich dir, alle Menüpunkte in der Cloud Konsole von Hetzner durchzusehen.


Foto: unsplash-logoJoseph Barrientos

Die mobile Version verlassen