Effektive Sicherung und Wiederherstellung eines Kubernetes-Clusters mit TrilioVault
Erfahren Sie, wie Sie mit TrilioVault für Kubernetes (TVK) Ihren Cluster effektiv sichern und wiederherstellen können. Von der Konfiguration bis zur Planung von Sicherungen und Aufbewahrungspolitiken – verbessern Sie die Sicherheit Ihres Kubernetes-Clusters und schützen Sie sich vor Datenverlust.
TrilioVault für Kubernetes (TVK) ist eine cloudnative Lösung, die Ihre Anwendungsdaten und Metadaten sichert, indem sie On-Demand-Backups in einem unabhängigen Speicherrepository speichert. Mit TVK können Sie vollständige oder inkrementelle Backups Ihres Clusters erstellen und im Falle eines Datenverlustes wiederherstellen. Darüber hinaus ermöglicht es Ihnen, von einem Cluster zu einem anderen zu migrieren, Vor- und Nachhooks für Backup- und Wiederherstellungsoperationen auszuführen und Backuppläne zu erstellen. In diesem Blogbeitrag erfahren Sie, wie Sie TVK nutzen können, um Ihren lokalen Kubernetes-Cluster oder einen centron Kubernetes Service zu schützen und Ihre Anwendungen zu sichern.
Bevor Sie beginnen, stellen Sie sicher, dass Sie die erforderlichen Tools und Ressourcen haben: Ein ccenter-Konto, einen Kubernetes-Cluster, Kubectl, einen Speicherort für Ihre Backups sowie Helm und eine TVK-Lizenz.
Schritt 1 – Konfiguration des Kubernetes-Clusters
Bevor Sie TrilioVault installieren, müssen Sie sicherstellen, dass Ihr Kubernetes-Cluster korrekt konfiguriert ist, um eine reibungslose Funktionalität zu gewährleisten. Dazu müssen Sie sicherstellen, dass der Cluster den Container Storage Interface (CSI) unterstützt und dass die volumeSnapshot Custom Resource Definition (CRD) installiert ist.
Um zu überprüfen, ob der CSI-Treiber installiert und konfiguriert ist, führen Sie den Befehl `kubectl get storageclass` aus und überprüfen Sie die Ausgabe. Standardmäßig ist der centron Managed Kubernetes Service mit dem CSI-Treiber `dobs.csi.centron.de` konfiguriert.
Für eine erfolgreiche Installation von TrilioVault wird außerdem die volumeSnapshot CRD benötigt. Überprüfen Sie dies mit dem Befehl `kubectl get crd | grep volumesnapshot`. Stellen Sie sicher, dass die CRD mit den erforderlichen API-Versionen, insbesondere `v1`, unterstützt wird.
Abschließend sollten Sie sicherstellen, dass die CRD die v1 API-Version unterstützt, indem Sie den Befehl `kubectl get crd volumesnapshots.snapshot.storage.k8s.io -o yaml` ausführen und die Ausgabe überprüfen. Die unterstützten Versionen sollten unter `storedVersions` aufgeführt sein.
Nachdem Sie die Konfiguration Ihres Kubernetes-Clusters überprüft haben, sind Sie bereit, TrilioVault zu installieren, was im nächsten Schritt behandelt wird.
Schritt 2 – Installation von TrilioVault für Kubernetes
Nachdem Sie die Konfiguration Ihres Kubernetes-Clusters überprüft haben, ist es an der Zeit, TrilioVault zu installieren. In diesem Schritt werden wir TrilioVault für einen lokalen Kubernetes-Cluster bereitstellen und die Installationen über Helm verwalten. Die Backup-Daten werden im zuvor erstellten S3-kompatiblen Bucket gespeichert.
Es gibt verschiedene Möglichkeiten, TrilioVault zu installieren, je nach Verteilung des Kubernetes-Clusters. In diesem Tutorial verwenden wir Helm und das triliovault-operator-Chart, um TrilioVault zu installieren.
Zuerst fügen Sie das TrilioVault Helm-Repository hinzu und listen die verfügbaren Charts auf. Dann installieren Sie TrilioVault für Kubernetes mit Helm. Dabei werden die Standardparameter aus der TrilioVault Helm-Werte-Datei verwendet.
Die Installation erfolgt über den TVK Operator und den TVK Manager. Der Operator überwacht den Lebenszyklus der Anwendung und führt bei Bedarf automatische Wiederherstellungsvorgänge durch. Der Manager verwaltet verschiedene CRDs und deren Controller sowie einen Webhook-Server zur Validierung und Mutation von CRD-Instanzen.
Nach der Installation überprüfen Sie den Status von TrilioVault, um sicherzustellen, dass die Installation erfolgreich war. Sie können dies über Helm oder direkt mit kubectl tun. Anschließend bestätigen Sie die Installation Ihrer TVK-Lizenz und überprüfen ihren Status sowie die Details, wie z.B. die Ablaufzeit und den Umfang der Lizenz.
Nachdem Sie Ihre TVK-Lizenz erfolgreich angewendet haben, sind Sie bereit, die TVK-Webkonsole zu erkunden und Ihre Backup- und Wiederherstellungsvorgänge zu verwalten.
Schritt 3 – Zugriff auf die TVK-Verwaltungskonsole
Nachdem Sie TrilioVault erfolgreich installiert haben, ist es Zeit, auf die TVK-Verwaltungskonsole zuzugreifen, um Backups zu erstellen und zu verwalten. Diese Konsole bietet eine benutzerfreundliche Oberfläche für das Durchführen von Backup- und Wiederherstellungsvorgängen sowie eine bessere Visualisierung und Inspektion von TVK-Clusterobjekten im Vergleich zur Verwendung von kubectl und CRDs über die Befehlszeile.
Um auf die TVK-Verwaltungskonsole zuzugreifen, müssen Sie zunächst Ihre kubeconfig-Datei für Ihren Kubernetes-Cluster exportieren und den Ingress-Controller-Service für TVK port-forwarden. Nachdem Sie Ihre kubeconfig-Datei exportiert haben, richten Sie den Port-Forwarding ein, um auf die Konsole zuzugreifen.
Nachdem Sie den Port-Forwarding eingerichtet haben, können Sie die Konsole in Ihrem Webbrowser aufrufen, indem Sie zu der entsprechenden URL navigieren. Geben Sie beim Auffordern zur Auswahl der kubeconfig-Datei die zuvor erstellte Datei an.
Bitte beachten Sie, dass TVK die kubeconfig-Datei zur Authentifizierung verwendet, jedoch keine Benutzerdaten speichert. Die Konsole bietet eine Vielzahl von Funktionen zur Verwaltung Ihrer Backup- und Wiederherstellungsvorgänge.
Im nächsten Schritt werden Sie das Speicherbackend von TrilioVault definieren, das als Target bezeichnet wird.
Schritt 4 – Erstellen eines TrilioVault-Ziels zur Speicherung von Backups
TrilioVault benötigt Informationen darüber, wo Ihre Backups gespeichert werden sollen, was als Ziel bezeichnet wird. Es werden folgende Zieltypen unterstützt: S3 und NFS. Dieses Tutorial verwendet den Typ S3. Weitere Informationen finden Sie im Abschnitt Backup-Ziel in der TVK-Dokumentation.
Jedes Ziel benötigt Zugangsdaten zum Bucket, die in einem Secret gespeichert sind. In diesem Schritt erstellen Sie ein TrilioVault-Ziel für Backups und ein Secret zur Speicherung Ihrer Bucket-Zugangsdaten.
Zuerst erstellen Sie das Kubernetes-Secret, das Ihre Zugangsdaten zum S3-Bucket enthält. Erstellen Sie eine Datei namens „trilio-s3-target-secret“ und fügen Sie den folgenden Code hinzu, wobei Sie die hervorgehobenen Werte durch Ihre persönlichen Zugangsdaten ersetzen:
apiVersion: v1
kind: Secret
metadata:
name: trilio-s3-target-secret
namespace: tvk
type: Opaque
stringData:
accessKey: Ihr_Bucket_Access_Key
secretKey: Ihr_Bucket_Secret_Key
Anschließend wenden Sie das Manifest an, um das Secret zu erstellen:
kubectl apply -f trilio-s3-target-secret.yaml -n tvk
Danach erstellen Sie ein Manifest für das Ziel. Erstellen Sie eine neue Datei namens „trilio-s3-target.yaml“ und fügen Sie den folgenden Code hinzu, wobei Sie die hervorgehobenen Werte für bucketName, region und url durch die Informationen Ihres centron-Buckets ersetzen:
apiVersion: triliovault.trilio.io/v1
kind: Target
metadata:
name: trilio-s3-target
namespace: tvk
spec:
type: ObjectStore
vendor: Other
enableBrowsing: true
objectStoreCredentials:
bucketName: Ihr_Bucket_Name
region: Ihre_Bucket_Region
url: https://nyc1.centronspaces.com
credentialSecret:
name: trilio-s3-target-secret
namespace: tvk
thresholdCapacity: 10Gi
Speichern und schließen Sie die Manifestdatei und wenden Sie sie an, um das Zielobjekt zu erstellen:
kubectl apply -f trilio-s3-target.yaml -n tvk
Nachdem Sie das Ziel erstellt haben, überprüfen Sie dessen Status, indem Sie den folgenden Befehl ausführen:
kubectl get target trilio-s3-target -n tvk
Wenn der Status „Available“ ist, wurde das Ziel erfolgreich konfiguriert. Andernfalls kann ein Problem im Konfigurationsprozess vorliegen. In diesem Fall können Sie die Protokolle des Zielvalidierers überprüfen, um das Problem zu finden und zu beheben.
Schritt 5 – Sichern und Wiederherstellen des Kubernetes-Clusters
In diesem Schritt führen Sie eine Sicherung Ihres Kubernetes-Clusters durch. Anschließend löschen Sie die Namespaces und verwenden die Sicherung, um alle wichtigen Anwendungen in diesen Namespaces wiederherzustellen. Sie führen eine Cluster-Wiederherstellungsoperation über den Speicherort des Ziels durch. Derselbe Ablauf gilt, wenn Sie eine Cluster-Migrationsoperation durchführen müssen.
Die Hauptidee besteht darin, eine vollständige Cluster-Sicherung durchzuführen, indem alle wichtigen Namespaces einbezogen werden, die Ihre wesentlichen Anwendungen und Konfigurationen enthalten. Es handelt sich nicht um eine vollständige Cluster-Sicherung und -Wiederherstellung, sondern vielmehr um eine Multi-Namespace-Sicherungs- und Wiederherstellungsoperation. In der Praxis ist dies alles, was benötigt wird, da in Kubernetes alles nach Namespaces organisiert ist.
Erstellen der Kubernetes-Cluster-Sicherung
In diesem Abschnitt erstellen Sie eine Multi-Namespace-Sicherung mithilfe eines ClusterBackupPlan CRD, der alle wichtigen Namespaces aus Ihrem Kubernetes-Cluster anspricht.
Um mit der Cluster-Sicherungsoperation zu beginnen, erstellen Sie einen ClusterBackupPlan, der eine Reihe von Ressourcen definiert, die gesichert werden sollen. Die Spezifikation umfasst den Sicherungszeitplan, das Sicherungsziel und die zu sichernden Ressourcen. Ressourcen können in Form von Helm-Releases, Operatoren oder einfachen Kubernetes-API-Ressourcen definiert werden.
Erstellen Sie mit Ihrem Texteditor eine ClusterBackupPlan-Manifestdatei namens „k8s-cluster-backup-plan.yaml“ und fügen Sie den folgenden Codeblock hinzu, der ein typisches Manifest für die Ausrichtung auf mehrere Namespaces ist:
apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
name: k8s-cluster-backup-plan
namespace: tvk
spec:
backupConfig:
target:
name: trilio-s3-target
namespace: tvk
backupComponents:
– namespace: wordpress
– namespace: mysqldb
– namespace: etcd
Stellen Sie sicher, dass die in backupComponents aufgeführten Namespaces im Cluster vorhanden sind. Beachten Sie, dass kube-system (oder andere Kubernetes-clusterbezogene Namespaces) in backupComponents normalerweise nicht enthalten sind, es sei denn, es gibt einen besonderen Fall, der einige Einstellungen erfordert, die auf dieser Ebene beibehalten werden müssen.
Speichern und schließen Sie die Datei.
Erstellen Sie nun die ClusterBackupPlan-Ressource mit kubectl:
kubectl apply -f k8s-cluster-backup-plan.yaml
Ihre Ausgabe wird wie folgt aussehen:
Output
clusterbackupplan.triliovault.trilio.io/k8s-cluster-backup-plan created
Inspezieren Sie nun den Status des ClusterBackupPlan mit kubectl:
kubectl get clusterbackupplan k8s-cluster-backup-plan -n tvk
Die Ausgabe sieht ähnlich aus wie diese:
Output
NAME TARGET … STATUS
k8s-cluster-backup-plan trilio-s3-target … Available
Überprüfen Sie den Wert in der STATUS-Spalte, der auf „Available“ gesetzt sein sollte.
Sie können den Status des ClusterBackupPlan auch über die TVK Management Console anzeigen. Nach dem Anmelden wählen Sie Backup & Recovery und dann Backupplans aus, um ihn anzuzeigen.
Zu diesem Zeitpunkt haben Sie einen ClusterBackupPlan erstellt. Als Nächstes erstellen Sie eine ClusterBackup, die eine Konfiguration darstellt, die auf den tatsächlichen ClusterBackupPlan in spec.clusterBackupPlan.name verweist. Der ClusterBackupPlan bleibt immer derselbe; Sie können mehrere Sicherungen erstellen, indem Sie diesen in mehrere ClusterBackup-Manifestdateien aktualisieren.
Erstellen Sie nun eine ClusterBackup-Manifestdatei namens „k8s-cluster-backup.yaml“ und fügen Sie den folgenden Codeblock hinzu:
apiVersion: triliovault.trilio.io/v1
kind: ClusterBackup
metadata:
name: k8s-cluster-backup
namespace: tvk
spec:
type: Full
clusterBackupPlan:
name: k8s-cluster-backup-plan
namespace: tvk
Speichern und schließen Sie die Datei.
Erstellen Sie schließlich die ClusterBackup-Ressourcen mit kubectl:
kubectl apply -f k8s-cluster-backup.yaml
Durch Anwenden des ClusterBackup-Manifests wird der Sicherungsvorgang ausgelöst.
Ihre Ausgabe wird wie folgt aussehen:
Output
clusterbackup.triliovault.trilio.io/k8s-cluster-backup created
Inspektieren Sie nun den Status des ClusterBackup mit kubectl:
kubectl get clusterbackup k8s-cluster-backup -n tvk
Die Ausgabe sieht ähnlich aus wie diese:
Output
NAME BACKUPPLAN BACKUP TYPE STATUS … PERCENTAGE COMPLETE
k8s-cluster-backup k8s-cluster-backup-plan Full Available … 100
Überprüfen Sie den Wert in der STATUS-Spalte, der auf „Available“ und der PERCENTAGE COMPLETE auf 100 gesetzt sein sollte.
Sie können den Status der Cluster-Sicherung auch über die TVK Management Console anzeigen. Wählen Sie im Hauptdashboard Überwachung und dann TrilioVault-Überwachung im linken Bereich aus.
Es dauert eine Weile, bis die vollständige Cluster-Sicherung abgeschlossen ist, abhängig davon, wie viele Namespaces, zugehörige Ressourcen und Daten auf den PVCs am Vorgang beteiligt sind. Wenn die Ausgabe wie oben aussieht, wurden alle wichtigen Anwendungsnamespaces, die in den Sicherungsplan einbezogen sind, erfolgreich gesichert.
In diesem Abschnitt haben Sie eine Cluster-Sicherung erstellt. In den nächsten Abschnitten werden Sie die Namespaces löschen und sie dann aus der Sicherung wiederherstellen.
Schritt 6 – Planung von Sicherungen
Das automatische Erstellen von Sicherungen basierend auf einem Zeitplan ist eine sehr nützliche Funktion. Es ermöglicht Ihnen, die Zeit zurückzudrehen und das System auf einen früheren funktionsfähigen Zustand zurückzusetzen, wenn etwas schief geht. Standardmäßig erstellt TrilioVault drei geplante Richtlinien: täglich, wöchentlich und monatlich.
In der TVK-Konsole können Sie die Standardrichtlinien unter Backup & Wiederherstellung und dann Zeitpläne anzeigen. Zeitpläne können für BackupPlan- oder ClusterBackupPlan-CRDs verwendet werden.
Erstellen Sie eine Manifestdatei namens „scheduled-backup-every-5min.yaml“ und fügen Sie den folgenden Code hinzu, der eine typische benutzerdefinierte Zeitplanrichtlinie-CRD ist:
apiVersion: triliovault.trilio.io/v1
kind: Policy
metadata:
name: scheduled-backup-every-5min
namespace: tvk
spec:
type: Schedule
scheduleConfig:
schedule:
– „*/5 * * * *“ # Auslöser alle 5 Minuten
Dieses Manifest erstellt eine geplante Sicherungsrichtlinie namens „scheduled-backup-every-5min“ im Namespace „tvk“. Sie wird verwendet, um alle fünf Minuten eine geplante Sicherung abhängig von den BackupPlan-Objekten auszulösen.
Nachdem Sie das Manifest erstellt haben, können Sie es verwenden, um die Zeitplanrichtlinie zu erstellen:
kubectl apply -f scheduled-backup-every-5min.yaml
Ihre Ausgabe wird wie folgt aussehen:
Output
policy.triliovault.trilio.io/scheduled-backup-every-5min created
Um die Zeitplanrichtlinie anzuwenden, fügen Sie sie einem ClusterBackupPlan-CRD hinzu. Öffnen Sie den ClusterBackupPlan-CRD, den Sie in Schritt 5 erstellt haben, und fügen Sie die markierten Zeilen hinzu:
apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
name: k8s-cluster-backup-plan
namespace: tvk
spec:
backupConfig:
target:
name: trilio-s3-target
namespace: tvk
schedulePolicy:
fullBackupPolicy:
name: scheduled-backup-every-5min
namespace: tvk
backupComponents:
– namespace: wordpress
– namespace: mysqldb
– namespace: etcd
Der ClusterBackupPlan-CRD verweist über das Feld spec.backupConfig.schedulePolicy auf die zuvor definierte Policy-CRD. Sie können separate Richtlinien für vollständige oder inkrementelle Sicherungen erstellen, daher kann die fullBackupPolicy oder incrementalBackupPolicy im spec angegeben werden.
Speichern und schließen Sie Ihre Datei.
In diesem Schritt haben Sie Sicherungen geplant und einer ClusterBackupPlan eine Zeitplanrichtlinie hinzugefügt. Im nächsten Schritt erfahren Sie, wie Sie eine Aufbewahrungspolitik für Ihre Sicherungen einrichten.
Schritt 7 – Erstellung einer Sicherungsaufbewahrungspolitik
In diesem Schritt werden Sie eine Sicherungsaufbewahrungspolitik erstellen, die den Rhythmus Ihrer Sicherungen bestimmt. Aufbewahrungspolitiken sind wichtig, da der Speicher begrenzt ist und teuer werden kann, wenn zu viele Objekte aufbewahrt werden.
Die Aufbewahrungspolitik ermöglicht es Ihnen, die Anzahl der zu behaltenden Sicherungen und den Rhythmus zum Löschen von Sicherungen gemäß den Compliance-Anforderungen festzulegen. Die Aufbewahrungspolitik-CRD bietet eine YAML-Spezifikation, um die Anzahl der zu behaltenden Sicherungen in Tagen, Wochen, Monaten, Jahren, die neuesten usw. zu definieren.
TVK hat auch eine Standard-Aufbewahrungspolitik, die Sie in der TVK-Konsole unter Backup & Wiederherstellung und dann Aufbewahrungspolitiken anzeigen können.
Aufbewahrungspolitiken können für BackupPlan- oder ClusterBackupPlan-CRDs verwendet werden. Erstellen Sie eine neue Datei namens „sample-retention-policy.yaml“ und fügen Sie die folgenden Zeilen hinzu:
apiVersion: triliovault.trilio.io/v1
kind: Policy
metadata:
name: sample-retention-policy
spec:
type: Retention
retentionConfig:
latest: 2
weekly: 1
dayOfWeek: Wednesday
monthly: 1
dateOfMonth: 15
monthOfYear: March
yearly: 1
Dies ist ein typisches Policy-Manifest für den Retention-Typ. Hier ist eine Erklärung für die obige Konfiguration:
- `spec.type`: Definiert den Richtlinientyp: Aufbewahrung oder Zeitplan.
- `spec.retentionConfig`: Beschreibt die Aufbewahrungskonfiguration, wie das Intervall für die Sicherungsaufbewahrung und wie viele behalten werden sollen.
- `spec.retentionConfig.latest`: Maximale Anzahl der neuesten zu behaltenden Sicherungen.
- `spec.retentionConfig.weekly`: Maximale Anzahl der wöchentlichen zu behaltenden Sicherungen.
- `spec.retentionConfig.dayOfWeek`: Wochentag, an dem wöchentliche Sicherungen aufbewahrt werden sollen.
- `spec.retentionConfig.monthly`: Maximale Anzahl der monatlichen zu behaltenden Sicherungen.
- `spec.retentionConfig.dateOfMonth`: Datum des Monats, an dem monatliche Sicherungen aufbewahrt werden sollen.
- `spec.retentionConfig.monthOfYear`: Monat der Sicherung, die für jährliche Sicherungen aufbewahrt werden soll.
- `spec.retentionConfig.yearly`: Maximale Anzahl der jährlichen zu behaltenden Sicherungen.
In der oben konfigurierten Aufbewahrungspolitik würde die Sicherungspolitik jede Woche eine Sicherung am Mittwoch, einmal im Monat am 15. Tag und einmal im Jahr im März aufbewahren. Insgesamt stehen immer die 2 neuesten Sicherungen zur Verfügung.
Der grundlegende Ablauf für das Erstellen eines Aufbewahrungspolitik-Ressourcen ist derselbe wie für geplante Sicherungen. Sie benötigen einen BackupPlan oder einen ClusterBackupPlan-CRD, um auf die Aufbewahrungspolitik zu verweisen, und dann ein Backup- oder ClusterBackup-Objekt, um den Prozess auszulösen.
Um die Aufbewahrungspolitik anzuwenden, öffnen Sie Ihren ClusterBackupPlan-CRD und aktualisieren ihn wie folgt:
apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
name: k8s-cluster-backup-plan
namespace: tvk
spec:
backupConfig:
target:
name: trilio-s3-target
namespace: tvk
retentionPolicy:
fullBackupPolicy:
name: sample-retention-policy
namespace: tvk
backupComponents:
– namespace: wordpress
– namespace: mysqldb
– namespace: etcd
Das Manifest verwendet ein `retentionPolicy`-Feld, um auf die entsprechende Richtlinie zu verweisen. Sie können einen Backup-Plan haben, der beide Arten von Richtlinien setzt, um geplante Sicherungen durchzuführen und sich auch mit Aufbewahrungsstrategien zu befassen – Effektive Sicherung und Wiederherstellung eines Kubernetes-Clusters mit TrilioVault