In diesem Dokument wird beschrieben, wie Sie mit bmctl Cluster sichern und wiederherstellen, die mit Distributed Cloud (nur Software) für Bare Metal erstellt wurden. Diese Anleitung gilt für alle Clustertypen.
Was wird gesichert und was nicht?
Der Sicherungs- und Wiederherstellungsprozess von bmctl wird auf der Ebene der Kubernetes-Steuerungsebene ausgeführt und unterscheidet sich von anderen Sicherungslösungen. Bei Backup-Lösungen, die nicht auf Kubernetes basieren, werden Arbeitslastdaten, nichtflüchtiger Speicher und die Hostbetriebssysteme der physischen Maschinen erfasst. Beim bmctl-Sicherungs- und ‑Wiederherstellungsprozess werden Ihre Kubernetes-Cluster wiederhergestellt, ohne dass diese anderen Komponenten gesichert werden.
Status der Steuerungsebene (gesichert durch den bmctl-Sicherungsprozess)
bmctl sichert die folgenden Objekte:
- etcd-Speicher. Alle Kubernetes-Ressourcen und benutzerdefinierten Objekte, die die Konfiguration und den ausgewählten Status des Clusters definieren, z. B. Pod-Spezifikationen, Deployments, ConfigMaps und Secrets.
- PKI-Zertifikate. Zertifikate, die für die sichere Kommunikation innerhalb des Clusters verwendet werden.
- Knotenkonfigurationsdateien und ‑manifeste. Konfigurationen, die sich auf die Clusterknoten beziehen.
Speicher für Arbeitslast und VM-Laufzeit (nicht durch den bmctl-Sicherungsprozess gesichert)
Die folgenden Daten werden von bmctl nicht gesichert:
- Live-Pod- und Containerlaufzeitstatus.
bmctlspeichert keine aktiven Prozesse und In-Memory-Anwendungsdaten. Nach einer Wiederherstellung startet Kubernetes Pods anhand der etcd-Spezifikationen neu. Nicht gespeicherte In-Memory-Zustände gehen verloren. - Nichtflüchtiger Speicher
bmctlsichert keine Daten, die in nichtflüchtigen Volumes, von LVP erstellten Volumes oder externen Speichertreibern gespeichert sind. - VM-Laufwerke Mit
bmctlwerden keine Inhalte der virtuellen Festplatte der VM gesichert, z. B. Datenbanken, Dateien oder der Betriebssystemstatus in der VM.
Sie müssen Kubernetes-native oder In-Guest-Sicherungsmechanismen verwenden, um Anwendungsdaten und den VM-Status zu schützen. Wenn Ihr zugrunde liegender Speichertreiber CSI-Volume-Snapshots unterstützt, verwenden Sie Standard-Kubernetes-Volume-Snapshots, um Kopien von nichtflüchtigen Volumes zu einem bestimmten Zeitpunkt zu erstellen. Weitere Informationen zum Konfigurieren des Speichers finden Sie unter Speicher – Übersicht.
Sicherungs-Agents im Gastbetriebssystem von VM Runtime-VMs ausführen oder anwendungsnative Sicherungstools in Kubernetes-Arbeitslasten bereitstellen.
Betriebssysteme für physische Hosts (nicht unterstützt)
Behandeln Sie physische Linux-Betriebssysteme auf Google Distributed Cloud-Knoten als temporäre Infrastruktur. Die Kubernetes-Netzwerkarchitektur unterstützt das Wiederherstellen von Betriebssystem-Images auf Hostebene nicht. Daher unterstützt Google die Installation von Host-Level-Sicherungs-Agents von Drittanbietern nicht direkt auf dem Host-Betriebssystem und die Wiederherstellung physischer Knoten aus Image-Sicherungen auf Betriebssystemebene oder Laufwerk-Snapshots.
Wenn Sie physische Sicherungs-Agents von Drittanbietern direkt auf dem Host-Linux-Betriebssystem installieren, kann dies zu schwerwiegenden Risiken führen.
Viele Sicherungs-Agents installieren proprietäre Kernel-Module oder Filtertreiber auf Blockebene, um Änderungen zu verfolgen und lokale Festplattenblöcke während Snapshot-Vorgängen zu sperren. Dies kann zu den folgenden Problemen führen:
- Die etcd-Datenbank kann ihre Write-Ahead-Logs nicht erweitern, Knoten-Heartbeats laufen ab, der Raft-Konsens schlägt fehl und Cluster werden instabil.
- Nicht unterstützte Drittanbieter-Kernel-Treiber stehen im Konflikt mit Low-Level-Kernel-Routinen und der Containerlaufzeit, was dazu führt, dass Clusterupgrades fehlschlagen.
- Das Wiederherstellen eines physischen Knotens aus einer Image-Sicherung oder einem Laufwerk-Snapshot verstößt gegen das Raft-Konsensprotokoll. Die etcd-Datenbank wird nicht mehr mit den Logs auf den Knoten der Steuerungsebene synchronisiert und der Clusterstatus wird schwerwiegend beschädigt.
- Worker-Knoten werden nicht mehr mit der „Source of Truth“ des API-Servers synchronisiert, Dataplane V2-IP-Adressen (Cilium) überschneiden sich und Traffic wird verworfen.
Wenn Sie einen physischen Knoten wiederherstellen möchten, bei dem das Betriebssystem oder die Hardware ausgefallen ist, stellen Sie kein Betriebssystem-Image wieder her. Entfernen Sie den Knoten stattdessen sauber aus dem Cluster, installieren Sie ein sauberes Basisbetriebssystem neu und fügen Sie den Knoten dem Knotenpool wieder hinzu. Eine detaillierte Anleitung zur Wiederherstellung finden Sie unter Fehlerhaften Knoten zurücksetzen.
Wenn Sie weitere Unterstützung benötigen, wenden Sie sich an den Cloud Customer Care. Weitere Informationen zu Supportressourcen finden Sie unter Support erhalten. Dazu gehören auch die folgenden:- Voraussetzungen für das Eröffnen einer Supportanfrage.
- Tools zur Fehlerbehebung, z. B. Ihre Umgebungskonfiguration, Logs und Messwerte.
- Unterstützte Komponenten.
Cluster sichern
Mit dem Befehl bmctl backup cluster werden die etcd-Daten und PKI-Zertifikate des Clusters in einer TAR-Datei zusammengefasst. Die etcd-Datenbank ist der zentrale Datenspeicher für alle Clusterdaten. Sie enthält alle Kubernetes-Objekte und benutzerdefinierten Ressourcen, die zum Verwalten des Clusterstatus erforderlich sind. Die PKI-Zertifikate werden über TLS authentifiziert.
Diese Daten werden von der Steuerungsebene des Clusters oder von einer der Steuerungsebenen für eine Hochverfügbarkeitsbereitstellung (HA) gesichert.
Die TAR-Datei für die Sicherung enthält vertrauliche Anmeldedaten, einschließlich der Dienstkontoschlüssel und des SSH-Schlüssels. Speichern Sie Sicherungsdateien an einem sicheren Ort. Um eine unbeabsichtigte Dateisichtbarkeit zu verhindern, verwendet der Sicherungsprozess von Google Distributed Cloud nur speicherinterne Dateien.
Sichern Sie Ihre Cluster regelmäßig, um dafür zu sorgen, dass die Snapshot-Daten relativ aktuell sind. Passen Sie die Sicherungsrate entsprechend der Häufigkeit signifikanter Änderungen an Ihren Clustern an.
Die Version bmctl, mit der Sie einen Cluster sichern, muss mit der Version des Verwaltungsclusters übereinstimmen.
Wenn Sie den Node Agent auf Ihren Clustern installiert haben, muss das Verzeichnis /tmp auf dem Administrator- und allen Zielknoten 12 GB freien Speicherplatz haben. Wenn Sie die Größe des /tmp-Verzeichnisses für Ihre Zielknoten nicht ändern können, lesen Sie den Abschnitt Kapazität des lokalen Speichers für Zielknoten ändern.
Wenn Sie die Größe des Verzeichnisses /tmp für den Administrator-Knoten nicht ändern können, lesen Sie den Abschnitt Lokale Speicherkapazität für einen Administrator-Knoten ändern.
So sichern Sie einen Cluster:
Prüfen Sie, ob Ihr Cluster ordnungsgemäß mit funktionierenden Anmeldedaten und SSH-Verbindungen zu allen Knoten funktioniert.
Der Sicherungsprozess besteht darin, Ihren Cluster in einem als funktionierend bekannten Zustand zu erfassen, damit Sie den Vorgang wiederherstellen können, wenn ein schwerwiegender Fehler auftritt.
Prüfen Sie den Cluster mit dem folgenden Befehl:
bmctl check cluster -c CLUSTER_NAME --kubeconfig ADMIN_KUBECONFIGErsetzen Sie Folgendes:
CLUSTER_NAME: der Name des Clusters, den Sie sichern möchten.- Ersetzen Sie dabei
ADMIN_KUBECONFIGdurch den Pfad der kubeconfig-Datei für den Administratorcluster.
Führen Sie den folgenden Befehl aus, um dafür zu sorgen, dass sich der Zielcluster nicht im Abgleichsstatus befindet:
kubectl describe cluster CLUSTER_NAME -n CLUSTER_NAMESPACE --kubeconfig ADMIN_KUBECONFIGDabei gilt:
CLUSTER_NAME: der Name des zu sichernden Clusters.CLUSTER_NAMESPACE: der Namespace für den Cluster. Standardmäßig sind die Cluster-Namespaces für Google Distributed Cloud der Name des Clusters, demcluster-vorangestellt ist. Wenn Sie Ihren Cluster beispielsweisetestnennen, hat der Namespace einen Namen wiecluster-test.- Ersetzen Sie dabei
ADMIN_KUBECONFIGdurch den Pfad der kubeconfig-Datei für den Administratorcluster.
Prüfen Sie in der Befehlsausgabe im Abschnitt
Status, obConditionsvom TypReconcilingist.Wie im folgenden Beispiel gezeigt, bedeutet ein Status von
Falsefür dieseConditions, dass der Cluster stabil und für die Sicherung bereit ist.... Status: ... Cluster State: Running ... Control Plane Node Pool Status: ... Conditions: Last Transition Time: 2023-11-03T16:37:15Z Observed Generation: 1 Reason: ReconciliationCompleted Status: False Type: Reconciling ...Führen Sie den folgenden Befehl aus, um den Cluster zu sichern:
bmctl backup cluster -c CLUSTER_NAME --kubeconfig ADMIN_KUBECONFIGDabei gilt:
CLUSTER_NAME: der Name des zu sichernden Clusters.ADMIN_KUBECONFIG: der Pfad zur kubeconfig-Datei des Administratorclusters.
Standardmäßig wird die TAR-Sicherungsdatei, die im Workspace-Verzeichnis gespeichert ist (standardmäßig
bmctl-workspace), auf Ihrer Administrator-Workstation gespeichert. Die TAR-Datei heißtCLUSTER_NAME_backup_TIMESTAMP.tar.gz, wobeiCLUSTER_NAMEder Name des zu sichernden Clusters undTIMESTAMPdas Datum und die Uhrzeit der Sicherung sind. Wenn der Clustername beispielsweisetestuserlautet, hat die Sicherungsdatei einen Namen wietestuser_backup_2006-01-02T150405Z0700.tar.gz.Verwenden Sie das Flag
--backup-file, um einen anderen Namen und einen anderen Speicherort für Ihre Sicherungsdatei anzugeben.
Die Sicherungsdatei läuft nach einem Jahr ab und der Clusterwiederherstellungsprozess funktioniert nicht mit abgelaufenen Sicherungsdateien.
Cluster wiederherstellen
Die Wiederherstellung eines Clusters aus einer Sicherung ist das letzte Mittel, das angewendet werden sollte, wenn ein Cluster komplett fehlgeschlagen ist und nicht auf andere Weise wieder funktionsfähig gemacht werden kann. Dies kann beispielsweise der Fall sein, wenn die etcd-Daten beschädigt sind oder wenn sich der etcd-Pod in einer Absturzschleife befindet.
Die TAR-Datei für die Sicherung enthält vertrauliche Anmeldedaten, einschließlich der Dienstkontoschlüssel und des SSH-Schlüssels. Um eine unbeabsichtigte Dateisichtbarkeit zu verhindern, verwendet der Wiederherstellungsprozess von Google Distributed Cloud nur speicherinterne Dateien.
Die Version bmctl, mit der Sie einen Cluster wiederherstellen, muss mit der Version des Verwaltungsclusters übereinstimmen.
So stellen Sie einen Cluster wieder her:
Achten Sie darauf, dass alle Knotenmaschinen, die zum Zeitpunkt der Sicherung für den Cluster verfügbar waren, ordnungsgemäß funktionieren und erreichbar sind.
Achten Sie darauf, dass die SSH-Verbindung zwischen den Knoten mit den SSH-Schlüsseln funktioniert, die zum Zeitpunkt der Sicherung verwendet wurden.
Diese SSH-Schlüssel werden im Rahmen des Wiederherstellungsprozesses wiederhergestellt.
Achten Sie darauf, dass die zum Zeitpunkt der Sicherung verwendeten Dienstkontoschlüssel weiterhin aktiv sind.
Diese Dienstkontoschlüssel werden für den wiederhergestellten Cluster reaktiviert.
Führen Sie den folgenden Befehl aus, um einen Administrator-, Hybrid- oder eigenständigen Cluster wiederherzustellen:
bmctl restore cluster -c CLUSTER_NAME --backup-file BACKUP_FILEErsetzen Sie Folgendes:
CLUSTER_NAME: der Name des Clusters, den Sie wiederherstellen.BACKUP_FILE: der Pfad und der Name der Sicherungsdatei, die Sie verwenden.
Führen Sie den folgenden Befehl aus, um einen Nutzercluster zu wiederherzustellen:
bmctl restore cluster -c CLUSTER_NAME --backup-file BACKUP_FILE \ --kubeconfig ADMIN_KUBECONFIGErsetzen Sie Folgendes:
CLUSTER_NAME: der Name des Clusters, den Sie wiederherstellen.BACKUP_FILE: der Pfad und der Name der Sicherungsdatei, die Sie verwenden.ADMIN_KUBECONFIG: der Pfad zur kubeconfig-Datei des Administratorclusters.
Am Ende des Wiederherstellungsprozesses wird eine neue kubeconfig-Datei für den wiederhergestellten Cluster generiert.
Wenn die Wiederherstellung abgeschlossen ist, prüfen Sie anhand der folgenden Schritte, ob sie erfolgreich war:
Führen Sie die folgenden Befehle aus, um die Bereitschaft des Knotens und die System-Pods zu prüfen, die mit der generierten kubeconfig-Datei ausgeführt werden:
Es gibt zwei Arten von etcd-Pods:
etcd-HOST_NAME, was dem Haupt-Podetcdentsprichtetcd-events-HOST_NAME, was dem Podetcd-eventsentspricht
kubectl get pods -n kube-system --kubeconfig GENERATED_KUBECONFIG kubectl get nodes --kubeconfig GENERATED_KUBECONFIGFühren Sie für jeden etcd-Pod Folgendes aus, um den etcd-Status zu prüfen:
kubectl exec ETCD_POD_NAME -n kube-system \ --kubeconfig GENERATED_KUBECONFIG \ -- /bin/sh -c 'ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt --key=/etc/kubernetes/pki/etcd/peer.key \ --cert=/etc/kubernetes/pki/etcd/peer.crt endpoint health'Für ein fehlerfreies etcd-Mitglied sollte die Antwort so aussehen:
https://127.0.0.1:2379 is healthy: successfully committed proposal: took = 11.514177msFühren Sie für jeden
etcd-events-Pod den folgenden Befehl aus, um denetcd-events-Zustand zu prüfen:kubectl exec ETCD_EVENTS_POD_NAME -n kube-system \ --kubeconfig GENERATED_KUBECONFIG \ -- /bin/sh -c 'ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2382 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt --key=/etc/kubernetes/pki/etcd/peer.key \ --cert=/etc/kubernetes/pki/etcd/peer.crt endpoint health'Für ein fehlerfreies etcd-events-Mitglied sollte die Antwort so aussehen:
https://127.0.0.1:2382 is healthy: successfully committed proposal: took = 14.308148ms
Fehlerbehebung
Wenn Sie Probleme mit dem Sichern oder Wiederherstellen haben, können Ihnen die folgenden Abschnitte bei der Fehlerbehebung helfen.
Wenn Sie weitere Unterstützung benötigen, wenden Sie sich an den Google-Support.
Nicht genügend Arbeitsspeicher während einer Sicherung oder Wiederherstellung
Während der Sicherung oder Wiederherstellung erhalten Sie möglicherweise Fehlermeldungen, die nicht sehr selbsterklärend sind oder nicht klar die nächsten Schritte angeben. Wenn die Workstation, auf der Sie den Befehl bmctl ausführen, nicht viel RAM hat, ist möglicherweise nicht genügend Arbeitsspeicher für die Sicherung oder Wiederherstellung verfügbar.
In Google Distributed Cloud Version 1.13 und höher kann der Parameter --use-disk im Befehl „backup“ verwendet werden. Um die Dateiberechtigungen beizubehalten, werden mit diesem Parameter die Berechtigungen der Dateien geändert. Daher muss der Nutzer, der den Befehl ausführt, ein Root-Nutzer sein (oder sudo verwenden).
Fehlende Berechtigungen für Dateien bei der Wiederherstellung
Nach einer erfolgreichen Wiederherstellung kann das Löschen des Bootstraps mit einer Fehlermeldung wie der folgenden fehlschlagen:
Error: failed to restore node config files: sftp: "Failure" (SSH_FX_FAILURE)
Dieser Fehler kann bedeuten, dass einige Verzeichnisse, die für die Wiederherstellung erforderlich sind, nicht beschreibbar sind.
In Google Distributed Cloud-Version 1.14 und höher werden deutlichere Fehlermeldungen dazu angezeigt, welche Verzeichnisse beschreibbar sein müssen. Achten Sie darauf, dass die gemeldeten Verzeichnisse beschreibbar sind, und aktualisieren Sie die Berechtigungen für Verzeichnisse bei Bedarf.
Aktualisierung des SSH-Schlüssels nach einer Sicherung bricht den Wiederherstellungsprozess ab
SSH-bezogene Vorgänge während der Wiederherstellung können fehlschlagen, wenn der SSH-Schlüssel nach der Sicherung aktualisiert wird. In diesem Fall ist der neue SSH-Schlüssel für die Wiederherstellung ungültig.
Um dieses Problem zu beheben, können Sie den ursprünglichen SSH-Schlüssel vorübergehend wieder hinzufügen und dann die Wiederherstellung ausführen. Nach Abschluss der Wiederherstellung können Sie den SSH-Schlüssel rotieren.
Für einen Node Agent-Knoten kann kein Back-up erstellt werden
Wenn Sie den Node-Agent verwenden und eine Fehlermeldung erhalten, dass beim Erstellen der Sicherung keine Archivdatei erstellt werden kann, ähnlich wie diese:
I0508 15:29:36.831790 657351 backup_cluster.go:255] Retrying backup node: 128.187.102.133, due to error: failed receive chunk data: rpc error: code = Unknown desc = archiver.CreateArchiveWithList
failed: failed to create archive file: failed to copy data from file: var/lib/etcd-events/member/snap/db, file size: 26136576, copy bytes: 12478464,
error: write /tmp/uploadFileTemp1561164777: no space left on device
Prüfen Sie, ob auf dem Admin-Knoten und allen Zielknoten 12 GB freier Speicherplatz im Verzeichnis /tmp verfügbar sind. Wenn Sie die Größe des Verzeichnisses /tmp für Ihre Zielknoten nicht ändern können, lesen Sie den Abschnitt Lokale Speicherkapazität für Node Agent-Sicherungen erhöhen.
Nachdem Sie bestätigt haben, dass im Verzeichnis /tmp für den Admin-Knoten und alle Zielknoten 12 GB freier Speicherplatz vorhanden sind, versuchen Sie es noch einmal mit der Sicherung.