In Unix-ähnlichen Betriebssystemen enthält der Ordner /etc wichtige Konfigurationsdaten. Im Bereich von Kubernetes spielt Etcd eine ähnlich wichtige Rolle. Dabei handelt es sich um einen Key-Value-Datenspeicher, in dem sowohl Konfigurationsdaten als auch Cluster-Informationen gespeichert werden. Der Name "Etcd" ist eine Anspielung auf den /etc-Ordner, mit einem zusätzlichen "d" als Symbol für verteilte Systeme.
Etcd ist der Eckpfeiler Ihres Kubernetes-Clusters und speichert Daten, die für die Service-Erkennung und die Cluster-Verwaltung wichtig sind. Die Sicherung Ihrer Etcd-Daten durch regelmäßige Backups ist von entscheidender Bedeutung für die Vorbereitung auf unvorhergesehene Ausfälle. In diesem Artikel führen wir Sie durch den Prozess der sicheren Sicherung und Wiederherstellung Ihres Etcd-Clusters in einer Kubernetes-Umgebung mithilfe des leistungsstarken Tools etcdctl.

Sichern Ihres Etcd-Clusters
- Überprüfen Sie die Installation von etcdctl: Stellen Sie zunächst sicher, dass Sie etcdctl auf Ihrem System installiert haben. Führen Sie den folgenden Befehl aus, um dies zu überprüfen:
etcdctl version
Wenn etcdctl korrekt installiert ist, erhalten Sie eine Ausgabe, die die Version angibt. Wenn nicht, erhalten Sie die Fehlermeldung "Befehl nicht gefunden".
2. Installieren Sie etcdctl (falls erforderlich): Wenn etcdctl fehlt, folgen Sie den Installationsanweisungen unter der URL. Detaillierte Anleitungen sind für Linux, MacOS und Docker verfügbar.
3. Sammeln Sie Informationen: Nachdem Sie etcdctl zur Verfügung haben, besteht der nächste Schritt darin, die notwendigen Informationen zu beschaffen, um den Sicherungsprozess zu starten. Sie benötigen:
- Endpunkt-Informationen: Bestimmen Sie die Endpunkte für Etcd. Wenn Etcd auf demselben Server läuft, ist der Standardendpunkt https://127.0.0.1:2379. Wenn sich Etcd auf einem anderen Server befindet, ersetzen Sie 127.0.0.1 durch die IP-Adresse des Servers.
- Bescheinigungen: Sie benötigen die folgenden Zertifikate für die Authentifizierung:
- -cert
- -cacert
- -Schlüssel
Rufen Sie mit diesem Befehl Endpunktinformationen ab:
cat /etc/kubernetes/manifests/etcd.yaml | grep liste
Für Informationen über Zertifikate:
cat /etc/kubernetes/manifests/etcd.yaml | grep file
4. Ausführen des Befehls Snapshot speichern: Mit den erforderlichen Informationen ausgestattet, können Sie den Befehl zum Speichern des Snapshots mit etcdctl ausführen:
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save <backup-file-location>
Stellen Sie sicher, dass Sie ETCDCTL_API=3 an den Anfang des Befehls stellen. Dadurch wird sichergestellt, dass etcdctl standardmäßig die v3-API verwendet.
5. Umgebungsvariable setzen (optional): Wenn Sie es vorziehen, die API-Version nicht bei jedem Befehl anzugeben, setzen Sie die Umgebungsvariable mit:
export ETCDCTL_API=3
6. Bestätigen Sie die Sicherung: Nachdem Sie den Befehl snapshot save ausgeführt haben, haben Sie erfolgreich eine Sicherung mit dem Namen etcd-backup.db erstellt. Die letzte Zeile der Ausgabe sollte dies mit der Meldung "snapshot saved at etcd-backup.db" bestätigen.

Wiederherstellung von Etcd aus dem Snapshot
Bevor wir uns mit dem Wiederherstellungsprozess befassen, sollten wir kurz die ersten Schritte besprechen, um den Übergang reibungsloser zu gestalten.
- Überprüfen Sie Pods: Überprüfen Sie die Pods im Standard-Namespace. Wie Sie während des Backup-Prozesses festgestellt haben, wurden keine neuen Pods erstellt, und es sollten keine Ressourcen vorhanden sein.
- Erstellen Sie einen neuen Pod: Um die Auswirkungen des Wiederherstellungsprozesses zu demonstrieren, erstellen Sie einen neuen Pod mit:
kubectl run newpod --image=nginx
3. Beginn der Wiederherstellung: Angenommen, Etcd ist ausgefallen und Sie müssen zum letzten gespeicherten Zustand zurückkehren. Sie verfügen über den zuvor gespeicherten etcd-backup.db-Snapshot.
4. Wiederherstellen mit etcdctl: Um den gespeicherten Snapshot wiederherzustellen, verwenden Sie einen ähnlichen Befehl wie bei der Sicherung, geben aber diesmal ein neues Datenverzeichnis an, in das die Clusterdaten kopiert werden:
ETCDCTL_API=3 etcdctl --data-dir="/var/lib/etcd-backup" \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot restore etcd-backup.db
5. Etcd-Manifest bearbeiten: Wenn die Daten wiederhergestellt sind, müssen Sie die Manifestdatei des Etcd-Pods ändern, um das neue wiederhergestellte Datenverzeichnis als Volume zu verwenden. Öffnen Sie die Etcd-Manifestdatei zur Bearbeitung:
vi /etc/kubernetes/manifests/etcd.yaml
Ändern Sie die entsprechenden Abschnitte in der Datei etcd.yaml.
6. Warten Sie auf den Neustart des Pods: Warten Sie ein paar Minuten, bis der Etcd-Pod mit dem neuen Status neu gestartet ist. Während dieser Zeit erhalten Sie möglicherweise keine Antworten vom API-Server.
7. Überprüfen Sie die Wiederherstellung: Um eine erfolgreiche Wiederherstellung sicherzustellen, überprüfen Sie die Pods im Standard-Namensraum. Wenn Sie ursprünglich einen neuen Pod erstellt haben, sollte dieser nach der Wiederherstellung nicht mehr existieren. Verwenden Sie zur Überprüfung den folgenden Befehl:
kubectl get pods
Herzlichen Glückwunsch! Sie haben Ihren Etcd-Cluster mit einem Backup effektiv gesichert und gezeigt, dass Sie in der Lage sind, es wiederherzustellen, um Ihre Kubernetes-Umgebung vor unerwarteten Ausfällen zu schützen.

