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:
- Speicher: rook, openebs
- Package Manager: helm
- Kubernetes Dashboard, Hetzner Cloud Controller Manager
- docker-registry
- TLS Provisionierung: cert-manager
- Monitoring: Prometheus-Operator
- Load Balancer: nginx ingress
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: Joseph Barrientos