Kubernetes Cluster mit Kubeadm auf Debian 11 einrichten

Kubernetes oder k8s ist eine Open-Source-Plattform für die Container-Orchestrierung, die die Bereitstellung, Verwaltung und Skalierung von containerisierten Anwendungen automatisiert. Kubernetes ist eine Container-Orchestrierung, die von Google entwickelt wurde und inzwischen als Open-Source-Projekt zum Standard für moderne Anwendungsbereitstellung und Computing-Plattformen geworden ist.

Kubernetes ist die Lösung für die moderne Ära der Containerbereitstellung. Es bietet Service Discovery und Load-Balancing, Storage-Orchestrierung, automatisiertes Rollout und Rollback, selbstheilende Services, Geheimnis- und Konfigurationsmanagement. Kubernetes ermöglicht eine kostengünstige Cloud-native Entwicklung.

In diesem Lernprogramm richtest du den Kubernetes Cluster ein:

  • Einrichten der Systeme, d.h. Einrichten der Datei /etc/hosts, Aktivieren der Kernel-Module und Deaktivieren von SWAP.
  • Einrichten der UFW-Firewall durch Hinzufügen einiger Ports, die für Kubernetes und das CNI-Plugin (Calico) benötigt werden.
  • Installation von CRI-O als Container-Laufzeitumgebung für Kubernetes.
  • Installieren von Kubernetes-Paketen wie kubelet, kubeadm und kubectl.
  • Initialisierung eines Control-Plane Nodes und Hinzufügen von zwei Worker Nodes.

Voraussetzungen

Um dieses Tutorial zu absolvieren, brauchst du die folgenden Voraussetzungen:

  • Drei oder mehr Debian 11 Server.
  • Einen Nicht-Root-Benutzer mit Root-/Administrator-Rechten.

Einrichten der Systeme

Bevor du mit der Installation der Pakete für den Kubernetes-Einsatz beginnst, musst du alle deine Systeme so einrichten, wie es für den Kubernetes-Einsatz erforderlich ist. Dazu gehören die folgenden Konfigurationen:

  1. Richte die richtige /etc/hosts-Datei ein: Jeder Hostname eines Servers muss in die richtige IP-Adresse aufgelöst werden. Dafür gibt es mehrere Möglichkeiten, aber die einfachste ist die Verwendung der Datei /etc/hosts auf allen Servern.
  2. UFW-Firewall einrichten: Für die Produktionsumgebung ist es immer empfehlenswert, die Firewall sowohl auf der Control-Plane als auch auf den Worker Nodes zu aktivieren. Du wirst eine UFW-Firewall für die Kubernetes Control-Plane, den Worker-Node und das CNI-Plugin Calico einrichten.
  3. Aktiviere die Kernel-Module: Für Kubernetes müssen einige Kernel-Module auf dem Linux-System aktiviert werden. Die Kernel-Module „overlay“ und „br_netfilter“ werden benötigt, damit iptables den überbrückten Datenverkehr sehen kann.
  4. SWAP deaktivieren: Du musst SWAP auf allen Kubernetes-Knoten deaktivieren, sowohl auf der Control-Plane als auch auf den Worker-Knoten. Andernfalls wird der Kubelet-Dienst mit Problemen laufen.

Einrichten der Datei /etc/hosts

In diesem ersten Schritt richtest du den System-Hostnamen und die Datei /etc/hosts auf allen deinen Servern ein. Für diese Demonstration werden wir die folgenden Server verwenden.

Hostname        IP Address        Used as
--------------------------------------------
k8s-master      192.168.5.10      control-plane
k8s-worker1     192.168.5.115     worker node
k8s-worker2     192.168.5.116     worker node

Führe den folgenden hostnamectl-Befehl aus, um den System-Hostnamen auf jedem Server einzurichten.

Für den Control-Plane-Knoten führst du den folgenden Befehl aus, um den System-Hostnamen auf„k8s-master“ zu setzen.

sudo hostnamectl set-hostname k8s-master

Für die Kubernetes Worker Nodes führst du den folgenden hostnamectl-Befehl aus.

