Labor 9: Bootstrapping der Kubernetes-Worker-Knoten¶
Info
Dies ist ein Fork des ursprünglichen "Kubernetes the hard way", das ursprünglich von Kelsey Hightower geschrieben wurde (GitHub: kelseyhightower). Im Gegensatz zum Original, das auf Debian-ähnlichen Distributionen für die ARM64-Architektur basiert, zielt dieser Fork auf Enterprise-Linux-Distributionen wie Rocky Linux ab, das auf der x86_64-Architektur läuft.
In diesem Labor werden Sie zwei Kubernetes-Workerknoten bootstrappen. Sie installieren die folgenden Komponenten: runc, Container-Netzwerk-Plugins, containerd, kubelet und kube-proxy.
Voraussetzungen¶
Kopieren Sie aus der jumpbox Kubernetes-Binärdateien und systemd-Unit-Dateien in jede Worker-Instanz:
for host in node-0 node-1; do
SUBNET=$(grep $host machines.txt | cut -d " " -f 5)
sed "s|SUBNET|$SUBNET|g" \
configs/10-bridge.conf > 10-bridge.conf
sed "s|SUBNET|$SUBNET|g" \
configs/kubelet-config.yaml > kubelet-config.yaml
scp 10-bridge.conf kubelet-config.yaml \
root@$host:~/
done
for host in node-0 node-1; do
scp \
downloads/runc.amd64 \
downloads/crictl-v1.32.0-linux-amd64.tar.gz \
downloads/cni-plugins-linux-amd64-v1.6.2.tgz \
downloads/containerd-2.0.3-linux-amd64.tar.gz \
downloads/kubectl \
downloads/kubelet \
downloads/kube-proxy \
configs/99-loopback.conf \
configs/containerd-config.toml \
configs/kubelet-config.yaml \
configs/kube-proxy-config.yaml \
units/containerd.service \
units/kubelet.service \
units/kube-proxy.service \
root@$host:~/
done
Die Befehle in diesem Labor müssen auf jeder Workerinstanz separat ausgeführt werden: node-0 und node-1. Es werden nur die Schritte für node-0 beschrieben. Sie müssen die genauen Schritte und Befehle auf node-1 wiederholen.
Melden Sie sich mit dem Befehl ssh bei der Worker-Instanz node-0 an.
ssh root@node-0
Bereitstellen eines Kubernetes-Worker-Knotens¶
Installieren Sie die Betriebssystemabhängigkeiten:
dnf -y update
dnf -y install socat conntrack ipset tar
Die Binärdatei
socatunterstützt den Befehlkubectl port-forward.
Swap-Deaktivierung¶
Wenn Sie Swap aktiviert haben, kann das Kubelet nicht gestartet werden. Die Empfehlung lautet, Swap zu deaktivieren, um sicherzustellen, dass Kubernetes eine angemessene Ressourcenzuweisung und Servicequalität bietet.
Überprüfen Sie, ob der Swap aktiviert ist:
swapon --show
Wenn die Ausgabe leer ist, ist der Swap nicht aktiviert. Wenn die Ausgabe nicht leer ist, führen Sie den folgenden Befehl aus, um den Swap sofort zu deaktivieren:
swapoff -a
Um sicherzustellen, dass der Swap nach dem Neustart deaktiviert bleibt, kommentieren Sie die Zeile aus, die das Swap-Volume in der Datei /etc/fstab automatisch einbindet. Geben Sie bitte Folgendes ein:
sudo sed -i '/swap/s/^/#/' /etc/fstab
Erstellen Sie die Installationsverzeichnisse:
mkdir -p \
/etc/cni/net.d \
/opt/cni/bin \
/var/lib/kubelet \
/var/lib/kube-proxy \
/var/lib/kubernetes \
/var/run/kubernetes
Installieren Sie die Worker-Binärdateien:
mkdir -p containerd
tar -xvf crictl-v1.32.0-linux-amd64.tar.gz
tar -xvf containerd-2.0.3-linux-amd64.tar.gz -C containerd
tar -xvf cni-plugins-linux-amd64-v1.6.2.tgz -C /opt/cni/bin/
mv runc.amd64 runc
chmod +x crictl kubectl kube-proxy kubelet runc
mv crictl kubectl kube-proxy kubelet runc /usr/local/bin/
mv containerd/bin/* /bin/
Konfigurieren des CNI-Netzwerks¶
Erstellen Sie die Netzwerkkonfigurationsdatei bridge:
mv 10-bridge.conf 99-loopback.conf /etc/cni/net.d/
Konfiguration von containerd¶
Installieren Sie die containerd-Konfigurationsdateien:
mkdir -p /etc/containerd/
mv containerd-config.toml /etc/containerd/config.toml
mv containerd.service /etc/systemd/system/
Kubelet-Konfiguration¶
Erstellen Sie die Konfigurationsdatei kubelet-config.yaml:
mv kubelet-config.yaml /var/lib/kubelet/
mv kubelet.service /etc/systemd/system/
Konfigurieren des Kubernetes-Proxys¶
mv kube-proxy-config.yaml /var/lib/kube-proxy/
mv kube-proxy.service /etc/systemd/system/
Anmerkung
Obwohl dies als unzureichende Sicherheit gilt, müssen Sie SELinux möglicherweise vorübergehend oder dauerhaft deaktivieren, wenn beim Starten der erforderlichen systemd-Dienste Probleme auftreten. Die richtige Lösung besteht darin, die erforderlichen Richtliniendateien mit Tools wie ausearch, audit2allow usw. zu analysieren und zu erstellen.
Um SELinux zu entfernen und zu deaktivieren, gehen Sie wie folgt vor:
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
Starten Sie die Worker-Dienste¶
systemctl daemon-reload
systemctl enable containerd kubelet kube-proxy
systemctl start containerd kubelet kube-proxy
Verifizierung¶
Die in diesem Lernprogramm erstellten Compute-Instanzen verfügen nicht über die Berechtigung, diesen Überprüfungsabschnitt abzuschließen. Führen Sie die folgenden Befehle von der jumpbox-Maschine aus.
Listen Sie die registrierten Kubernetes-Knoten auf:
ssh root@server "kubectl get nodes --kubeconfig admin.kubeconfig"
NAME STATUS ROLES AGE VERSION
node-0 Ready <none> 1m v1.32.0
Nachdem Sie alle vorherigen Schritte in diesem Labor sowohl auf node-0 als auch auf node-1 abgeschlossen haben, sollte die Ausgabe des Befehls kubectl get nodes Folgendes anzeigen:
NAME STATUS ROLES AGE VERSION
node-0 Ready <none> 1m v1.32.0
node-1 Ready <none> 10s v1.32.0
Fortsetzung folgt: Konfiguration von kubectl für Remote-Access
Author: Wale Soyinka
Contributors: Steven Spencer, Ganna Zhyrnova