+49 521 96686-0 info@teuto.net

Kubernetes (k3s) Tutorial

Lightweight Kubernetes zum selber installieren

Ziel der Anleitung

Im Rahmen dieses Tutorials installieren wir einen k3s One-Node Cluster in der teutoStack Public Cloud. Auf diesem installieren wir anschließend das bekannte Content Management System WordPress und machen es weltweit verfügbar.

Wichtig: Arbeiten Sie zuvor bitte unbedingt die Anleitung zum Start von virtuellen Maschinen in der teutoStack Public Cloud durch. Unter Windows können Sie das Windows Subsystem für Linux einsetzen, um der Anleitung zu folgen. Wir empfehlen hierbei die Nutzung von Ubuntu.

Über K3S

Mit einer Größe von weniger als 40 MB, ist K3S eine leichtgewichtige und offiziell zertifizierte Kubernetes Distribution, die somit besonders geeignet für den Einsatz auf IoT & Edge Geräten ist. Damit Sie sich mit Umfang und Funktionsweise von K3S vertraut machen können, haben wir diese Anleitung für Sie entwickelt, mit der Sie unkompliziert einen voll funktionsfähigen Kubernetes Cluster in unserer OpenStack Public Cloud einrichten können.

Voraussetzungen

Die folgenden Voraussetzungen müssen erfüllt sein, um dieses Tutorial durchführen zu können:

  • Zugang zur Web-Oberfläche der teutoStack Public Cloud
  • Eine virtuelle Maschine mit mindestens einer vCPU (z.B. Standard 1.1905)
  • Floating IP (offizielle IP-Nummer) für die virtuelle Maschine
  • Privaten SSH-Schlüssel für den Zugriff auf die VM

Diese Themen werden in dieser Anleitung behandelt.

Installation kubectl

In diesem Abschnitt installieren wir das Tool kubectl auf unserem lokalen Rechner. kubectl ist meist eingesetzte Kommandozeilen-Werkzeug, mit dem Kubernetes Cluster verwaltet werden. Unter Ubuntu und Debian können Sie es installieren, indem Sie die folgenden Kommandos Zeile für Zeile in einem Terminal ausführen. Unter Windows öffnen Sie hierfür ein Kommandofenster für das Windows Subsystem für Linux.

Hinweis: Unter Linux benötigen Sie sudo-Rechte und unter Umständen Ihr Benutzerpasswort.

sudo apt-get update && sudo apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl

Quelle

Installation k3sup

Zunächst installieren wir lokal auf Ihrem Rechner das Tool k3sup. Mit diesem Tool können wir sowohl Kubernetes auf dem Server installieren, als auch Applikationen auf dem Kubernetes-Cluster bereitstellen.

Um Kubernetes zu installieren, öffnen wir ein Terminal auf unserem lokalen Rechner und führen die folgenden Kommandos Zeile für Zeile aus:

k3sup installieren
curl -sLS https://get.k3sup.dev | sh
sudo install k3sup /usr/local/bin/

k3sup --help

Wenn die Installation erfolgreich war, sehen Sie nach dem letzten Kommando den Hilfetext des Tools. Dieser sieht wie folgt aus:

k3sup --help
Usage:
  k3sup [flags]
  k3sup [command]

Available Commands:
  app         Install Kubernetes apps from helm charts or YAML files
  help        Help about any command
  install     Install k3s on a server via SSH
  join        Install the k3s agent on a remote host and join it to an existing server
  update      Print update instructions
  version     Print the version

Flags:
  -h, --help   help for k3sup

Use "k3sup [command] --help" for more information about a command.

Installation k3s-master

Da nun das Tool k3sup auf unserem lokalen Rechner installiert ist, können wir es auf diesem ausführen, um unseren k3s-master Knoten auf der virtuellen Maschine in der teutoStack Public Cloud einzurichten. Hierfür benötigen wir die Floating IP (offizielle IP-Nummer) der VM, die wir für den k3s-master Knoten vorgesehen haben. In der teutoStack Web-Oberfläche finden Sie diese Nummer im Untermenü Netzwerk unter dem Punkt Floating IPs. Suchen Sie hier nach der Zeile, die zu Ihrer k3s-master VM gehört.

cd [Ihr-Verzeichnis-mit-privatem-SSH-Schlüssel]

Ersetzen Sie im folgenden Kommando [Floating IP k3s-master] durch die Floating IP der k3s-master VM und [privater schlüssel] mit dem Pfad zu der Datei, die den privaten Schlüssel zu Ihrer VM enthält. Wenn Sie als Quelle für Ihre VM ebenfalls Ubuntu ausgewählt haben, ist ihr Username genau wie bei uns ubuntu.