# setup hostname k8s-worker1
sudo hostnamectl set-hostname k8s-worker1

# setup hostname k8s-worker2
sudo hostnamectl set-hostname k8s-worker2

Als nächstes bearbeitest du die Datei /etc/hosts auf allen Servern mit dem folgenden Befehl.

sudo nano /etc/hosts

Füge die folgende Konfiguration in die Datei ein. Achte darauf, dass jeder Hostname auf die richtige IP-Adresse verweist.

192.168.5.10 k8s-master
192.168.5.115 k8s-worker1
192.168.5.116 k8s-worker2

Speichere und schließe die Datei, wenn du fertig bist.

Wenn du abschließend den Ping-Befehl für jeden Hostnamen ausführst, wird dir die richtige IP-Adresse angezeigt, die in der Datei /etc/hosts definiert ist.

ping k8s-master -c3
ping k8s-worker1
ping k8s-worker2 -c3

UFW-Firewall einrichten

Für Kubernetes müssen einige Ports auf allen deinen Systemen geöffnet sein. Auf dem Standard-Ubuntu-System wird die UFW-Firewall als Standard-Firewall verwendet. Du installierst die UFW-Firewall auf all deinen Debian-Systemen und fügst einige UFW-Regeln für den Kubernetes-Einsatz hinzu.

Für die Kubernetes Control-Plane musst du die folgenden Ports öffnen:

Protocol  Direction Port Range  Purpose Used By
-----------------------------------------------
TCP       Inbound   6443        Kubernetes API server All
TCP       Inbound   2379-2380   etcd server client API  kube-apiserver, etcd
TCP       Inbound   10250       Kubelet API Self, Control plane
TCP       Inbound   10259       kube-scheduler  Self
TCP       Inbound   10257       kube-controller-manager Self

Für die Kubernetes-Worker-Nodes musst du die folgenden Ports öffnen:

Protocol  Direction Port Range  Purpose Used By
--------------------------------------------------
TCP       Inbound   10250       Kubelet API Self, Control plane
TCP       Inbound   30000-32767 NodePort Services†  All

In diesem Beispiel werden wir Calico als CNI (Container Network Interface) Plugin verwenden. Daher wirst du im Folgenden einige zusätzliche Ports öffnen:

Protocol  Direction          Port Range  Purpose Used By
-------------------------------------------------------
TCP       Bidirectional      179         Calico networking (BGP)
UDP       Bidirectional      4789        Calico networking with VXLAN enabled
TCP       Incoming           2379        etcd datastore
UDP       Bidirectional      4789        flannel networking (VXLAN)

Installiere das UFW-Paket auf deinen Debian-Servern mit dem folgenden apt-Befehl. Gib Y ein, um die Installation zu bestätigen und drücke ENTER, damit die Installation beginnt.

sudo apt install ufw

ufw installieren

Als nächstes fügst du die OpenSSH-Anwendung mit dem folgenden Befehl zu deiner Firewall hinzu. Aktiviere dann die UFW-Firewall. Wenn du zur Bestätigung aufgefordert wirst, gib „y“ ein, um die UFW-Firewall zu aktivieren und auszuführen.

sudo ufw allow "OpenSSH"
sudo ufw enable

ufw aktivieren

Führe auf dem Control-Plane-Knoten„k8s-master“ den folgenden ufw-Befehl aus, um Ports zu öffnen. Überprüfe und verifiziere dann die UFW-Regeln.

Firewall-Regeln für die Kubernetes Control-Plane.

sudo ufw allow 6443/tcp
sudo ufw allow 2379:2380/tcp
sudo ufw allow 10250/tcp
sudo ufw allow 10259/tcp
sudo ufw allow 10257/tcp

Firewall-Regeln für das Calico CNI-Plugin.

sudo ufw allow 179/tcp
sudo ufw allow 4789/udp
sudo ufw allow 4789/tcp
sudo ufw allow 2379/tcp

sudo ufw status

ufw firewall control plane

Auf den Worker Nodes„k8s-worker1“ und„k8s-worker2“ öffnest du mit dem folgenden ufw-Befehl einige Ports. Überprüfe dann die UFW-Firewall-Regeln.

