10 Mai 2022

Minikube ohne Virtualisierungslayer betreiben

Minikube ist eine der komfortabelsten Möglichkeiten um ein Kubernetes lokal als virtuelle Maschine zu nutzen.
Es ist jedoch auch möglich mittels Minikube ein Kubernetes-Cluster auf einem Host bereitzustellen und zu betreuen ohne auf separate Virtualisierung zurückgreifen zu müssen.
Hierzu gibt es die Möglichkeit Minikube lokal zu installieren und per SSH auf einen Host zuzugreifen, oder Minikube auf einem remote-Host zu installieren und alle notwendigen Schritte lokal auszuführen.
In diesem Beitrag wird sich auf die lokale Installation auf einem remote-Host fokussiert, die Methode per SSH wird ggf. in einem späteren Beitrag genauer beleuchtet.

 

Installation von Minikube

Benötigt wird ein Linux-Host und eine funktionierende Docker-Umgebung. Das Minikube Binary in der aktuellen Version kann von Github bezogen werden.
Die Installation ist dann entweder rein mit dem Binary unter einem eigens gewähltem Pfad oder mittels bereitgestellter .deb- oder .rpm-Pakete möglich. Hierbei gibt es generell keine Vorzüge, sondern die Einrichtungsmethode ist den eigenen Vorgaben und Vorlieben überlassen.
Weitere Details zur Installation des Minikube-binaries finden sich in der Dokumentation
Ergänzend sei noch angemerkt dass die Docker-Umgebung für das Kubernetes-Cluster nicht zwingend benötigt wird, jedoch der von Minikube präferierte Weg ist.
Um später mindestens lokal mit dem Kubernetes-Cluster zu sprechen kann auch optional noch kubectl installiert werden.

 

Installation des Minikube Clusters

Minikube nutzt verschiedene Driver um das Cluster bereitzustellen. Neben den gängigen für z.B. KVM oder VirtualBox gibt es ebenso Driver für Docker, podman (experimentell) oder Bare-Metal Installation.
Alle weiteren Schritte sollten nun nicht als root-Nutzer sondern einem normalen Nutzer der der Docker-Systemgruppe zugehörig ist durchgeführt werden.
Da es sich anbietet den präferierten Treiber als Standard für alle zukünftigen Aufrufe zu setzen ist der erste Aufruf `minikube config set driver docker`.
Andernfalls müsste bei jedem Aufruf von Minikube der Driver neu angegeben werden. So ist die Wahl persistiert.

Mittels minikube start kann nun das Cluster angelegt werden. Die Ausgabe sollte dabei ähnlich aussehen wie folgt:

$ minikube start
😄 minikube v1.25.1 on Debian 11.2 (kvm/amd64)
✨ Using the docker driver based on user configuration
👍 Starting control plane node minikube in cluster minikube
🚜 Pulling base image ...
💾 Downloading Kubernetes v1.23.1 preload ...
> preloaded-images-k8s-v16-v1...: 504.42 MiB / 504.42 MiB 100.00% 18.54 Mi
> gcr.io/k8s-minikube/kicbase: 378.98 MiB / 378.98 MiB 100.00% 9.00 MiB p/
🔥 Creating docker container (CPUs=2, Memory=2200MB) ...
🐳 Preparing Kubernetes v1.23.1 on Docker 20.10.12 ...
▪ kubelet.housekeeping-interval=5m
▪ Generating certificates and keys ...
▪ Booting up control plane ...
▪ Configuring RBAC rules ...
🔎 Verifying Kubernetes components...
▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟 Enabled addons: default-storageclass, storage-provisioner
💡 kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
Die Umgebung für kubectl wird automatisiert gesetzt und so ist das Cluster direkt ansprechbar und kann genutzt werden.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane,master 5m37s v1.23.1

Umsetzung

Bei der Installation des Clusters wird von Minikube ein einzelner Container bezogen und gestartet welche die komplette Laufzeitumgebung und alle Komponenten eines Kubernetes-Clusters enthält.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gcr.io/k8s-minikube/kicbase v0.0.29 64d09634c60d 7 weeks ago 1.14GB

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2c71b139a989 gcr.io/k8s-minikube/kicbase:v0.0.29 "/usr/local/bin/entr…" 8 minutes ago Up 8 minutes 127.0.0.1:49157->22/tcp, 127.0.0.1:49156->2376/tcp, 127.0.0.1:49155->5000/tcp, 127.0.0.1:49154->8443/tcp, 127.0.0.1:49153->32443/tcp minikube

