Kubernetes ist die beliebteste Open-Source-Software zur Automatisierung von Container-Entwicklungsprozessen.
Laut der jährlichen Studie der Cloud Native Computing Foundation (CNCF) verwenden 96 % der Unternehmen K8 oder erwägen deren Einsatz. Wenn Sie genau hinsehen, nutzen 5,8 Millionen Entwickler weltweit Kubernetes, das sind 31% der Backend-Entwickler auf der ganzen Welt.
Kubernetes wird bevorzugt, weil es die Technologie durch verbesserte Skalierbarkeit, Verfügbarkeit und kurze Bereitstellungszeiten besser nutzen kann. Während viele Entwickler ihre Containerkarriere mit Docker beginnen (ein umfassendes Tool, das sich auf die CLI stützt, um mit Containern zu interagieren), bietet Ihnen K8s Abstraktionen auf hoher Ebene, mit denen Sie Anwendungen und deren Infrastruktur anhand von Schemata definieren können, an denen Sie gemeinsam arbeiten können.
Wenn Sie Kubernetes noch nicht kennen, ist dieser Artikel speziell darauf zugeschnitten, Ihnen den Einstieg zu erleichtern und Einblicke zu geben, die Ihnen den Einstieg erleichtern. Sie erfahren, wie K8s Ihnen als Entwickler dabei helfen kann, Ihre digitalen Produkte zu verbessern.
Was ist Kubernetes, und warum brauchen Sie es?
Kubernetes ist eine Open-Source-Koordinations-Engine (Framework), die für die automatische Bereitstellung, Skalierung und Verwaltung von containerisierten Anwendungen eingesetzt wird; dazu gehört auch die Handhabung von Vorhersagbarkeit und Verfügbarkeit.
Stellen Sie sich einfach eine Anwendung vor, die Sie containerisiert haben. Um die Benutzer Ihrer Anwendung zu bedienen, müssen Sie mehrere Container laufen lassen. Die Sorge beginnt, wenn Sie diese Container verwalten müssen. Die Container befinden sich nicht unbedingt auf demselben Rechner, was die Sache noch komplizierter macht. Was ist also die Lösung für dieses Problem?
Kubernetes kommt Ihnen zu Hilfe, indem es eine effiziente Möglichkeit bietet, all diese Prozesse nahtlos abzuwickeln. Sie können K8s zwar mit einer Container-Engine wie Docker vergleichen, aber es ist ein Container-Orchestrator. Als Entwickler müssen Sie sich nicht darum kümmern, wie K8s die Orchestrierung vornimmt. Sie werden wahrscheinlich keinen K8s-Cluster für Ihre Anwendung einrichten; dazu gleich mehr.
Allerdings werden Sie mit Clustern interagieren, die Ihr Infrastrukturteam eingerichtet hat. Es ist wichtig, dass Sie sich mit den Objekten, mit denen Sie interagieren werden, vertraut machen. Aber bevor Sie das tun, brauchen Sie ein grundlegendes Verständnis der Architektur, um zu verstehen, was darunter passiert.
Funktionen von Kubernetes
Kubernetes verfügt über mehrere Funktionen mit einem breiten Spektrum an Möglichkeiten für den Betrieb von Containern und anderer zugehöriger Infrastruktur. Hier ist eine Liste:
- Automatisierte Rollouts, Skalierung und Rollbacks – K8s erstellt roboterhaft die von Ihnen angegebene Anzahl von Replikaten, verteilt sie auf die geeignete (am besten geeignete) Hardware und plant Container neu, wenn ein Knoten ausfällt. Sie können Ihre Replikate sofort skalieren, je nach Bedarf oder wechselnden Anforderungen wie der CPU-Auslastung.
- Service-Erkennung, Laststabilisierung und Netzwerkzugang – Kubernetes bietet eine einzigartige Netzwerklösung, einschließlich der internen Service-Erkennung und der Freigabe öffentlicher Container.
- Anwendungen mit und ohne Zustand – In den ersten Tagen konzentrierte sich K8s hauptsächlich auf zustandslose Container. Da sich die Technologie an vielen Fronten weiterentwickelt, bietet sie jetzt integrierte Objekte, die zustandsabhängige Anwendungen darstellen. Ratifiziert kann jede Anwendung auf Kubernetes laufen.
- Speicherregelung – Ob auf einem lokalen Dateisystem, einer Netzwerkfreigabe oder in der Cloud, Kubernetes bietet (abstrahiert) persistenten Speicher für Anwendungen, die auf Containern laufen. Und diese Abstraktion ermöglicht es Ihnen, Speicheranforderungen unabhängig von der zugrunde liegenden Infrastruktur zu definieren. Das würde zwar den Rahmen dieses Artikels sprengen, aber es funktioniert über Prinzipien wie Persistent Volume (PV), Persistent Volume Claim (PVC), Speicherklassen und Volume Plugins.
- Deklarativer Zustand – K8s verwendet Yet Ain’t Markup Language (YAML)-Dateien, so genannte Objektmanifeste, um den gewünschten Zustand Ihres Clusters festzulegen. Die Manifeste legen fest, wie Ihr Cluster aussieht, einschließlich, aber nicht beschränkt auf die gewünschten Anwendungsinstanzen und Netzwerkregeln sowie andere Konfigurationen. Wenn Sie Manifeste anwenden, verwaltet K8s automatisch alle Zustandsübergänge – Sie müssen also keine Skripte dafür schreiben.
- Mehrere Arbeitsumgebungen – Sie sind nicht darauf beschränkt, Kubernetes in der Cloud oder auf Ihrer Entwickler-Workstation zu verwenden. Es gibt fast jede Distribution, die für Ihren speziellen Anwendungsfall geeignet ist. Achten Sie auf die großen Cloud-Technologieanbieter wie Amazon Web Services, Google Cloud und Microsoft Azure. Sie werden feststellen, dass sie alle verwaltete Kubernetes-Dienste anbieten, während Einzelknoten-Distributionen wie Minikube und K3s für die lokale Nutzung verfügbar sind.
- Superextensivität – K8s ist eine Sammlung von vielen Funktionen. Und als ob das noch nicht genug wäre, können Sie seine Fähigkeiten mit Erweiterungen beschleunigen. Sie können benutzerdefinierte Objekttypen, Operatoren und Controller erstellen, um Ihre Workloads zu optimieren.
Kubernetes Architektur
Im Kern besteht die Kubernetes-Architektur aus einem einzigen Master-Knoten und zwei Worker-Knoten. Der Master-Knoten gibt im Cluster den Ton an, während die Worker-Knoten (Slave-Knoten) die Anwendungen gemäß der Entscheidung des Masters ausführen.
Hier ist eine weitere Aufschlüsselung.
Der/die Master-Knoten
Der Master-Knoten gibt den Zustand des Clusters vor und entscheidet über die Aktionen der einzelnen Knoten. Für die Einrichtung des Masterknotens sind mehrere Prozesse erforderlich.
- API-Server
Die gesamte Clusterkommunikation findet hier statt. Er ist das Gateway, über das alle Clusterkomponenten Informationen austauschen können. Er stellt die Kubernetes-API zur Verfügung. Hier gibt es zwei Hauptfunktionen. Die erste ist ein Einstiegspunkt, der es Benutzern ermöglicht, mit dem Cluster zu interagieren. Zum Beispiel das Senden von Requ5ests, wenn Sie Kubectl verwenden. Zweitens: Gatekeeping zur Authentifizierung und Validierung von Anfragen. In diesem Fall können nur bestimmte Benutzer Anfragen ausführen. - Planer
Der Scheduler weist dem Arbeitsknoten Anwendungen oder Kubernetes-Workload-Objekte zu. Hier platziert der Scheduler Pods auf der Grundlage des Ressourcenbedarfs auf den Nodes. Und wenn Sie von Pods sprechen, ist das nur eine kleine Einheit für die Bereitstellung in Kubernetes. - Controller-Manager
Diese Einheit verwaltet Cluster wie z.B. Knotenausfälle, um die korrekte Anzahl von Pods zu erhalten. Sie erkennt Änderungen des Clusterzustands, wie z.B. das Sterben von Pods, und versucht, den Pod wieder in seinen ursprünglichen Zustand zu versetzen. Wenn z.B. ein Pod versehentlich stirbt, fordert der Controller Manager den Scheduler auf, zu ratifizieren, welcher Knoten einen neuen Pod als Ersatz hochfährt, und kubelet fährt einen neuen Pod hoch. - etcd
Es wird auch als das Gehirn des Clusters bezeichnet. Die Einheit ist ein Schlüsselwertspeicher für die Clusterkonfiguration. Das bedeutet, dass alle Änderungen am Cluster hier vorgenommen werden. Sie können ein Backup eines Clusters erstellen, indem Sie den verteilten Schlüsselwertspeicher speichern. Beachten Sie jedoch, dass hier nur Cluster-Statusdaten gespeichert werden, keine Anwendungsdaten. Diese Einheit ist speziell dafür gedacht, Informationen über den Cluster-Status zu speichern und sie den vorhergehenden Prozessen zur Verfügung zu stellen, damit diese über den Cluster informiert werden.
Der/die Slave-Knoten
Jeder Slave-Knoten wird mit drei Knotenprozessen installiert, die es K8s ermöglichen, mit ihm zu interagieren und Pods in jedem Knoten separat zu starten. Die erforderlichen Prozesse sind:
- Kubelet
Dies ist der primäre Dienst von Kubernetes, der die Ausführung für die Container-Ausführungsschicht übernimmt. Wenn Sie diese Einheit herausnehmen, ist Kubernetes nichts anderes als eine REST-API, die mit einem Key-Value-Store ausgestattet ist. Standardmäßig führt K8s die Container-Anwendung aus. Container sind immer voneinander und vom zugrunde liegenden Hostsystem isoliert. Dies hat sich als analytisch erwiesen, um die Verwaltung einzelner Anwendungen voneinander und von der physischen oder virtuellen Infrastruktur zu entkoppeln.
Während die API-Zulassungskontrolle Pods ablehnen oder zusätzliche Einschränkungen hinzufügen kann, entscheidet kubelet letztendlich darüber, welche Pods auf einem bestimmten Knoten ausgeführt werden, nicht Scheduler oder Daemonsets. Zusammenfassend lässt sich sagen, dass kubelets mit dem Knoten und dem Container interagieren. Es nimmt auch Konfigurationsdateien entgegen und startet Pods mithilfe der Container-Laufzeit. - Container-Laufzeit
Dieser Abschnitt führt Container aus. Sie können z.B. Docker, rkt oder conatinered verwenden. Mehr zur Funktionsweise von Containern erfahren Sie im Abschnitt. - Kube-Proxy
Diese Einheit stellt eine Abstraktionsschicht für Node-Pod-Gruppen unter gemeinsamen Richtlinien bereit, wie es beim Lastausgleich der Fall ist. Alle Knoten verwenden Kube-proxy, um eine virtuelle IP-Adresse für Clients bereitzustellen, die auf dynamische Pods zugreifen. Diese Struktur ist die Lösung für den Lastausgleich bei gleichzeitig geringem Leistungs-Overhead.
Wie Containerisierung funktioniert
Bei der Containerisierung werden alle benötigten Teile einer Softwareanwendung in einer Einheit virtualisiert. Unter den Containern befindet sich eine Sammlung von Bibliotheken, Binärdateien und allen erforderlichen Anwendungskonfigurationen. Sie enthalten jedoch keine Kernel-Ressourcen oder virtualisierte Hardware.
Letzten Endes werden Container-Laufzeiten ausgeführt, die die Ressourcen umreißen. Da Container nur die grundlegenden Komponenten und Anwendungsabhängigkeiten enthalten, sind sie im Gegensatz zu anderen virtuellen Maschinen leichtgewichtig und daher schneller.
Lesen Sie auch: Container vs. Virtuelle Maschinen: Erklären Sie die Unterschiede
Wie man Kubernetes installiert und einrichtet
Ich habe so viel Zeit damit verbracht, theoretisch zu sein; der Abschnitt über Kubernetes wird taktisch sein und einige praktische Erfahrungen mit Containern beinhalten. Diese Anleitung behandelt insbesondere die Installation unter dem Betriebssystem Windows.
Es gibt mehrere Möglichkeiten, Installationen unter Windows durchzuführen; Sie können sich für die Befehlszeile oder die grafische Benutzeroberfläche entscheiden. Sie sollten jedoch sicherstellen, dass Sie die folgenden Voraussetzungen erfüllen.
Ihre Hardware benötigt einen Master-Knoten mit mindestens 2 GB Speicher und 700 MB für den Worker-Knoten. Für die Softwareanforderungen benötigen Sie Hype-v, Docker für Desktop, eine eindeutige Mac-Adresse und eine eindeutige Produkt-UUID für jeden Knoten. Hier ist die schrittweise Vorgehensweise.
Installieren und Einrichten von Hyper-V
Hyper-V ist die Standard-Virtualisierungssoftware von Windows. Im Grunde ist es eine VirtalBox auf Steroiden. Damit können Sie virtuelle Maschinen entweder über die Microsoft GUI oder die Befehlszeile verwalten. Um Hyper-V zu aktivieren, gehen Sie folgendermaßen vor.
- Öffnen Sie die Systemsteuerung.
- Klicken Sie in der linken Leiste auf Programme.
- Klicken Sie auf der Seite “Programme und Funktionen” auf “Windows-Funktionen ein- oder ausschalten”
- Wählen Sie Hyper-V und Hypervisor-Funktionen für Windows.
- Wählen Sie bei diesem Schritt “OK”; Ihr Rechner sollte neu starten, um die neuen Einstellungen zu aktivieren.
Es kann vorkommen, dass Ihr PC mehrmals neu gestartet wird, um sicherzustellen, dass alles richtig konfiguriert ist. Sie können den Erfolg der Installation überprüfen, indem Sie den folgenden Befehl in der Power Shell eingeben.
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V
Vergewissern Sie sich, dass auf Ihrem Bildschirm der Status 'aktiviert
‘ angezeigt wird.
Installieren von Docker
Wie Sie bereits gelernt haben, ist K8s ein Container-Orchestrierungstool, das auf Containern aufbaut; in diesem Fall ist Docker eine gute Wahl. K8s kommuniziert mit Docker und verwaltet alles auf Unternehmensebene. Laden Sie Docker für Windows herunter und legen Sie los. Falls Sie sich fragen, warum Sie Docker Desktop verwenden sollten: Docker Desktop wird bevorzugt eingesetzt, um die Entwicklung, den Versand und die Ausführung von Docker-Anwendungen (in Containern) zu vereinfachen.
Es ist auch der schnellste Weg, um Docker-Anwendungen unter Windows mit Hyper-V und Netzwerken zu erstellen. Nach erfolgreicher Installation ist Docker immer auf jedem Terminal zugänglich, solange es läuft. Eine detaillierte Anleitung zur Installation finden Sie in der offiziellen Docker-Dokumentation. Sollten nach der Installation Probleme auftreten, wie z.B. ausgeblendete Symbole, kann das Problem durch einen Neustart Ihres Rechners behoben werden.
Installation von Kubernetes
Mit der Docker-GUI können Sie Einstellungen konfigurieren, Kubernetes installieren und aktivieren. Um K8s zu installieren, gehen Sie folgendermaßen vor.
- Klicken Sie mit der rechten Maustaste auf das Docker-Tray-Symbol und wählen Sie Eigenschaften.
- Wählen Sie “Einstellungen” aus dem Dropdown-Menü, nachdem Sie auf “Eigenschaften” geklickt haben.
- Wählen Sie auf der linken Seite “Kubernetes” und klicken Sie auf “Anwenden”.
Docker wird dann einige zusätzliche Pakete und Abhängigkeiten installieren. Der Vorgang dauert etwa fünf bis zehn Minuten, je nach Ihrer Internetgeschwindigkeit. Sie können die Docker-App verwenden, um zu überprüfen, ob alles korrekt funktioniert.
Da Kubernetes-Apps über die CLI bereitgestellt werden können, müssen Sie möglicherweise das K8s-Dashboard installieren, da es nicht standardmäßig installiert ist. Installieren Sie das Dashboard anhand der folgenden Schritte.
- Laden Sie die YAML-Konfiguration herunter.
- Stellen Sie die Anwendung mit diesem Code bereit:
.
Kubectl apply -f .\recommended.yaml
. - Bestätigen Sie, dass alles richtig eingestellt ist, indem Sie:
kubectl.exe get -f .\recommended.yaml.txt
.
Um auf das Dashboard zuzugreifen, führen Sie den folgenden Befehl in der Power Shell (nicht CMD) aus
- Führen Sie den folgenden Code aus
((kubectl -n kube-system describe secret default | select-string "token:") - split " ")[1]
- Kopieren Sie das generierte Token und führen Sie
kubectl proxy
aus.
- Kopieren Sie das generierte Token und führen Sie
- Öffnen Sie in Ihrem Browser
http://localhost:8001/api/v1/namspaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/.
- Klicken Sie auf `Token` und fügen Sie Ihr Token hier ein.
- Melden Sie sich an.
Wenn Sie es bis hierher geschafft haben, sollte Ihr Bildschirm mit dem K8s-Dashboard gefüllt sein. Jetzt können Sie Ihre Apps verwalten, ohne sich die Mühe zu machen, die CLI zu benutzen.
Lesen Sie auch: Wie Sie Kubernetes unter Ubuntu 18 installieren
Wie Sie einen Kubernetes-Cluster erstellen und verwalten
Wenn Sie bis hierhin durchgehalten haben, sollten Sie Kubernetes erfolgreich auf Ihrem Host installiert haben. Führen Sie als nächstes die folgenden Schritte aus, um Ihren Cluster zu erstellen und einfach zu verwalten:
- Konfigurieren Sie das Netzwerk – Hier müssen Sie das Netzwerk zwischen den Cluster-Knoten einrichten, damit diese miteinander kommunizieren können.
- Cluster-Authentifizierung einrichten – Erstellen Sie Authentifizierungs- und Autorisierungsmechanismen für den Cluster-Zugriff.
- Einrichten der Master-Komponenten; dazu gehören API-Server, Scheduler und Controller Manager.
- Arbeiterknoten verbinden – Verbinden Sie Arbeiterknoten mit dem Cluster unter Verwendung von Konfigurationsdateien, die bei der Cluster-Einrichtung bereitgestellt werden.
- Bereitstellen von Add-ons – Sie können Erweiterungen installieren, um die Funktionalität des Clusters zu verbessern.
- Workloads verwalten – Es ist an der Zeit, dass Sie Ihre Anwendungen bereitstellen.
Dies ist zwar nur ein Überblick über den Prozess der Cluster-Erstellung, aber er umfasst viele Schritte mit mehreren Befehlen. Hier finden Sie den offiziellen Dokumentationsleitfaden zur Erstellung von Clustern vor der Bereitstellung. Sie sollte Ihnen als Leitfaden dienen.
Wie Sie Ihre erste Anwendung mit Kubernetes bereitstellen
Der häufigste Befehl bei der Verwendung von K8s ist kubectl action resource
, mit dem Sie bestimmte Aktionen wie das Erstellen oder Löschen einer bestimmten Ressource durchführen können.
Wenn Sie nicht weiterkommen, können Sie --help
nach einem bestimmten Unterbefehl verwenden, um zusätzliche Informationen zu erhalten.
Zum Beispiel: Kubernetes get nodes --help
. Stellen Sie Ihre erste K8s-Anwendung mit dem Befehl kubectl create deployment Kubernetes-bootcamp -image=gcr.io/google-samples/Kubernetes-bootcamp:v1
bereit.
Letzte Worte
Dieser Leitfaden war ein Einstieg in die Kubernetes-Technologie. Sie haben die Vorteile, die Funktionen und die Architektur von Kubernetes kennengelernt. Glücklicherweise mussten Sie vielleicht ein paar Hinweise (externe Ressourcen) zu Rate ziehen, um loszulegen; es wurde erklärt, wie die Dinge unter der Haube funktionieren.
Auch wenn es überwältigend erscheinen mag, als Anfänger den gesamten technischen Stack zu erfassen, war dieser Beitrag ein reibungsloser Leitfaden für Ihren Einstieg in K8s. Sie werden ein wenig Übung brauchen, um sich im Umgang mit dieser Technologie zurechtzufinden, daher verweise ich Sie auf die offizielle Kubernetes-Dokumentation, die Ihnen als Nachschlagewerk dient. Je mehr Übung Sie haben, desto schneller werden Sie zu einem Experten für K8s.