Firewall-Regeln für Kubernetes Worker Nodes.

sudo ufw allow 10250/tcp
sudo ufw allow 30000:32767/tcp

Firewall-Regeln für Calico auf Kubernetes Worker Nodes.

sudo ufw allow 179/tcp
sudo ufw allow 4789/udp
sudo ufw allow 4789/tcp
sudo ufw allow 2379/tcp
sudo ufw status

ufw Firewall-Arbeitsknoten

Aktiviere Kernel-Module und deaktiviere SWAP

Für die Kubernetes müssen die Kernel-Module „overlay“ und „br_netfilter“ auf allen Servern aktiviert werden. Dadurch können die iptbales den überbrückten Datenverkehr sehen. Außerdem musst du die Portweiterleitung aktivieren und SWAP deaktivieren.

Führe den folgenden Befehl aus, um die Kernelmodule„overlay“ und„br_netfilter“ zu aktivieren.

sudo modprobe overlay
sudo modprobe br_netfilter

Um sie dauerhaft zu aktivieren, erstelle die Konfigurationsdatei„/etc/modules-load.d/k8s.conf“ mit dem folgenden Befehl. Dadurch können Linux-Systeme die Kernel-Module während des Systemstarts aktivieren.

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

Kernel-Module aktivieren

Als Nächstes erstellst du die erforderlichen systemctl params mit dem folgenden Befehl.

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

Um die neue sysctl-Konfiguration ohne Neustart anzuwenden, verwende den folgenden sysctl-Befehl. Du solltest die Liste der standardmäßigen sysctl params auf deinem System erhalten und sicherstellen, dass du die sysctl params erhältst, die du gerade in der Datei„k8s.conf“ hinzugefügt hast.

sudo sysctl --system

sysctl einrichten

Um SWAP zu deaktivieren, musst du die SWAP-Konfiguration in der Datei„/etc/fstab“ auskommentieren. Das kannst du mit dem einfachen Befehl über sed (Stream-Editor) oder durch manuelles Bearbeiten der Datei /etc/fstab machen.

sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

oder

sudo nano /etc/fstab

Als Nächstes schaltest du den SWAP für die aktuelle Sitzung mit dem folgenden Befehl aus. Überprüfe dann mit dem Befehl„free -m„, ob der SWAP ausgeschaltet ist. Du solltest sehen, dass der SWAP„0“ Werte hat, was bedeutet, dass er jetzt deaktiviert ist.

sudo swapoff -a
free -m

Swap deaktivieren

Installieren der Container Runtime: CRI-O

Um Kubernetes Cluster einzurichten, musst du die Container-Runtime auf allen Servern installieren, damit die Pods laufen können. Für die Kubernetes-Bereitstellung können mehrere Container-Runtimes verwendet werden, z. B. containerd, CRI-O, Mirantis Container Runtime und Docker Engine (über cri-dockerd).

In dieser Demonstration werden wir „CRI-O“ als Container für unser Kubernetes-Deployment verwenden. Du wirst CRI-O also auf allen Servern, der Control-Plane und den Worker Nodes installieren.

Bevor du CRI-O installierst, führe den folgenden apt-Befehl aus, um das Basispaket„gnupg2“ und„apt-transport-https“ zu installieren. Gib Y ein, um die Installation zu bestätigen und drücke ENTER.

sudo apt install gnupg2 apt-transport-https

Abhängigkeiten installieren

Erstelle nun eine neue Umgebungsvariable für die CRI-O-Installation. Die Variable „$OS“ mit dem Wert „Debian_11“ und die Variable „$VERSION“ mit dem Wert „1.24“. In diesem Beispiel werden wir den CRI-O Container v1.24 (aktuelle Version) für „Debian_11“ Systeme installieren.

export OS=Debian_11
export VERSION=1.24

Führe den folgenden Befehl aus, um das CRI-O Repository für das Debian 11 System hinzuzufügen.

echo "deb [signed-by=/usr/share/keyrings/libcontainers-archive-keyring.gpg] https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
echo "deb [signed-by=/usr/share/keyrings/libcontainers-crio-archive-keyring.gpg] https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list

