Wartung und Betrieb
Ziel
In diesem Projekt geht es um wiederkehrende Betriebsaufgaben in einem mit kubeadm
aufgebauten Kubernetes-Cluster. Sie werden:
- den Zustand und die Restlaufzeit der Kubernetes-Zertifikate prüfen
- Zertifikate mit
kubeadmrotieren - ein Snapshot-Backup von ETCD erstellen
- ETCD aus einem Snapshot wiederherstellen
Hilfsmittel
- Versuchen Sie, die unten stehenden Aufgaben mit Hilfe der Schulungsunterlagen und Ihres bisherigen Wissens aus den vorherigen Labs eigenständig zu lösen.
- Sollten Sie dabei Probleme haben, finden Sie bei jeder Aufgabe einen ausklappbaren Block, in dem der Lösungsweg beschrieben wird.
Aufgabe 1 - Zertifikate prüfen
1.1: Ablaufdaten der Kubernetes-Zertifikate anzeigen
- Lassen Sie sich den Status und die Restlaufzeit der durch
kubeadmverwalteten Zertifikate anzeigen. - Nutzen Sie:
kubeadm certs check-expiration
1.2: Zertifikatsdateien direkt inspizieren
- Schauen Sie sich zusätzlich mindestens ein Zertifikat direkt mit
opensslan. - Prüfen Sie Subject, Issuer und Gültigkeitszeitraum.
- Beispiel für das API-Server-Zertifikat:
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text
Aufgabe 2 - Zertifikate rotieren
2.1: Alle durch kubeadm verwalteten Zertifikate erneuern
- Rotieren Sie alle durch
kubeadmverwalteten Zertifikate.
kubeadm certs renew all
- Prüfen Sie direkt anschließend erneut die Restlaufzeiten.
kubeadm certs check-expiration
- Die Restlaufzeiten sollten jetzt angepasst sein.
2.2: Statische Pods der Control Plane neu laden
Die Zertifikate sind nun erneuert, die laufenden Komponenten verwenden aber unter Umständen noch die alten Dateien im Speicher. Da die Control-Plane-Komponenten in einem Kubeadm-Cluster typischerweise als statische Pods laufen, müssen diese neu gestartet werden.
- Prüfen Sie die statischen Pod-Manifeste.
- Starten Sie die betroffenen Komponenten kontrolliert neu.
crictl
- Sie können
crictlverwenden, um die statischen Pods zu beobachten sicher zu stellen, dass sie komplett entfernt wurden:
crictl ps
- Beobachten Sie, wie die Pods wieder erscheinen.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Die Manifest-Dateien liegen unter:
ls /etc/kubernetes/manifests - Typischer Inhalt:
kube-apiserver.yamlkube-controller-manager.yamlkube-scheduler.yamletcd.yaml
- Eine einfache Möglichkeit für einen Neustart ist, eine Datei kurz aus dem Manifest-Verzeichnis zu verschieben und danach zurückzulegen. Der Kubelet entfernt den statischen Pod und erstellt ihn anschließend neu.
- Beispiel für den API-Server:
mkdir -p /etc/kubernetes/manifests.bak mv /etc/kubernetes/manifests/* /etc/kubernetes/manifests.bak/ sleep 20 mv /etc/kubernetes/manifests.bak/* /etc/kubernetes/manifests/ - Beobachten Sie parallel:
crictl ps
Aufgabe 3 - ETCD Snapshot-Backup erstellen
3.1: ETCDCTL und ETCDUTL installieren
- Installieren Sie
etcdctlundetcdutlauf der Controlplane Node, um mit ETCD zu interagieren.
cd /root
ETCD_VER=v3.6.9
ARCH=amd64
curl -L "https://github.com/etcd-io/etcd/releases/download/${ETCD_VER}/etcd-${ETCD_VER}-linux-${ARCH}.tar.gz" -o etcd.tar.gz
tar -xzf etcd.tar.gz
cd etcd-${ETCD_VER}-linux-${ARCH}
cp etcdctl etcdutl /usr/local/bin/
3.2: Funktionsprüfung nach der Zertifikatsrotation
- Vergewissern Sie sich, dass alle Nodes und System-Pods wieder betriebsbereit sind.
kubectl get nodes
kubectl get pods -n kube-system
- Prüfen Sie zusätzlich die ETCD-Health.
export ETCDCTL_API=3
etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt \
--key=/etc/kubernetes/pki/etcd/healthcheck-client.key \
endpoint health
3.3: ETCD-Zugangsdaten aus dem statischen Pod-Manifests ermitteln
- Öffnen Sie das ETCD-Manifest.
cat /etc/kubernetes/manifests/etcd.yaml - Identifizieren Sie:
- den Datenpfad
- den Listen-Port
- die Zertifikatsdateien für
etcdctl
- Achten Sie insbesondere auf:
--data-dir=...--listen-client-urls=...--cert-file=...--key-file=...--trusted-ca-file=...
- In vielen Kubeadm-Umgebungen sind dies:
- Datenverzeichnis:
/var/lib/etcd - Endpoint:
https://127.0.0.1:2379 - CA:
/etc/kubernetes/pki/etcd/ca.crt - Cert:
/etc/kubernetes/pki/etcd/healthcheck-client.crt - Key:
/etc/kubernetes/pki/etcd/healthcheck-client.key
- Datenverzeichnis:
3.4: Snapshot sichern
- Erstellen Sie ein Snapshot-Backup von ETCD.
- Speichern Sie dieses z. B. unter
/opt/backup/etcd-snapshot.db:- Legen Sie zuerst ein Backup-Verzeichnis an:
mkdir -p /opt/backup - Setzen Sie die API-Version:
export ETCDCTL_API=3 - Erstellen Sie das Snapshot-Backup:
etcdctl \ --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt \ --key=/etc/kubernetes/pki/etcd/healthcheck-client.key \ snapshot save /opt/backup/etcd-snapshot.db
- Legen Sie zuerst ein Backup-Verzeichnis an:
3.5: Snapshot verifizieren
- Prüfen Sie, dass das Snapshot erfolgreich erstellt wurde.
- Lassen Sie sich die Metadaten des Snapshots anzeigen.
- Zeigen Sie den Status an:
export ETCDCTL_API=3 etcdutl snapshot status /opt/backup/etcd-snapshot.db -w table
- Zeigen Sie den Status an:
Aufgabe 4 - Daten verändern, um ein Restore nachvollziehen zu können
Damit der Effekt des Restores sichtbar wird, verändern Sie den Clusterzustand nach dem Backup.
4.1: Testressource anlegen
- Erstellen Sie einen Namespace und einen Testpod
- Prüfen Sie, dass die Ressource im Cluster vorhanden ist.
- Löschen Sie einen Pod im default Namespace, z.B. den Pod
nginx-test.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Beispiel:
kubectl create namespace restore-demo kubectl -n restore-demo run test-pod --image=nginx - Prüfen Sie:
kubectl get ns kubectl -n restore-demo get pods - Löschen Sie einen Pod im default Namespace, z.B. den Pod
nginx-test:kubectl delete pod nginx-test - Prüfen Sie, dass der Pod gelöscht wurde:
kubectl get pods
Aufgabe 5 - ETCD Restore durchführen
Wichtiger Hinweis
Ein Restore von ETCD ist ein tiefgreifender Eingriff in die Control Plane. Führen Sie diese Schritte in Produktionsumgebungen nur mit großer Vorsicht und vorheriger Absicherung durch Backups durch.
5.1: ETCD stoppen
- Stoppen Sie zunächst alle static Pods. Hier ist insbesondere der kube-apiserver wichtig.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Verschieben Sie das Manifest temporär aus dem Manifest-Verzeichnis:
mkdir -p /etc/kubernetes/manifests.bak mv /etc/kubernetes/manifests/* /etc/kubernetes/manifests.bak/ - Prüfen Sie crictl bis die Pods gestoppt sind:
crictl ps
5.2: Bestehendes Datenverzeichnis sichern
- Sichern Sie das aktuelle ETCD-Datenverzeichnis, bevor Sie den Restore ausführen.
mv /var/lib/etcd /var/lib/etcd.bak
5.3: Snapshot wiederherstellen
- Stellen Sie das Snapshot wieder her:
export ETCDCTL_API=3 etcdutl snapshot restore /opt/backup/etcd-snapshot.db \ --data-dir /var/lib/etcd
5.4: ETCD wieder starten
-
Starten Sie die statischen Pods wieder, indem Sie die Manifest-Dateien zurück in das Verzeichnis verschieben:
mv /etc/kubernetes/manifests.bak/* /etc/kubernetes/manifests/ -
Warten Sie, bis die Static Pods wieder laufen und der API-Server erreichbar ist.
- Prüfen Sie den Clusterzustand nach dem Restore.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Beobachten Sie zunächst lokal den Container- oder Pod-Status mit
crictl ps. - Sobald der API-Server wieder erreichbar ist, prüfen Sie:
kubectl get nodes kubectl get pods kubectl get ns
Abschluss
Sie haben in diesem Hands-On zwei zentrale Betriebsaufgaben für Kubeadm-basierte Kubernetes-Cluster durchgeführt:
- Sie haben Kubernetes-Zertifikate geprüft und rotiert.
- Sie haben ein ETCD-Snapshot erstellt, validiert und wiederhergestellt.
Diese beiden Aufgaben gehören zu den wichtigsten administrativen Tätigkeiten in der Absicherung und Wartung einer Kubernetes-Control-Plane.