Erstellen eines Kubernetes-Clusters auf Fedora
|
Diese Seite behandelt Softwarequellen von Drittanbietern, die nicht offiziell mit dem Fedora-Projekt verbunden sind oder von diesem unterstützt werden. Die Nutzung erfolgt auf eigene Verantwortung. Fedora empfiehlt die Verwendung freier und quelloffener Software und rät von patentgeschützter Software ab. |
Erstellen eines Kubernetes-Clusters mit kubeadm unter Verwendung von Fedora-RPMs
kubeadmIm Folgenden finden Sie eine Anleitung zum Einrichten eines funktionsfähigen Kubernetes-Clusters auf einem einzelnen Fedora-Rechner, der sich als Lern- und Testumgebung eignet. Diese Anleitung ist nicht für den Einsatz in einer Produktionsumgebung gedacht.
Die folgende Anleitung orientiert sich im Wesentlichen an der vom Kubernetes-Team erstellten Anleitung Creating a cluster with kubeadm und übernimmt deren Inhalte weitgehend.
Fedora 41 stellt sowohl versionierte als auch nicht versionierte (v1.29) Kubernetes-RPM-Pakete bereit. Kubernetes 1.29 wird von der Kubernetes-Community nicht mehr unterstützt.
-
Aktualisieren Sie das System mit DNF. Starten Sie es gegebenenfalls neu, wobei ein Neustart bis nach dem nächsten Schritt aufgeschoben werden kann.
$ sudo dnf update -
Deaktivieren Sie Swap-Bereiche. Der kubeadm-Installationsprozess gibt eine Warnung aus, wenn ein Swap-Bereich erkannt wird (siehe dieses Ticket für Details). Für eine Lern- und Laborumgebung ist es möglicherweise am einfachsten, den Swap-Bereich zu deaktivieren. Swap kann auf Wunsch aktiviert bleiben und kubeadm ist so konfiguriert, dass es nicht stoppt, wenn Swap erkannt wird. Moderne Fedora-Systeme verwenden standardmäßig zram. Starten Sie neu, nachdem Sie den Swap deaktiviert haben.
$ sudo systemctl stop swap-create@zram0 $ sudo dnf remove zram-generator-defaults $ sudo reboot now -
SELinux. Die meisten Anleitungen zur Installation von Kubernetes unter Fedora empfehlen, SELinux zu deaktivieren. Kubernetes funktioniert jedoch auch bei aktiviertem SELinux einwandfrei, und viele Container verhalten sich wie vorgesehen. Sollten dennoch Probleme auftreten, kann die Deaktivierung von SELinux eine mögliche Lösungsoption sein. Weitere Informationen hierzu finden Sie in der Quick-Doc-Anleitung zum Ändern der SELinux-Zustände.
-
Deaktivieren Sie die Firewall. Kubeadm gibt eine Installationswarnung aus, wenn die Firewall aktiv ist. Das Deaktivieren der Firewall beseitigt eine Komplexitätsquelle in einer Lernumgebung. Moderne Fedora-Systeme verwenden firewalld.
$ sudo systemctl disable --now firewalldInformationen zur korrekten Konfiguration der Fedora-Firewall für den Betrieb mit Kubernetes finden Sie im Abschnitt „Firewall Rules“ in Roman Ghertas Artikel Kubernetes with CRI-O on Fedora 39
Die aktuelle Liste der von einem Kubernetes-Cluster verwendeten Ports und Protokolle finden Sie hier.
-
Installieren Sie
iptablesundiproute-tc. Neuere Kubernetes-RPMs enthalten diese Pakete standardmäßig.$ sudo dnf install iptables iproute-tc -
Konfigurieren Sie IPv4-Forwarding und Bridge-Filter. Nachfolgend finden Sie den Inhalt, der von https://kubernetes.io/docs/setup/production-environment/container-runtimes/ kopiert wurde:
$ sudo cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF -
Laden Sie die Overlay- und Bridge-Filter-Module.
$ sudo modprobe overlay $ sudo modprobe br_netfilter -
Fügen Sie die erforderlichen
sysctl-Parameter hinzu und speichern Sie diese dauerhaft.# sysctl params required by setup, params persist across reboots $ sudo 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 -
Wenden Sie
sysctl-Parameter ohne Neustart an.$ sudo sysctl --system -
Überprüfen Sie, ob die Module
br_filterundoverlaygeladen sind.$ lsmod | grep br_netfilter $ lsmod | grep overlay -
Überprüfen Sie durch Ausführen des folgenden Befehls, ob die Systemvariablen
net.bridge.bridge-nf-call-iptables,net.bridge.bridge-nf-call-ip6tablesundnet.ipv4.ip_forwardin Ihrer sysctl-Konfiguration auf1gesetzt sind:$ sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward -
Installieren Sie eine Container-Runtime. In diesem Beispiel wird CRI-O installiert; auch Containerd ist eine Option. Hinweis: Wenn Sie CRI-O verwenden, stellen Sie sicher, dass die Haupt- und Nebenversion von CRI-O mit der Version von Kubernetes (die im nächsten Schritt installiert wird) übereinstimmen. Die Versionierung der CRI-O-RPM-Pakete erfolgt analog zu der der Kubernetes-RPM-Pakete. Installieren Sie die CRI-O-Version, die der Zielversion von Kubernetes entspricht.
$ sudo dnf install cri-o1.31 containernetworking-plugins -
Überprüfen Sie die verfügbaren Kubernetes-Versionen. Wenn Sie unsicher sind, welche Kubernetes-Versionen derzeit für Fedora 41 oder neuer verfügbar sind, kann der folgende Befehl hilfreich sein. Im nachstehenden Beispiel sind für Fedora 41 RPM-Pakete der Kubernetes-Versionen 1.29, 1.30, 1.31 und 1.32 verfügbar. Aktuelle Informationen zu unterstützten Veröffentlichungen und zum Supportende finden Sie auf der vom Kubernetes-Team gepflegten Seite Release History.
$ sudo dnf list kubernetes1.??Die Ausgabe sieht wie folgt aus:
> sudo dnf list kubernetes1.?? Updating and loading repositories: Repositories loaded. Available packages kubernetes1.29.x86_64 1.29.11-2.fc41 updates kubernetes1.30.x86_64 1.30.7-1.fc41 updates kubernetes1.31.x86_64 1.31.3-1.fc41 updates kubernetes1.32.x86_64 1.32.0-1.fc41 updates -
Installieren Sie Kubernetes. In diesem Beispiel werden alle drei Kubernetes-Anwendungen (
kubectl,kubeletundkubeadm) auf diesem einzelnen Knoten installiert. Bitte beachten Sie die obigen Hinweise zu den empfohlenen Paketen für Control-Plane- oder Worker-Knoten, falls der Cluster beide Arten von Knoten umfassen soll.$ sudo dnf install kubernetes1.31 kubernetes1.31-kubeadm kubernetes1.31-client -
Starten und aktivieren Sie cri-o.
$ sudo systemctl enable --now crio -
Laden Sie die für Kubernetes erforderlichen System-Container-Abbilder herunter. Dies ist rein optional. Der untenstehende Befehl
lädt die Abbilder bei Bedarf selbst herunter.kubeadm init$ sudo kubeadm config images pull -
Starten und aktivieren Sie
kubelet. Das Kubelet wird sich in einer Crash-Schleife befinden, bis der Cluster im nächsten Schritt initialisiert wird.$ sudo systemctl enable --now kubelet -
Initialisieren Sie den Cluster.
$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16 -
kubeadm gibt die Schritte der Initialisierung im Terminal aus. Bei Erfolg erscheint die untenstehende Ausgabe. Zu diesem Zeitpunkt läuft ein Cluster auf diesem einzelnen Rechner. Nach Abschluss von kubeadm sollten Sie Folgendes sehen:
Your Kubernetes control-plane has initialized successfully! Um Ihren Cluster zu nutzen, müssen Sie als normaler Benutzer Folgendes ausführen: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternativ können Sie als Root-Benutzer Folgendes ausführen: export KUBECONFIG=/etc/kubernetes/admin.conf -
Die oben aufgeführten Schritte ermöglichen einem Nicht-Root-Benutzer die Verwendung von
kubectl, dem Kubernetes-Befehlszeilenwerkzeug. Führen Sie diese Befehle jetzt aus.$ mkdir -p $HOME/.kube $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config -
Erlauben Sie der Control-Plane-Maschine, auch Pods für Anwendungen auszuführen. Andernfalls wird mehr als eine Maschine im Cluster benötigt.
$ kubectl taint nodes --all node-role.kubernetes.io/control-plane- -
Installieren Sie
flannelim Cluster, um die Cluster-Netzwerkkommunikation zu ermöglichen. Nebenflannelgibt es viele weitere Netzwerklösungen.flannelist unkompliziert und für diese Anleitung gut geeignet.$ kubectl apply -f https://github.com/coreos/flannel/raw/master/Documentation/kube-flannel.yml -
Lassen Sie sich eine Liste der im Cluster laufenden Pods anzeigen. Alle Pods sollten den Status „Running“ aufweisen. Beim coredns-Pod kann der Status „CrashLoopBackOff“ auftreten. Dies geschieht häufig bei der Installation von Kubernetes auf einer virtuellen Maschine, wenn der DNS-Dienst im Cluster möglicherweise nicht das richtige Netzwerk auswählt. Suchen Sie mithilfe Ihrer bevorzugten Suchmaschine nach möglichen Lösungen. Im Abschnitt zur Fehlerbehebung weiter unten finden Sie ebenfalls zwei mögliche Lösungsansätze.
$ kubectl get pods --all-namespaces
Zu diesem Zeitpunkt gibt es im Cluster einen einzelnen Rechner, auf dem die Control Plane läuft und der als Knoten für Aufgaben zur Verfügung steht.
Aktualisierungen von Kubernetes-Clustern erfordern Sorgfalt und Planung. Weitere Informationen finden Sie unter Upgrading kubeadm clusters.
Das DNF-Versionlock-Plugin ist nützlich, um ungeplante Aktualisierungen von Kubernetes-RPM-Paketen zu verhindern. Gelegentlich erreicht die in einer Fedora-Version enthaltene Kubernetes-Version das Ende ihres Lebenszyklus (End-of-Life), und eine neue Kubernetes-Version wird zu den Paketquellen hinzugefügt. Auch eine Aktualisierung von Fedora auf einem Cluster-Rechner kann dazu führen, dass eine andere Kubernetes-Version installiert wird. Sobald DNF Versionlock installiert ist, sorgt der folgende Befehl dafür, dass die Kubernetes-RPM-Pakete sowie das cri-o-RPM-Paket auf der Haupt- und Nebenversionsnummer 1.31 fixiert bleiben, während Patch-Aktualisierungen weiterhin möglich sind:
$ sudo dnf versionlock add kubernetes*-1.31.* cri-o-1.31.*
Fehlerbehebung in CrashLoopBackOff
Das CoreDNS-Team stellt einen Leitfaden zur Fehlerbehebung bei Schleifen in Kubernetes-Clustern bereit, der verschiedene Lösungsansätze für das Problem aufzeigt.
Eine vom CoreDNS-Team als „Quick-and-Dirty“-Lösung bezeichnete Möglichkeit besteht darin, die CoreDNS-ConfigMap mittels kubectl zu bearbeiten. Ersetzen Sie in der ConfigMap den Eintrag forward . /etc/resolv.conf durch die IP-Adresse des DNS-Servers Ihres Netzwerks. Lautet die IP-Adresse des DNS-Servers beispielsweise 192.168.110.201, so sähe der Eintrag folgendermaßen aus: forward . 192.168.110.201. Verwenden Sie zum Bearbeiten der CoreDNS-ConfigMap folgenden Befehl:
$ kubectl edit configmap coredns -n kube-system
kubectl startet den Editor für Ihre Fedora-Instanz. Die Standardeinstellung für Fedora ist nano, was sich jedoch leicht ändern lässt.
Eine weitere Möglichkeit besteht darin, die Stub-Auflösung von systemd-resolved auf dem Host-Rechner des Clusters mithilfe des untenstehenden Codes zu deaktivieren. Vielen Dank an @jasonbrooks (https://pagure.io/user/jasonbrooks) für die Überprüfung und die Empfehlungen.
$ sudo mkdir -p /etc/systemd/resolved.conf.d/
$ sudo cat <<EOF | sudo tee /etc/systemd/resolved.conf.d/stub-listener.conf
[Resolve]
DNSStubListener=no
EOF
Want to help? Learn how to contribute to Fedora Docs ›