Führe den folgenden Befehl aus, um den GPG-Schlüssel für das CRI-O-Repository hinzuzufügen.

mkdir -p /usr/share/keyrings
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | gpg --dearmor -o /usr/share/keyrings/libcontainers-archive-keyring.gpg
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/Release.key | gpg --dearmor -o /usr/share/keyrings/libcontainers-crio-archive-keyring.gpg

crio repo Schlüssel hinzufügen

Aktualisiere nun die System-Repositories und aktualisiere den Paketindex mit dem folgenden Befehl. Du solltest sehen, dass das CRI-O Repository zu den Debian 11 Servern hinzugefügt wurde.

sudo apt update

Repo aktualisieren

Um die CRI-O Container-Runtime zu installieren, führe den folgenden apt-Befehl aus. Gib Y ein, um die Installation zu bestätigen, und drücke ENTER, damit die Installation von CRI-O beginnt.

sudo apt install cri-o cri-o-runc cri-tools

crio installieren

Nachdem die Installation abgeschlossen ist, bearbeite die CRI-O-Konfiguration „/etc/crio/crio.conf“ mit dem folgenden Befehl.

sudo nano /etc/crio/crio.conf

Entferne im Abschnitt „[crio.network]“ die Kommentare zu den Optionen„network_dir“ und„plugin_dir„.

# The crio.network table containers settings pertaining to the management of
# CNI plugins.
[crio.network]

# The default CNI network name to be selected. If not set or „“, then
# CRI-O will pick-up the first one found in network_dir.
# cni_default_network = „“

# Path to the directory where CNI configuration files are located.
network_dir = „/etc/cni/net.d/“

# Paths to directories where CNI plugin binaries are located.
plugin_dirs = [
„/opt/cni/bin/“,
]

Wenn du fertig bist, speichere und schließe die Datei.

Als Nächstes bearbeitest du die CRI-O-Bridge-Konfiguration„/etc/cni/net.d/100-crio-bridge.conf“ mit dem folgenden Befehl.

sudo nano /etc/cni/net.d/100-crio-bridge.conf

Ändere das Standard-Subnetz der IP-Adresse durch dein eigenes Subnetz. Diese Subnetz-IP-Adresse wird für deine Pods im Kubernetes-Cluster verwendet. Außerdem musst du sicherstellen, dass die IP-Adresse des Subnetzes mit der IP-Adresskonfiguration des CNI-Plugins übereinstimmt.

In diesem Beispiel verwenden wir die Subnetz-IP-Adresse„10.42.0.0/24“ für Pods im Kubernetes-Cluster.

...
        "ranges": [
            [{ "subnet": "10.42.0.0/24" }],
            [{ "subnet": "1100:200::/24" }]
        ]
...

Speichere und schließe die Datei, wenn du fertig bist.

Als Nächstes führst du den folgenden systemctl-Befehl aus, um den CRI-O-Dienst neu zu starten und die neuen Änderungen zu übernehmen.

sudo systemctl restart crio

Zuletzt aktivierst du den CRI-O-Dienst, damit er beim Systemstart ausgeführt wird. Überprüfe dann den Status des CRI-O-Dienstes. Du solltest sehen, dass der CRI-O-Dienst aktiviert ist und der aktuelle Status „running“ lautet.

sudo systemctl enable crio
sudo systemctl status crio

crio container laufzeit einrichten

Installation der Kubernetes-Pakete

Du hast die CRI-O Container-Laufzeitumgebung installiert. Jetzt installierst du die Kubernetes-Pakete auf allen deinen Debian-Systemen. Dazu gehören kubeadm für das Bootstrapping des Kubernetes-Clusters, kubelet, die Hauptkomponente des Kubernetes-Clusters, und kubectl, das Kommandozeilenprogramm zur Verwaltung des Kubernetes-Clusters.

In diesem Beispiel werden wir Kubernetes-Pakete über das von Kubernetes bereitgestellte Repository installieren. Du fügst also das Kubernetes-Repository zu allen deinen Debian-Systemen hinzu.