Tatsächlich basiert die Lösung auf „Docker-in-Docker“, da hier innerhalb des laufenden Containers eine Instanz von containerd mit eigenen Containern gestartet wird. Inklusive SSH-Daemon.
root 5453 1 0 04:00 ? Sl 0:00 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 2c71b139a989e330c4fa0a481089975e73cebe4da9357cc93693f589fe0b1b07 -address /run/containerd/containerd.sock
root 5472 5453 0 04:00 ? Ss 0:00 \_ /sbin/init
root 5648 5472 0 04:00 ? S<s 0:00 \_ /lib/systemd/systemd-journald
108 5703 5472 0 04:00 ? Ss 0:00 \_ /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root 5712 5472 0 04:00 ? Ssl 0:00 \_ /usr/bin/containerd
root 5728 5472 0 04:00 ? Ss 0:00 \_ sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root 6014 5472 1 04:00 ? Ssl 0:05 \_ /usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --default-ulimit=nofile=1048576:1048576 --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/serve
root 6862 5472 0 04:00 ? Sl 0:00 \_ /usr/bin/containerd-shim-runc-v2 -namespace moby -id 3aef652075c239c22d5a017717179e7a860c0035a7b846f34bf77d05e18fadf6 -address /run/containerd/containerd.sock
65535 6950 6862 0 04:00 ? Ss 0:00 | \_ /pause
...
Beim Start des Containers werden auch verschiedene Ports auf dem Host geöffnet die eine Kommunikation mit dem Container erlauben. Die wichtigsten sind hierbei die folgenden:
  • 22 -> SSH
  • 2376 -> Docker TCP/IP
  • 8443 -> Kubernetes API
Der Container kann also via SSH ganz normal betreten werden. Nutzer und Passwort sind hier beide `root`.
Über den Docker TCP/IP Socket lassen sich Container auch remote administrieren und einsehen.
Wichtig wäre hier, das beim Anlegen des Container die Ports auf random-Host-Ports verteilt werden. In der von Minikube eingerichteten kubeconfig ist das bereits berücksichtigt, für andere Tools müssen die neuen Ports angegeben werden. Tools wie Helm, welche die aktuelle kubeconfig nutzen, sind hiervon natürlich nicht betroffen.
Wichtig für die Administration ist natürlich auch, dass diese Ports ggf. in der Firewall freigegeben werden müssen.

Fazit

Die Lösung mittels Docker-Deployment ist eine schnell erledigte und einfach zu wartende Möglichkeit um ein Minikube-System auch zentral für verschiedene Nutzer zur Verfügung zu stellen.
Natürlich gibt es hier unter `minikube start –help` noch diverse Optionen um die Bereitstellung des Clusters zu beeinflussen. Hier sollte in erster Linie nur ein allgemeine Einblick in die Funktion gegeben werden.

Wir unterstützen Sie gerne

Ob Docker, Minikube oder Kubernetes: mit über 22+ Jahren an Entwicklungs- und Dienstleistungserfahrung im Open Source Bereich, kann die credativ GmbH Sie mit einem beispiellosen und individuell konfigurierbaren Support professionell begleiten und Sie in allen Fragen bei Ihrer Open Source Infrastruktur voll und ganz unterstützen.

Sie haben Fragen zu unserem Artikel oder würden sich wünschen, dass die Spezialisten von credativ sich eine andere Software ihrer Wahl angucken?
Dann schauen Sie doch vorbei und melden sich über unser Kontaktformular oder schreiben uns eine E-mail an info@credativ.de.

Über credativ

Die credativ GmbH ist ein herstellerunabhängiges Beratungs- und Dienstleistungsunternehmen mit Standort in Mönchengladbach. Seit dem erfolgreichen Merger mit Instaclustr 2021 ist die credativ GmbH das europäische Hauptquartier der Instaclustr Gruppe.

Die Instaclustr Gruppe hilft Unternehmen bei der Realisierung eigener Applikationen im großen Umfang dank Managed-Plattform-Solutions für Open Source Technologien wie zum Beispiel Apache Cassandra®, Apache Kafka®, Apache Spark™, Redis™, OpenSearch™, Apache ZooKeeper™, PostgreSQL® und Cadence.
Instaclustr kombiniert eine komplette Dateninfrastruktur-Umgebung mit praktischer Expertise, Support und Consulting um eine kontinuierliche Leistung und Optimierung zu gewährleisten. Durch Beseitigung der Komplexität der Infrastruktur, wird es Unternehmen ermöglicht, ihre internen Entwicklungs- und Betriebsressourcen auf die Entwicklung innovativer kundenorientierter Anwendungen zu geringeren Kosten zu konzentrieren. Zu den Kunden von Instaclustr gehören einige der größten und innovativsten Fortune-500-Unternehmen.

Kategorien: credativ® Inside

über den Autor

Danilo Endesfelder

Berater

zur Person

Danilo ist seit 2016 Berater bei der credativ GmbH. Sein fachlicher Fokus liegt bei Containertechnologien wie Kubernetes, Podman, Docker und deren Ökosystem. Außerdem hat er Erfahrung mit Projekten und Schulungen im Bereich RDBMS (MySQL/Mariadb und PostgreSQL<sup>®</sup>). Seit 2015 ist er ebenfalls im Organisationsteam der deutschen PostgreSQL<sup>®</sup> Konferenz PGConf.DE.

Beiträge ansehen


Beitrag teilen: