Einführung
Kubernetes ist ein Open-Source-Tool, das eine entscheidende Rolle bei der Container-Orchestrierung spielt. Kubernetes funktioniert durch die Orchestrierung und Verwaltung von Clustern in großem Maßstab über verschiedene Cloud-Umgebungen oder sogar On-Premise-Server hinweg. Ein Cluster ist eine Gruppe von Hosts, die für die Ausführung von containerisierten Anwendungen und Diensten gedacht sind. Ein Cluster benötigt mindestens zwei Nodes, um zu funktionieren – einen Master -Node und einen Worker -Node. Mit Blick auf die Skalierbarkeit haben Sie die Möglichkeit, das Cluster um so viele Worker-Nodes wie erforderlich zu erweitern.
Ein Node in Kubernetes bezieht sich auf einen Server. Ein Master-Node ist ein Server, der den Zustand des Clusters verwaltet. Worker-Nodes sind Server, auf denen die Workloads ausgeführt werden – dies sind in der Regel containerisierte Anwendungen und Dienste.
Diese Anleitung führt Sie durch die Schritte zur Installation und Bereitstellung eines Kubernetes-Clusters bestehend aus zwei Nodes auf Ubuntu 20.04. Wie bereits erwähnt, ist die Verwendung von zwei Nodes die grundlegendste Konfiguration bei der Arbeit mit Kubernetes. Sie haben auch die Möglichkeit, weitere Worker-Nodes hinzuzufügen, sobald Sie die Grundlagen verstanden haben. Wir werden Ihnen außerdem zeigen, wie Sie die beiden Server verbinden, damit der Master-Node den Worker-Node steuern kann.
Um unsere Konfiguration zu testen, werden wir einen Docker-Container, auf dem der Nginx-Webserver läuft, im Cluster bereitstellen. Dies ist eine typische Praxisanwendung von Kubernetes. Sie werden im weiteren Verlauf mehr über einige definierende Komponenten von Kubernetes wie kubectl und kubeadm erfahren. Es ist auch ratsam, sich zuerst mit unserem Tutorial zum Thema Kennenlernen der Grundlagen des Kubernetes-Toolkits vertraut zu machen, um sich mit den Grundlagen der Kubernetes-Plattform vertraut zu machen.
Jetzt legen wir los!
Voraussetzungen
Sie müssen zwei Server bereitstellen, die auf Ubuntu 20.04 laufen. Für die beste Leistung betragen die Mindestsystemanforderungen für Kubernetes 2 GB RAM und 2 CPUs. Sie können den Schritten 1 bis 4 dieser Schritt-für-Schritt-Anleitung zur Einrichtung Ihres Ubuntu-Servers auf CloudSigma folgen. Ein Server wird der Master-Node sein, der andere der Worker-Node. Wir haben unsere beiden Server passenderweise als kubernetes-master und kubernetes-worker benannt. Dies macht es einfacher, dem Tutorial zu folgen. Es steht Ihnen jedoch frei, die von Ihnen bevorzugten Hostnamen zu wählen.
-
Stellen Sie sicher, dass Sie auf beiden Nodes einen Benutzer mit sudo-Rechten hinzufügen, den wir zur Ausführung der Befehle wie im obigen Tutorial beschrieben verwenden werden. Folgen Sie dieser Anleitung zur Konfiguration der Linux-sudoers-Datei für entsprechende Anweisungen.
-
Netzwerkkonnektivität – die Server im Cluster sollten miteinander kommunizieren können. Wenn Sie Ihre VMs von CloudSigma bereitstellen, sind diese standardmäßig mit einer öffentlichen IP mit dem Internet verbunden. Wenn Sie in einem lokalen Netzwerk arbeiten, müssen Sie möglicherweise die Datei /etc/hosts auf jedem Server bearbeiten und sie entsprechend verknüpfen.
-
Sie müssen Docker auf jedem der Nodes installieren und aktivieren. Kubernetes ist auf eine Container-Runtime angewiesen, um Container in Pods auszuführen. Obwohl andere Container-Plattformen zur Auswahl stehen, werden wir in diesem Tutorial Docker verwenden. Docker stellt die von Ubuntu benötigte Laufzeitumgebung bereit. Sie können den Schritten 1, 2 und 3 unseres Tutorials zur Installation und Bedienung von Docker.
Schritt 1: Kubernetes installieren
In diesem Schritt werden wir Kubernetes installieren. Genau wie bei Docker in den Voraussetzungen müssen Sie die Befehle auf beiden Nodes ausführen, um Kubernetes zu installieren. Verwenden Sie ssh um sich auf beiden Nodes anzumelden und fortzufahren. Sie beginnen mit der Installation des apt-transport-https-Pakets, das die Arbeit mit http und https in den Repositories von Ubuntu ermöglicht. Installieren Sie außerdem curl, da dies für die nächsten Schritte erforderlich ist. Führen Sie den folgenden Befehl aus:
|
1 |
sudo apt install apt-transport-https curl |
Fügen Sie dann den Kubernetes-Signierungs-schlüssel auf beiden Nodes hinzu, indem Sie folgenden Befehl ausführen:
|
1 |
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add |
Als Nächstes fügen wir das Kubernetes-Repository als Paketquelle auf beiden Nodes mit dem folgenden Befehl hinzu:
|
1 2 |
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" >> ~/kubernetes.list sudo mv ~/kubernetes.list /etc/apt/sources.list.d |
Aktualisieren Sie danach die Knoten:
|
1 |
sudo apt update |
- Kubernetes-Tools installieren
Sobald das Update abgeschlossen ist, werden wir Kubernetes installieren. Dies beinhaltet die Installation der verschiedenen Tools, aus denen Kubernetes besteht: kubeadm, kubelet, kubectl, und kubernetes-cni. Diese Tools werden auf beiden Knoten installiert. Wir definieren jedes Tool unten:
-
kubelet – ein Agent, der auf jedem Knoten ausgeführt wird und die Kommunikation mit dem Master-Knoten übernimmt, um Workloads in der Container-Runtime zu initiieren. Geben Sie den folgenden Befehl ein, um kubelet zu installieren:
|
1 |
sudo apt install kubelet |
-
kubeadm – Teil des Kubernetes-Projekts und hilft bei der Initialisierung eines Kubernetes-Clusters. Geben Sie den folgenden Befehl ein, um kubeadm zu installieren:
|
1 |
sudo apt install kubeadm |
-
kubectl – das Kubernetes-Befehlszeilentool, mit dem Sie Befehle innerhalb der Kubernetes-Cluster ausführen können. Führen Sie den folgenden Befehl aus, um kubectl zu installieren:
|
1 |
sudo apt install kubectl |
-
kubernetes-cni – ermöglicht die Vernetzung innerhalb der Container und stellt sicher, dass Container kommunizieren und Daten austauschen können. Führen Sie den folgenden Befehl aus, um es zu installieren:
|
1 |
sudo apt-get install -y kubernetes-cni |
Optional können Sie alle vier mit einem einzigen Befehl installieren:
|
1 |
sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni |
Schritt 2: Deaktivieren des Swap-Speichers
Kubernetes funktioniert nicht in einem System, das Swap-Speicher verwendet. Daher muss er auf dem Master-Knoten und allen Worker-Knoten deaktiviert werden. Führen Sie den folgenden Befehl aus, um den Swap-Speicher zu deaktivieren:
|
1 |
sudo swapoff -a |
Dieser Befehl deaktiviert den Swap-Speicher, bis das System neu gestartet wird. Wir müssen sicherstellen, dass er auch nach Neustarts deaktiviert bleibt. Dies muss auf dem Master- und allen Worker-Knoten durchgeführt werden. Wir können dies tun, indem wir die fstab-Datei bearbeiten und die /Swapfile-Zeile mit einem # auskommentieren. Öffnen Sie die Datei mit dem Texteditor nano, indem Sie den folgenden Befehl eingeben:
|
1 |
sudo nano /etc/fstab |
Kommentieren Sie in der Datei die Swapfile-Zeile aus, wie im folgenden Screenshot gezeigt:

Wenn Sie die Swapfile-Zeile nicht sehen, ignorieren Sie sie einfach. Speichern und schließen Sie die Datei, wenn Sie mit der Bearbeitung fertig sind. Befolgen Sie den gleichen Vorgang für beide Knoten. Nun bleiben die Swap-Speichereinstellungen auch nach dem Neustart Ihres Servers deaktiviert.
Schritt 3: Festlegen eindeutiger Hostnamen
Ihre Knoten müssen eindeutige Hostnamen haben, um die Identifizierung zu erleichtern. Wenn Sie einen Cluster mit vielen Knoten bereitstellen, können Sie Namen zur Identifizierung Ihrer Worker-Knoten festlegen, z. B. node-1, node-2 usw. Wie bereits erwähnt, haben wir unsere Knoten wie folgt benannt: kubernetes-master und kubernetes-worker. Wir haben sie bei der Erstellung des Servers festgelegt. Sie können Ihre jedoch anpassen oder festlegen, falls Sie dies noch nicht über die Befehlszeile getan haben. Um den Hostnamen auf dem Master-Knoten anzupassen, führen Sie den folgenden Befehl aus:
|
1 |
sudo hostnamectl set-hostname kubernetes-master |
Führen Sie auf dem Worker-Knoten den folgenden Befehl aus:
|
1 |
sudo hostnamectl set-hostname kubernetes-worker |
Sie können die aktuelle Terminal-Sitzung schließen und sich erneut per ssh auf dem Server anmelden, um die Änderungen zu sehen.
Schritt 4: Iptables den Bridged-Traffic sehen lassen
Damit die Master- und Worker-Knoten den Bridged-Traffic korrekt sehen können, sollten Sie sicherstellen, dass net.bridge.bridge-nf-call-iptables in Ihrer Konfiguration auf 1 gesetzt ist. Stellen Sie zunächst sicher, dass das Modul br_netfilter geladen ist. Sie können dies bestätigen, indem Sie folgenden Befehl eingeben:
|
1 |
lsmod | grep br_netfilter |
Optional können Sie es explizit mit folgendem Befehl laden:
|
1 |
sudo modprobe br_netfilter |
Jetzt können Sie diesen Befehl ausführen, um den Wert auf 1 zu setzen:
|
1 |
sudo sysctl net.bridge.bridge-nf-call-iptables=1 |
Schritt 5: Ändern des Docker-Cgroup-Treibers
Standardmäßig wird Docker mit “cgroupfs” als Cgroup-Treiber installiert. Kubernetes empfiehlt, dass Docker ausgeführt werden sollte mit “systemd” als Treiber. Wenn Sie diesen Schritt überspringen und versuchen, kubeadm im nächsten Schritt zu initialisieren, erhalten Sie die folgende Warnung in Ihrem Terminal:
|
1 2 |
[preflight] Ausführen von Pre-flight-Prüfungen [WARNUNG IsDockerSystemdCheck]: erkannt "cgroupfs" als der Docker-Cgroup-Treiber. Der empfohlene Treiber ist "systemd". Bitte folgen Sie der Anleitung unter https://kubernetes.io/docs/setup/cri/ |
Aktualisieren Sie sowohl auf dem Master- als auch auf den Worker-Nodes den cgroupdriver mit den folgenden Befehlen:
|
1 2 3 4 5 6 7 8 9 |
sudo mkdir /etc/docker cat <<EOF | sudo tee /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF |
Führen Sie dann die folgenden Befehle aus, um Docker neu zu starten und beim Systemstart zu aktivieren:
|
1 2 3 |
sudo systemctl enable docker sudo systemctl daemon-reload sudo systemctl restart docker |
Sobald das eingerichtet ist, können wir mit dem interessanten Teil fortfahren: dem Bereitstellen des Kubernetes-Clusters!
Schritt 6: Initialisieren des Kubernetes-Master-Nodes
Der erste Schritt beim Bereitstellen eines Kubernetes-Clusters besteht darin, den Master-Node zu starten. Führen Sie im Terminal Ihres Master-Nodes den folgenden Befehl aus, um den Kubernetes--Master zu initialisieren:
|
1 |
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 |
Wenn Sie den obigen Befehl ausführen und Ihr System nicht den erwarteten Anforderungen entspricht, wie z. B. dem minimalen RAM oder der minimalen CPU, wie im Abschnitt „Voraussetzungen“ erklärt, erhalten Sie eine Warnung und der Cluster startet nicht:

Der folgende Screenshot zeigt, dass die Initialisierung erfolgreich war. Wir haben auch ein Flag hinzugefügt, um das Pod-Netzwerk mit der IP 10.244.0.0 zu spezifizieren. Dies ist die Standard-IP, die kube-flannel verwendet. Wir werden im nächsten Schritt näher auf das Pod-Netzwerk eingehen.

In der Ausgabe sehen Sie den Befehl kubeadm join (wir haben unsere IP-Adresse ausgeblendet) und ein eindeutiges Token, das Sie auf dem Worker-Node und allen anderen Worker-Nodes ausführen, die Sie diesem Cluster hinzufügen möchten. Kopieren Sie diesen Befehl als Nächstes und fügen Sie ihn ein, da Sie ihn später auf dem Worker-Node benötigen.
In der Ausgabe zeigt Kubernetes auch einige zusätzliche Befehle an, die Sie als normaler Benutzer auf dem Master-Node ausführen sollten, bevor Sie den Cluster verwenden. Führen wir diese Befehle aus:
|
1 2 3 |
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config |
Wir haben nun den Master-Node initialisiert. Wir müssen jedoch auch das Pod-Netzwerk auf dem Master-Node einrichten, bevor wir die Worker-Nodes hinzufügen.
Schritt 7: Bereitstellen eines Pod-Netzwerks
Ein Pod-Netzwerk erleichtert die Kommunikation zwischen Servern und ist für das ordnungsgemäße Funktionieren des Kubernetes-Clusters erforderlich. Mehr über das Kubernetes-Cluster-Netzwerk erfahren Sie in der offiziellen Dokumentation. Wir werden für dieses Tutorial das Flannel-Pod-Netzwerk verwenden. Flannel ist ein einfaches Overlay-Netzwerk, das die Anforderungen von Kubernetes erfüllt.
Bevor wir das Pod-Netzwerk bereitstellen, müssen wir den Firewall-Status überprüfen. Wenn Sie die Firewall nach Schritt 5 des Tutorials zur Einrichtung Ihres Ubuntu-Servers aktiviert haben, müssen Sie zuerst eine Firewall-Regel hinzufügen, um Ausnahmen für Port 6443 (den Standardport für Kubernetes) zu erstellen. Führen Sie die folgenden ufw-Befehle sowohl auf dem Master- als auch auf den Worker-Nodes aus:
|
1 2 |
sudo ufw allow 6443 sudo ufw allow 6443/tcp |
Danach können Sie die folgenden zwei Befehle ausführen, um das Pod-Netzwerk auf dem Master-Node bereitzustellen:
|
1 2 |
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml |
Dies kann je nach Ihrer Umgebung einige Sekunden bis zu einer Minute dauern, um das Flannel-Netzwerk zu laden. Führen Sie den folgenden Befehl aus, um zu bestätigen, dass alles gestartet ist:
|
1 |
kubectl get pods --all-namespaces |
Die Ausgabe des Befehls sollte den Status aller Dienste als laufend anzeigen, wenn alles erfolgreich war:

Sie können auch den Zustand der Komponenten mit dem Befehl „get component status“ anzeigen:
|
1 |
kubectl get componentstatus |

Dieser Befehl hat die Kurzform cs:
|
1 |
kubectl get cs |

Wenn Sie den Status „unhealthy“ sehen, ändern Sie die folgenden Dateien und löschen Sie die Zeile bei (spec->containers->command), die diese Phrase enthält: - --port=0 :
|
1 |
sudo nano /etc/kubernetes/manifests/kube-scheduler.yaml |
Tun Sie dasselbe für diese Datei:
|
1 |
sudo nano /etc/kubernetes/manifests/kube-controller-manager.yaml |
Starten Sie schließlich den Kubernetes-Dienst neu:
|
1 |
sudo systemctl restart kubelet.service |
Schritt 8: Worker-Nodes dem Kubernetes-Cluster hinzufügen
Da der kubernetes-master Node aktiv und das Pod-Netzwerk bereit ist, können wir unsere Worker-Nodes dem Cluster hinzufügen. In diesem Tutorial haben wir nur einen Worker-Node, also werden wir mit diesem arbeiten. Wenn Sie mehr Worker-Nodes haben, können Sie immer die gleichen Schritte wie unten beschrieben ausführen, um dem Cluster beizutreten.
Melden Sie sich zuerst in einer separaten Terminal-Sitzung auf Ihrem Worker-Node an. Sie verwenden Ihren kubeadm join-Befehl, der in Ihrem Terminal angezeigt wurde, als wir den Master-Node in Schritt 6 initialisiert haben. Führen Sie den Befehl aus:
|
1 |
sudo kubeadm join 127.0.0.188:6443 --token u81y02.91gqwkxx6rnhnnly --discovery-token-ca-cert-hash sha256:4482ab1c66bf17992ea02c1ba580f4af9f3ad4cc37b24f189db34d6e3fe95c2d |
Sie sollten eine ähnliche Ausgabe wie im folgenden Screenshot sehen, wenn der Beitritt zum Cluster abgeschlossen ist:

Sobald der Beitrittsprozess abgeschlossen ist, wechseln Sie zum Terminal des Master-Nodes und führen Sie den folgenden Befehl aus, um zu bestätigen, dass Ihr Worker-Node dem Cluster beigetreten ist:
|
1 |
kubectl get nodes |
Im Screenshot der Ausgabe des obigen Befehls können wir sehen, dass der Worker-Node dem Cluster beigetreten ist:

Schritt 9: Bereitstellen einer Anwendung im Kubernetes-Cluster
An diesem Punkt haben Sie erfolgreich ein Kubernetes-Cluster eingerichtet. Machen wir das Cluster nutzbar, indem wir einen Dienst darauf bereitstellen. Nginx is ein beliebter Webserver, der selbst bei Tausenden von Verbindungen mit unglaublicher Geschwindigkeit glänzt. Wir werden den Nginx-Webserver im Cluster bereitstellen, um zu beweisen, dass Sie dieses Setup in einer realen Anwendung nutzen können.
Führen Sie den folgenden Befehl auf dem Master-Node aus, um ein Kubernetes-Deployment für Nginx zu erstellen:
|
1 |
kubectl create deployment nginx --image=nginx |
Sie können das erstellte Deployment mit dem Befehl describe deployment anzeigen:
|
1 |
kubectl describe deployment nginx |

Um den nginx Service über das Internet zugänglich zu machen, führen Sie folgenden Befehl aus:
|
1 |
kubectl create service nodeport nginx --tcp=80:80 |

Der obige Befehl erstellt einen öffentlich zugänglichen Service für das Nginx-Deployment. Da es sich hierbei um ein nodeport-Deployment handelt, vergibt Kubernetes dem Service einen Port im Bereich von 32000+.
Sie können die aktuellen Services abrufen, indem Sie folgenden Befehl eingeben:
|
1 |
kubectl get svc |

Sie können sehen, dass unser zugewiesener Port 32264 ist. Notieren Sie sich den in Ihrem Terminal angezeigten Port, um ihn im nächsten Schritt zu verwenden.
Um zu überprüfen, ob das Nginx-Service-Deployment erfolgreich war, führen Sie einen curl-Aufruf vom Master zum Worker-Knoten aus. Ersetzen Sie die IP Ihres Worker-Knotens und den Port, den Sie aus dem obigen Befehl erhalten haben:
|
1 |
curl your-kubernetes-worker-ip:32264 |
Sie sollten die Ausgabe der Standard-Nginx- index.html:

Optional können Sie die Kombination aus IP-Adresse und Port des Worker-Knotens in Ihrem Browser aufrufen und die Standard-Nginx-Indexseite anzeigen:

Sie können ein Deployment löschen, indem Sie den Namen des Deployments angeben. Dieser Befehl löscht beispielsweise unser Deployment:
|
1 |
kubectl delete deployment nginx |
Wir haben unseren Cluster nun erfolgreich getestet!
Fazit
In diesem Tutorial haben Sie gelernt, wie Sie einen Kubernetes-Cluster auf Ubuntu 20.04 installieren. Sie haben einen Cluster eingerichtet, der aus einem Master- und einem Worker-Knoten besteht. Sie konnten das Kubernetes-Toolset installieren, ein Pod-Netzwerk erstellen und den Worker-Knoten dem Master-Knoten hinzufügen. Wir haben unser Konzept auch getestet, indem wir ein einfaches Deployment eines Nginx-Webservers auf dem Cluster durchgeführt haben. Dies sollte als Grundlage für die Arbeit mit Kubernetes-Clustern auf Ubuntu dienen.
Obwohl wir nur einen Worker-Knoten verwendet haben, können Sie Ihren Cluster um so viele Knoten erweitern, wie Sie möchten. Wenn Sie tiefer in DevOps mit Automatisierungstools wie Ansible einsteigen möchten, haben wir ein Tutorial, das sich mit der Bereitstellung von Kubernetes-Cluster-Deployments mit Ansible und Kubeadm befasst. Schauen Sie es sich an. Wenn Sie lernen möchten, wie man eine PHP-Anwendung auf einem Kubernetes-Cluster bereitstellt, lesen Sie dieses Tutorial.
Viel Spaß beim Computing!
Kommentare
Noch keine Kommentare. Schreiben Sie den ersten.