Führe den folgenden Befehl aus, um das Kubernetes-Repository und den GPG-Schlüssel hinzuzufügen.

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

Aktualisiere dein Ubuntu-Repository und den Paketindex.

sudo apt update

Repository hinzufügen kubernetes

Wenn die Aktualisierung abgeschlossen ist, installiere die Kubernetes-Pakete mit dem folgenden apt-Befehl. Gib Y ein, um die Installation zu bestätigen, und drücke ENTER, um fortzufahren, damit die Installation beginnt.

sudo apt install kubelet kubeadm kubectl

Kubernetes-Paket installieren

Nachdem die Installation abgeschlossen ist, führe den folgenden Befehl aus, um die aktuelle Version der Kubernetes-Pakete zu pinnen. Dadurch wird verhindert, dass die Kubernetes-Pakete automatisch aktualisiert werden und es zu Versionsunterschieden zwischen den Kubernetes-Paketen kommt.

sudo apt-mark hold kubelet kubeadm kubectl

Kubernetes-Pakete markieren

Kubernetes Control Plane initialisieren

Du hast alle Abhängigkeiten und Anforderungen für den Einsatz von Kubernetes Cluster erfüllt. Jetzt startest du den Kubernetes Cluster, indem du den Control Plane-Knoten zum ersten Mal initialisierst. In diesem Beispiel wird die Kubernetes Control Plane auf dem Server „k8s-master“ mit der IP-Adresse „192.168.5.10“ installiert.

Bevor du den Control Plane-Knoten initialisierst, führe den folgenden Befehl aus, um zu überprüfen, ob die Kernel-Module „br_netfilter“ aktiviert sind. Wenn du eine Ausgabe des Befehls erhältst, bedeutet das, dass das Modul „br_netfilter“ aktiviert ist.

lsmod | grep br_netfilter

Als Nächstes führst du den folgenden Befehl aus, um die für den Kubernetes Cluster benötigten Images herunterzuladen. Dieser Befehl lädt alle Container-Images herunter, die für die Erstellung des Kubernetes-Clusters benötigt werden, z. B. coredns, kube-api server, etcd, kube-controller, kube-proxy und das pause container image.

sudo kubeadm config images pull

Bilder herunterladen

Nachdem der Download abgeschlossen ist, führe den Befehl„crictl“ aus, um die Liste der verfügbaren Images auf dem „k8s-master“-Server zu überprüfen. Du solltest die Liste der Images sehen, die für die Erstellung des Kubernetes-Clusters verwendet werden sollen.

sudo crictl images

Liste der Bilder

Als Nächstes führst du den Befehl „kubeadm init“ aus, um den Kubernetes Cluster auf dem „k8s-master“-Server zu initialisieren. Dieser Knoten „k8s-master“ wird automatisch als Kubernetes Control Plane ausgewählt, da dies die erste Initialisierung des Clusters ist.

Außerdem legen wir in diesem Beispiel das Netzwerk für Pods auf„10.42.0.0/24“ fest, was dasselbe Subnetz ist wie die CRI-O-Bridge-Konfiguration „/etc/cni/net.d/100-crio-bridge.conf“.
Mit„–apiserver-advertise-address“ wird festgelegt, unter welcher IP-Adresse der Kubernetes-API-Server läuft. In diesem Beispiel wird die interne IP-Adresse„192.168.5.10“ verwendet.
Für die Option „–cri-socket“ geben wir hier den CRI-Socket zum CRI-O-Container-Runtime-Socket an, der auf„/var/run/crio/crio.sock“ verfügbar ist. Wenn du eine andere Container Runtime verwendest, musst du den Pfad der Socket-Datei ändern oder du kannst die Option„–cri-socket“ einfach entfernen, da kubeadm den Container Runtime-Socket automatisch erkennt.

sudo kubeadm init --pod-network-cidr=10.42.0.0/24 \
--apiserver-advertise-address=192.168.5.10 \
--cri-socket=unix:///var/run/crio/crio.sock

Unten siehst du die Ausgabe, wenn du den Kubernetes Cluster auf dem„k8s-master“ Server initialisierst.

Cluster initialisieren

Wenn die Initialisierung abgeschlossen ist, siehst du die Meldung „Your Kubernetes control-plane has initialized successfully!“ mit einigen wichtigen Ausgabemeldungen zum Einrichten der Kubernetes-Anmeldeinformationen und zum Deployment des Pod-Netzwerk-Add-ons sowie zum Hinzufügen des Worker Nodes zu deinem Kubernetes Cluster.

Erfolgreiche Cluster-Initialisierung

Bevor du mit der Verwaltung des Kubernetes-Clusters mit dem Tool „kubectl“ beginnst, musst du die Kubernetes-Anmeldeinformationen einrichten. Führe den folgenden Befehl aus, um die Kubernetes-Anmeldedaten einzurichten.

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Jetzt kannst du den Befehl„kubectl“ verwenden, um mit deinem Kubernetes-Cluster zu interagieren. Führe den folgenden „kubectl“-Befehl aus, um die Kubernetes-Cluster-Informationen zu überprüfen. Du solltest sehen, dass die Kubernetes Control Plane und das Coredns laufen.

kubectl cluster-info

Um vollständige Informationen über deine Kubernetes zu erhalten, kannst du die Option dump verwenden – also„kubectl cluster-info dump„.

Cluster-Infos

Nachdem Kubernetes läuft, richtest du das Calico CNI Plugin für deinen Kubernetes Cluster ein. Führe den folgenden Befehl aus, um die Calico-Manifestdatei„calico.yaml“ herunterzuladen. Bearbeite dann die Datei„calico.yaml“ mit dem Editor nano.

curl https://docs.projectcalico.org/manifests/calico.yaml -O
nano calico.yaml

Hebe den Kommentar in der Konfiguration„CALICO_IPV4POOL_CIDR“ auf und ändere das Netzwerk-Subnetz in„10.42.0.0/24„. Diese Subnetzkonfiguration muss das gleiche Subnetz sein wie in der CRI-O-Bridge-Konfiguration und der „–pod-network-cidr“-Konfiguration während der Kubernetes-Initialisierung mit dem Befehl „kubeadm init“.

...
            - name: CALICO_IPV4POOL_CIDR
              value: "10.42.0.0/24"
...

Wenn du fertig bist, speichere und schließe die Datei.

Als Nächstes führst du den Befehl „kubectl“ aus, um das Calico CNI Plugin mit der benutzerdefinierten Manifestdatei „calico.yaml“ bereitzustellen. Dieser Befehl erstellt mehrere Kubernetes-Ressourcen für das Calico CNI-Plugin. Außerdem werden damit Calico-Images heruntergeladen und neue Pods für Calico erstellt.

sudo kubectl apply -f calico.yml

cni plugin calico einsetzen

Führe nun den folgenden kubectl-Befehl aus, um die verfügbaren Pods in deinem Kubernetes-Cluster zu überprüfen. Du solltest zwei zusätzliche Pods sehen: „calico-node-xxx“ und „calico-kube-controller-xxx“.

kubectl get pods --all-namespaces

alle Schoten prüfen

Hinzufügen von Worker Nodes zu Kubernetes

Nachdem du die Kubernetes Control Plane auf dem „k8s-master“ Server initialisiert hast, fügst du die Worker Nodes„k8s-worker1“ und„k8s-worker2“ zum Kubernetes Cluster hinzu.

Gehe zum„k8s-worker1„-Server und führe den folgenden„kubeadm join„-Befehl aus, um den„k8s-worker1“ zum Kubernetes-Cluster hinzuzufügen. Möglicherweise hast du unterschiedliche Token und ca-cert-hash. Du kannst die Details dieser Informationen in der Ausgabemeldung sehen, wenn du den Control Plane Node initialisierst.

kubeadm join 192.168.5.10:6443 --token dbgk8h.nwzqqp1v5aqif5fy \
        --discovery-token-ca-cert-hash sha256:7a543a545585358b143ce3e8633a8d673b6f628c5abc995939a58606c6dd219c

In der folgenden Ausgabe kannst du sehen, dass der Server„k8s-worker1“ dem Kubernetes-Cluster beigetreten ist.

join node 1

Als Nächstes gehst du zum Server„k8s-worker2“ und führst den Befehl„kubeadm join“ aus, um„k8s-worker2“ dem Kubernetes Cluster hinzuzufügen.

kubeadm join 192.168.5.10:6443 --token dbgk8h.nwzqqp1v5aqif5fy \
        --discovery-token-ca-cert-hash sha256:7a543a545585358b143ce3e8633a8d673b6f628c5abc995939a58606c6dd219c

Wenn der Vorgang abgeschlossen ist, siehst du die gleiche Meldung.

join node 2

Gehe nun zurück zum Control Plane Server „k8s-master“ und führe den folgenden Befehl aus, um alle laufenden Pods im Kubernetes Cluster zu überprüfen. Du solltest sehen, dass es zusätzliche Pods für jede Kubernetes-Komponente gibt.

kubectl get pods --all-namespaces

oder

kubectl get pods -o wide --all-namespaces

pods kubernetes prüfen

Überprüfe abschließend alle verfügbaren Knoten im Kubernetes Cluster mit dem Befehl „kubectl“. Du solltest sehen, dass der Server „cplane1“ als Kubernetes Control Plane und die Server „k8s-worker1“ und „k8s-worker2“ als Worker Nodes laufen.

kubectl get nodes -o wide

kuberenetes cherck nodes

Nginx-Pod im Kubernetes-Cluster bereitstellen

Führe den folgenden Befehl aus, um ein neues Deployment für den Nginx-Webserver zu erstellen. In diesem Beispiel erstellen wir neue Nginx Pods basierend auf dem Image„nginx:alpine“ mit zwei Repliken.

kubectl create deployment nginx --image=nginx:alpine --replicas=2

Erstelle nun einen neuen Dienst vom Typ„NodePort„, der das Nginx-Deployment mit dem folgenden kubectl-Befehl bereitstellt. Dieser Befehl erstellt einen neuen Kubernetes-Dienst namens „nginx“ mit dem Typ„NodePort“ und stellt den Port„80“ für den Pod bereit.

kubectl create service nodeport nginx --tcp=80:80

Als nächstes führst du den folgenden kubectl-Befehl aus, um die Liste der laufenden Pods in deinem Kubernetes-Cluster zu überprüfen. Du solltest sehen, dass zwei Nginx-Pods laufen.

kubectl get pods

Überprüfe nun die Liste der verfügbaren Dienste in Kubernetes mit folgendem Befehl. Du solltest sehen, dass der Dienst„nginx“ vom Typ NodePort den Port„80“ und den Port „31277“ auf den Kubernetes-Hosts freigibt. Der Dienst NodePort stellt immer einen Port im Bereich 30000-32767 zur Verfügung.

kubectl get svc

Bereitstellung erstellen nginx

Führe den folgenden curl-Befehl aus, um auf deinen Nginx-Einsatz zuzugreifen.

curl k8s-worker1:31277
curl k8s-worker2:31277

Unten siehst du die Ausgabe des index.html-Quellcodes vom Knoten„k8s-worker1„.

Zugriff auf nginx pod

Und unten siehst du den index.html-Quellcode des Knotens„k8s-worker2„.

Zugang zum nginmx-Pod

Fazit

In diesem Lernprogramm hast du die Einrichtung des Kubernetes-Clusters mit drei Knoten und Debian 11-Servern abgeschlossen. Der Kubernetes Cluster läuft mit einer Control Plane und zwei Worker Nodes. Er läuft mit CRI-O als Container-Laufzeitumgebung für deinen Kubernetes-Cluster und dem Calico CNI-Plugin für die Vernetzung von Pods in deinem Cluster. Außerdem hast du den Nginx-Webserver erfolgreich im Kubernetes-Cluster implementiert.

Wenn du den Kubernetes Cluster vollständig konfiguriert hast, kannst du mit dem Deployment deiner Anwendungen in den Kubernetes Cluster beginnen oder versuchen, das Kubernetes Dashboard zu installieren, um mehr über deine Kubernetes Umgebung zu erfahren.

Das könnte dich auch interessieren …