k3sup install --ip [Floating IP k3s-master] --user ubuntu --ssh-key [privater schlüssel]

Hier sehen Sie einen Auszug der zur Installation des Master Knotens zugehörigen Ausgabe.

Installation k3s
k3sup install --ip 212.15.212.135 --user ubuntu --ssh-key k3s-master
Running: k3sup install
Public IP: 212.15.212.135
ssh -i k3s-master -p 22 ubuntu@212.15.212.135
ssh: curl -sLS https://get.k3s.io | INSTALL_K3S_EXEC='server  --tls-san 212.15.212.135 ' INSTALL_K3S_VERSION='v1.17.2+k3s1' sh -

[INFO]  Using v1.17.2+k3s1 as release
...

# Test your cluster with:
export KUBECONFIG=/<Pfad zu Ihrem aktuellen Verzeichnis>/kubeconfig
kubectl get node -o wide

Zudem legt k3sup für Sie eine kubeconfig Datei in dem Verzeichnis ab, von dem aus Sie das Tool aufgerufen haben. Diese Datei ermöglicht Ihnen den Zugriff auf Ihren Cluster und ist unbedingt vertraulich zu behandeln. Am Ende der vorangegangenen Ausgabe finden Sie die Zeile export KUBECONFIG=[…]. Kopieren Sie diese Zeile in Ihrem Terminalfenster und führen Sie das Kommando in selbigem aus, um die Datei kubeconfig für Tools wie kubectl und k3sup verfügbar zu machen. Diese prüfen automatisch, ob die Umgebungsvariable KUBECONFIG gesetzt ist und benutzen die in der kubeconfig enthaltenen Informationen, um auf den k3s Cluster zuzugreifen.

kubectl haben wir zu Beginn dieses Tutorials installiert. Damit kann jetzt die Verbindung zum Cluster getestet werden. Führen Sie das folgende Kommando aus:

export KUBECONFIG=/<Pfad zu Ihrem aktuellen Verzeichnis>/kubeconfig
kubectl get nodes

Die Ausgabe sollte der folgenden ähneln:

kubectl get nodes
NAME         STATUS   ROLES    AGE   VERSION
k3s-master   Ready    master   46m   v1.17.2+k3s1

Somit ist die Installation des k3s-master Knotens abgeschlossen.

Somit ist die Installation des k3s-master Knotens abgeschlossen.

Cluster grafisch untersuchen mit k9s

Mit dem Tool k9s können Sie Ihren Kubernetes Cluster analysieren und verwalten. Dabei steht Ihnen eine grafische Aufbereitung der Informationen zur Verfügung. Mit den folgenden Kommandos können Sie das Tool auf Ihrem lokalen Rechner installieren.

curl -sLS -o k9s_Linux_x86_64.tar.gz https://github.com/derailed/k9s/releases/download/v0.14.0/k9s_Linux_x86_64.tar.gz
tar xvzf k9s_Linux_x86_64.tar.gz
sudo mv ./k9s /usr/local/bin/

Da Sie zuvor die Umgebungsvariable KUBECONFIG gesetzt haben, hat k9s Zugriff auf Ihren Cluster. Schauen Sie sich an dieser Stelle gerne in Ihrem Kubernetes um.

Installation von Applikationen

Über das Tool k3sup können Sie eine Vielzahl von Applikationen mit sehr wenigen Kommandos installieren. Auf Grundlage einer Technologie namens Helm (Paketmanager für Kubernetes) können entsprechende Installationsvorlagen aus dem Internet bezogen und direkt angewendet werden. Diese Vorlagen werden auch Helm Charts genannt.

Die folgenden Applikationen werden direkt von k3sup unterstützt:

    openfaas
    nginx-ingress
    cert-manager
    openfaas-ingress
    inlets-operator
    metrics-server
    tiller
    linkerd
    cron-connector
    kafka-connector
    minio
    postgresql
    kubernetes-dashboard

Diese Apps können folgendermaßen installiert werden:

k3sup app install <app-name>

Zudem können Sie weitere Charts, die nicht in der vorherigen Liste aufgeführt sind, installieren. Dazu zählt auch WordPress. Unter https://hub.helm.sh/ finden Sie weitere Applikationen, die über das Helm Repository installiert werden können.

Installation WordPress

Wir verwenden für dieses Beispiel WordPress. Dafür führen Sie das folgende Kommando im Terminal auf ihrem lokalen Rechner aus:

k3sup app install chart --repo-name stable/wordpress --namespace wordpress

Wichtig ist zu beachten, dass ein Namespace gesetzt wird. Aktuell gibt es einen Bug in k3sup der verhindert das Apps so im default Namespace installiert werden können. Namespaces trennen den Kubernetes Cluster in logische Bereiche. Hier sehen Sie die Ausgabe zum vorherigen Kommando:

k3sup app install chart --repo-name stable/wordpress --namespace wordpress
Using kubeconfig: /home/ftb/Schreibtisch/quickstart/kubeconfig
Client: x86_64, Linux
2020/02/07 09:29:12 User dir established as: /home/ftb/.k3sup/
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "stable" chart repository
Update Complete.
Error from server (NotFound): namespaces "wordpress" not found
namespace/wordpress created
wrote /tmp/charts/chart/rendered/wordpress/charts/mariadb/templates/secrets.yaml
wrote /tmp/charts/chart/rendered/wordpress/templates/secrets.yaml
wrote /tmp/charts/chart/rendered/wordpress/charts/mariadb/templates/master-configmap.yaml
wrote /tmp/charts/chart/rendered/wordpress/charts/mariadb/templates/tests.yaml
wrote /tmp/charts/chart/rendered/wordpress/templates/pvc.yaml
wrote /tmp/charts/chart/rendered/wordpress/charts/mariadb/templates/master-svc.yaml
wrote /tmp/charts/chart/rendered/wordpress/templates/svc.yaml
wrote /tmp/charts/chart/rendered/wordpress/charts/mariadb/templates/test-runner.yaml
wrote /tmp/charts/chart/rendered/wordpress/templates/tests/test-mariadb-connection.yaml
wrote /tmp/charts/chart/rendered/wordpress/templates/deployment.yaml
wrote /tmp/charts/chart/rendered/wordpress/charts/mariadb/templates/master-statefulset.yaml
configmap/wordpress-mariadb created
statefulset.apps/wordpress-mariadb created
service/wordpress-mariadb created
secret/wordpress-mariadb created
pod/wordpress-mariadb-test-o08mv created
configmap/wordpress-mariadb-tests created
deployment.apps/wordpress created
persistentvolumeclaim/wordpress created
secret/wordpress created
service/wordpress created
pod/wordpress-credentials-test created
=======================================================================
chart stable/wordpress installed.
=======================================================================

Thanks for using k3sup!

WordPress ist nun installiert.

HTTP Port bei teutoStack freigeben

Wenn Sie in Ihrem Browser eine Internetseite aufrufen erfolgt dies üblicherweise über HTTP (Port 80) oder HTTPS (Port 443). Da wir noch kein HTTPS konfiguriert haben, werden Sie die WordPress-Seite über das HTTP Protokoll erreichen. Üblicherweise wird HTTP über den Port 80 kommuniziert. Dafür erweitern wir unsere default Sicherheitsgruppe entsprechend. Öffnen Sie in der teutoStack Web-Oberfläche über das Untermenü Netzwerk den Punkt Sicherheitsgruppen und klicken Sie in der Zeile der default Sicherheitsgruppe auf den Button Regeln verwalten.

Klicken Sie auf Regel hinzufügen

Wählen Sie für das Feld Regel den Wert HTTP aus und klicken Sie auf hinzufügen.

Nun erlaubt die Sicherheitsgruppe für alle Instanzen, die Mitglied sind, eingehenden Kommunikation auf Port 80. In einer produktiven Umgebung würde man den Zugriff auf das Minimum an Instanzen beschränken, die erreichbar sein sollen.

WordPress mit Ingress verfügbar machen

Der externe Zugriff auf den Port 80 ist konfiguriert. Dennoch ist es aktuell noch nicht möglich, die WordPress-Webseite aus dem Internet zu betrachten.

Um eine Anwendung, die im Cluster läuft, nach außen verfügbar zu machen, kann ein sogenannter Ingress verwendet werden. Ein Ingress ist eine Kubernetes-Ressource, die den externen Zugriff auf einen Service, basierend auf Hostnamen, ermöglicht. Dazu benutzen wir in diesem Beispiel den nginx-ingress.

Dieser lässt sich auch direkt über k3sup installieren.

Für die Installation führt man folgenden Befehl aus:

k3sup app install nginx-ingress

Um WordPress jetzt über den nginx-ingress verfügbar machen zu können, muss eine Ingress Ressource, die auf den Service von WordPress zeigt, auf dem Cluster angelegt werden.

In diesem Beispiel nutzen wir nip.io, um einen gültigen Hostnamen für unsere IP-Adresse zu haben. nip.io ist ein Dienst der Wildcard DNS für jede beliebige IP Adresse zur Verfügung stellt. Man hängt einfach .nip.io an die IP Adresse des Nodes an und schon kann man diese Domain für den Ingress nutzen.

Um die Ingress-Ressource anzulegen, erstellen Sie auf Ihrem lokalen Rechner eine leere Datei mit dem Namen wp-ingress.yaml und füllen Sie diese mit dem folgenden Inhalt:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: wp-ingress
spec:
  rules:
  - host: <Floating-IP>.nip.io # Hier muss die Floating IP eines Cluster-Knotens eingefügt werden!
    http:
      paths:
      - backend:
          serviceName: wordpress
          servicePort: 80

Ergänzen Sie in der Zeile, die mit – host: beginnt die Floating-IP der k3s-master Instanz. Behalten Sie den Zusatz .nip.io hinter der IP-Nummer unbedingt bei und speichern Sie die Datei.

Um diese Ingress-Ressource auf dem Cluster zu installieren, führen Sie den folgenden Befehl aus. Hierbei gehen wir davon aus, dass Sie sich nach wie vor in dem Verzeichnis befinden, in dem Sie auch die Datei wp-ingress.yaml angelegt haben.

kubectl apply -f wp-ingress.yaml -n wordpress

Der Abschnitt -f wp-ingress.yaml sagt dem Tool kubectl, dass es die zu installierende Ressource aus der Datei wp-ingress.yaml lesen soll. -n wordpress teilt dem Cluster mit, dass die Ressource im Namespace wordpress installiert werden soll.

Wichtig ist, dass der Ingress im selben Namespace wie der Rest von WordPress installiert wird. Um zu prüfen ob der Ingress wirklich angelegt wurde, kann man sich die Ingress Ressourcen im wordpress Namespace anzeigen lassen. Führen Sie dazu das folgende Kommando aus:

kubectl get ing -n wordpress

Die zugehörige Ausgabe ähnelt:

kubectl get ing -n wordpress
NAME         HOSTS                   ADDRESS       PORTS   AGE
wp-ingress   212.15.212.125.nip.io   172.16.0.22   80      5s

Nun kann WordPress unter der Adresse aufgerufen werden, die in der vorherigen Ausgabe unter HOSTS angezeigt wird. Beachten Sie, dass Ihre IP-Adresse von der in diesem Beispiel abweicht. 

Indem Sie an die URL Ihres WordPress /wp-admin anhängen, können Sie das WordPress Administrations-Backend ansteuern. Bei uns sieht die URL wie folgt aus:

http://212.15.212.125.nip.io/wp-admin

Wir haben jedoch an keinem Punkt der Installation ein Passwort gesetzt. Das wurde automatisch während der Installation erledigt.

Der Standard Nutzer ist user und das Passwort lässt sich folgendermaßen im Terminal ihres lokalen Rechners anzeigen:

kubectl get secret -n wordpress wordpress -o jsonpath="{.data.wordpress-password}" | base64 -d

Nun können Sie sich bei WordPress anmelden und Ihren Blog erstellen.

Zusammenfassung

Sie haben es geschafft! Mit k3sup ist es also möglich in kurzer Zeit und mit wenigen Kommandos einen voll funktionsfähigen Kubernetes-Cluster zu erstellen und Applikationen auf diesem zu betreiben.

 

 

Optional: Pods via port-forwarding lokal verfügbar machen

Sie können mit kubectl den Port eines Kubernetes Service im Cluster auf Ihren lokalen Rechner weiterleiten, wenn Sie beispielsweise die WordPress-Seite testen und bearbeiten wollen, ohne diese gleich weltweit verfügbar zu machen.

Die einfachste Möglichkeit ist mit kubectl den Port auf den lokalen Computer weiterzuleiten. Dazu nutzt man das port-forward Feature von kubectl. Das Vorgehen ist für Ihr Linux Terminal sowie für Ihr Terminal im Windows Subsystem für Linux gleich. Führen Sie das folgende Kommando auf Ihrem lokalen Rechner aus:

kubectl port-forward -n wordpress svc/wordpress 80:80

Nun kann man lokal im Browser unter folgender Adresse WordPress erreichen:

http://localhost:80