Kubernetes Tutorial – Deinen ersten Docker-Container erstellen!
Container ist seit einigen Jahren ein beliebtes Buzzword:
Was verbirgt sich dahinter? Wie erstelle ich meinen ersten Container? … und funktioniert Kubernetes?
Das möchte ich in diesem Tutorial erklären.
Viel Spaß!
Ziel: Lokales Cluster erstellen
Wir wollen eine Node.js App auf einem lokalen Minikube-Cluster innerhalb von Windows erstellen.
Die Webseite soll einen einfachen String ausgeben. Wenn Du mehr über Node.js erfahren willst, probiere doch mal das hybride App-Framwork Ionic aus.
Deinen ersten Cluster mit Node.js
Voraussetzungen: Dein Wissen
- Etwas programmiert haben … mit Java, Python oder jede andere Programmiersprache
- Grundlagen der Kommando-Zeile (oder Du kopiert einfach die Befehle unten 🙂 )
- Admin-Reche, um Programme zu installieren und zu deinstallieren
Technische Voraussetzungen: Das brauchst Du für Dein erstes Kuberenetes Projekt
- Windows 10 / 7 Computer – Dieses Tutorial ist für Windows Computer ausgelegt
- Admin-Rechte
- Mehr als 5 GB RAM (besser 12 GB)
- Editor
Editor (Visual Studio Code)
Neben dem Browser brauchst Du einen Code-Editor Deiner Wahl. Notepad(++) kannst Du alternativ nutzen. Am besten verwendest Du einen Editor mit Syntax-Highlighten und IntelliSense wie z. B. Visual Studio Code.
Lösungsansatz: Grundlagen von Containern
Was zum Henker ist ein Container?
Wie funktioniert das mit Cluster und Virtualisierung?
Was ist ein Microservices?
Ein Microservices ist ein Architekturmuster, das die Service Oriented Architecture (SOA) umsetzt. Ein großes Programm, ein Monolith, teilt eine Microservice-Architektur in viele kleine unabhängige Programme und Instanzen auf.
Ein Mini-Programm soll nur EINE Aufgabe oder EINE Domäne (Aufgabenbereich) erfüllen.
Vorteile von Microservices
Bei der Service Oriented Architecture kann der Entwickler Microservices replizieren (ver-X-fachen), um …
- einen höheren Durchsatz (mehr Operationen, abgeschlossen Jobs pro Minute)
- eine hohe Verfügbarkeit des Gesamtsystems zu ermöglichen
- eine stabile Architektur zu schaffen
Ein wichtiges nicht funktionales Ziel eines Softwaresystems ist die (Hoch-)Verfügbarkeit zu erreichen. Die Umsetzung der Microservice-Architektur mit Replizierung schafft eine (Hoch-)Verfügbarkeit.
Eine Failure-Unit ist eine Instanz eines Microservices, der bei einem Crash im Code abstürzen kann. Bei einer losen Kopplung beeinflusst der Absturz einer einzelnen Failure-Unit das Gesamtsystem nicht
Continuous Integration / Continuous Development (CI / CD)
Continuous Integration und Continuous Development ist eine Softwareentwicklungsmethodik, die Entwickler sehr häufig bei der Entwicklung von Microservices verwenden.
Diese basiert auf dem Grundsatz:
Rolle in kleinen Iterationen die neuen Features der Software in wenigen Stunden
aus
Mit der Fertigstellung eines Features kann der CI-/CD-Prozess die alte veröffentliche Installation automatisch überschreiben.
Basics: Kubernetes Grundlagen verstehen
Wenn Du zum ersten Mal mit Kubernetes zu tun hast, dann laufen Dir eine Menge unbekannter Begriffe über den Weg.
Dieser Abschnitt soll die wichtigsten Konzepte / Begriffe so kurz wie möglich erklären.
Lese Dir den folgenden Abschnitt durch, um den Praxis-Teil besser zu verstehen.
Die Konzepte von Kubernetes
- Bei der Virtualisierung in Containern erhält ein Prozess eine komplett eigene Laufzeitumgebung zum Ausführen des Codes. Unterschiedliche Programme können sich mit der Containerisierung des Codes auf dem gleichen physisch Rechner ausführen.
- Ein Pod ist eine Art virtuelle Maschine, die alle technischen Hardware- und Software-Grundlagen zur Verfügung stellt, um Deinen Code zum Ausführen braucht.
- Ein Container kann ein oder mehrere Pods fassen und stellt eine Kubernetes-Instanz dar. Ein physischer Computer kann mehrere Container parallel betrieben. Diese Form von dynamischem Server-Betrieb ist ressourcenschonend.
Die Technik hinter Containern
- Die Hyper-V-Schicht liegt zwischen dem Betriebssystem der virtuellen Maschine und der Hardware. Mit Hyper-V, einen Virtual-Machine Monitor, kann der Nutzer für eine virtuelle Maschine die RAM-Größe und CPU-Last begrenzen.
- Namespace nennt sich ein virtuelles Cluster eines gleichen Prozesses. Kubernetes kann mehrere virtuelle Cluster auf einen physischen echten Computer ausführen.
- Ein Image ist ein Software-Paket bestehend aus Deinem Code und der Laufzeitumgebung.
Software-Projekte für Container
- Kubernetes verwaltet, erstellt, skaliert und automatisiert Container-Anwendungen. Die Anwendung hat Google ursprünglich für eigene Zwecke entworfen.
- Docker ermöglicht die Virtualisierung von Programmen und Betriebssystemen in Container.
- Helm ist das Node.js für Docker-Container. Helm stellt fertige Docker-Container zur Verfügung. Der Entwickler kann „auf die Schnelle“ eine fertige Laufzeitumgebung für Node.js erstellen, ohne viel konfigurieren zu müssen.
Coden: Ab in die Praxis
Jetzt wird’s ernst.
Wir erstellen mit diesen Schritten Deinen ersten Container.
Solltest Du stecken bleiben – dann schreibe einen Kommentar mit Deiner Fehlermeldungen unten in das Kommentar-Feld.
Was installieren wir in diesem Tutorial
- Kubernetes in Form von „Minikube“ innerhalb des Windows-Betriebssystems
- Hyper-V zur Virtualisierung
- Docker Desktop
Kubectl
– Die Kommando-Zeile von Kubernetes- js (innerhalb des Microservices)
Windows vorbereitet mit Hyper-V
- Öffne CMD mit Admin-Rechten
- Gebe
systeminfo
ein - Wenn nur “
Hyper-V Requirements: A hypervisor has been detected. Features required for Hyper-V will not be displayed.
” auftaucht, musst Du Hyper-V installieren. - [Nur wenn Hyper-V installiert werden muss] Suche in Windows nach Features hinzufügen und Windows öffnet Dir ein Auswahlfenster:
- Warte die Vorbereitungen der Installation ab (1-10 Min je nach Rechenleistung)
- Starte den Computer neu (3-20 Min je nach Rechenleistung). Der Computer „spielt Updates ein“, während dieser Hyper-V installiert.
Kubernetes / Minikube auf Windows installieren
- Downloade den Minikube Installer
- Führe das MSI von Minikube aus
- Öffne die CMD mit Deinen Admin-Rechten
- Installiere das Virtual Box Image mit
minikube start --vm-driver=hyperv
- Setze einen Standardtreiber mit
minikube config set vm-driver hyperv
Mehr Power mit Kubectl (Kubernetes-Kommandozeile)
- Downloade Dir die kubectl–Kommandozeile von Kubernetes als.exe.
- Setze den Windows Pfad für die .exe Datei, sodass Windows das Kommand
kubectl
mit der Konsole finden kann. Suche in Windows nach der Umgebungsvariable setzen. Gebe 2x unter Benutzer und System Path in einem neuen Eintrag ein. Der eingegebene Pfad sollte auf die .exe vonkubectl
zeigen.
C:\Users\<USER>\Downloads
- Logge Dich aus und wieder ein, um die Variablen zu setzten. (NICHT SPERREN UND ENTSPERREN – das bringt nichts)
- Öffne die CMD mit den Admin-Rechten und teste die Installation mit
kubectl version
Starte Minikube mitminikube start
(dauert 1–15 Min je nach Rechenleistung)
Docker Installation einfach erklärt
- Gehe auf
https://www.docker.com/
- Registriere Dich, um die Docker.exe zu downloaden.
- Downloade Dir den Docker Desktop
- Überspringe das Docker Tutorial, um an die .exe zu kommen.
- Wenn Du die .exe heruntergeladen hast, logge Dich in Docker im Windows Programm ein
- [automatisch mit Login] Docker logt Dich aus und wieder ein
- Öffne die CMD mit den Admin-Rechten und teste die Installation mit
docker –v
Node.js auf Kubernetes installieren
- Lege einen Ordner mit den Namen
helloKube
an - Öffne Visual Studio Code in diesem Ordner und erstelle eine helloServer.js
var http = require("http");
var handleRequest = function(request, response) {
console.log("Ich habe eine Anfragen von: " + request.url + "erhalten");
response.writeHead(200);
response.end("Hallo Welt - meiner erster Microservice funktioniert!");
};
var webserver = http.createServer(handleRequest);
webserver.listen(8080);
… und ein Docker-Image
FROM node:10
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD [ "node", "helloServer.js"]
- Öffne die GIT BASH mit den Admin-Rechten. Eine Git Bash erhältst Du mit Deiner Git Installation.
- Starte Minikube neu
minikube start
- Dann konfiguriere Minikube so
eval $(minikube docker-env)
- Erstelle eine Docker Image mit
docker build -t helloservernode .
(dauert 1–15 Min je nach Rechenleistung und Netzwerk)
- Installiere den Pod im Minikube
kubectl run hello-foo --image=helloservernode:latest --image-pull-policy=Never
- Wenn die Installation erfolgreich war, siehst Du mit
kubectl get deployments
alle Installationen auf dem Minikube - Um den Pod außerhalb des Containers mit dem Browser zu erreichen, müssen wir einen Service aufsetzen mit
kubectl expose deployment helloservernode --type=LoadBalancer --port=8080
- Mit
kubectl get services
siehst Du alle Services - Rufe
minikube service helloservernode
Dein Browser sollte sich öffnen und die Webseite http://172.17.17.189:30392/ zeigen
Fertig
Erweiterungen: Wie kann ich das Cluster erweitern?
Hast Du noch nicht genug von dem Kubernetes Tutorial?
Dann füge andere Cluster hinzu.
- Repliziere Deinen Container
- Installiere weitere Pods neben dem ersten
- Rufe das Kubernetes Dashboard auf
- Verbinde zwei Pods z. B. Node.js Frontend und Laravel Backend
- …
Fazit: Gratulation zu Deinem ersten Cluster
Container sind sehr vielseitig einsetzbar und skalieren gut.
Probiere Dich aus.
- Schreibt von Fehlermeldungen, die auftreten …
- Kritik mit Verbesserungsvorschlägen für das Tutorial …
- Installationsprobleme von Kuberenetes …
Danke. Ich freue mich auf Euer Feedback