LovePhy - Fotolia

Kubernetes-Containerinfrastrukturen richtig sichern

In Kubernetes-Umgebungen gilt es nicht nur die einzelnen Container zu sichern, sondern auch die Daten der Infrastruktur sind wichtig. Der Beitrag zeigt, sich dies umsetzen lässt.

In Kubernetes-Umgebungen ist die Datensicherung eine wesentliche Komponente, um die Integrität und Verfügbarkeit von Anwendungsdaten zu gewährleisten. Dies erfordert die Implementierung von Backup-Strategien, die auf die spezifischen Anforderungen von containerisierten Anwendungen abgestimmt sind.

Strategien zur Datensicherung

Die Auswahl einer geeigneten Backup-Strategie hängt von mehreren Faktoren ab, darunter die Art der Daten, die Service-Level-Anforderungen (SLA) und die Architektur der Kubernetes-Cluster. Zwei verbreitete Ansätze für Container-Backups sind:

Snapshot-basierte Backups: Hierbei werden Momentaufnahmen der Daten-Volumes erstellt, die eine schnelle Wiederherstellung ermöglichen. Tools wie Velero oder Kasten bieten Mechanismen zur Automatisierung dieser Prozesse.

Datei-basierte Backups: Diese Methode ist geeignet für Anwendungen, die regelmäßige, inkrementelle Backupserfordern. Tools wie Restic können in Kubernetes integriert werden, um Backups auf Dateiebene zu ermöglichen.

Tool-Auswahl für die Datensicherung

Velero ist ein weit verbreitetes Open-Source-Tool zur Datensicherung und Wiederherstellung in Kubernetes. Es ermöglicht das Erstellen von Backups der Kubernetes-Objekte und der zugehörigen Persistent Volumes. Beispiele für die Verwendung sind:

  • Backup erstellen: velero backup create <BACKUP-NAME>
  • Backup wiederherstellen: velero restore create --from-backup <BACKUP-NAME>

Kasten K10 bietet eine umfassende Datensicherungslösung für Kubernetes, die sowohl Snapshots als auch Backups auf Anwendungsebene unterstützt.

Restic ist ein Open-Source-Backup-Tool, das sich für dateibasierte Backups eignet. Es kann in Kubernetes integriert werden, um regelmäßige, inkrementelle Backups zu ermöglichen. Beispiele dafür sind:

  • Backup erstellen: restic backup /pfad/zum/verzeichnis
  • Backup wiederherstellen: restic restore <SNAPSHOT-ID> --target /pfad/zur/wiederherstellung

Best Practices für die Datensicherung in Kubernetes

Um Daten in Kubernetes zu sichern, sollten sich Admins an verschiedene Best Practices halten. Diese entsprechen generell auch den Vorgehensweisen in anderen Umgebungen, sollten für Kubernetes aber ebenfalls umgesetzt werden:

  • Regelmäßige Backups: Regelmäßige Backups helfen auch in Kubernetes-Umgebungen dabei Datenverlust zu vermeiden.
  • Test der Wiederherstellung: Die Integrität der Backups durch Wiederherstellungstests ist vor allem in komplexen Szenarien, wie beim Einsatz von Kubernetes wichtig.
  • Offsite-Backup: Backups sollten an einem externen Standort gespeichert werden, um sie vor lokalen Ausfällen zu schützen. Das kann ein physischer externer Standort oder eine Cloud-Plattform sein.
  • Automatisierung: Der Backup-Prozess sollte in produktiven Umgebungen automatisiert werden, um menschliche Fehler zu minimieren.
  • Dokumentation: Die Backup- und Wiederherstellungsprozesse sollten sehr detailliert dokumentiert werden.

Sicherung relevanter Kubernetes-Objekte und Beachtungspunkte

In Kubernetes-Umgebungen ist die Sicherung bestimmter Objekte entscheidend, um die Kontinuität und Integrität der Anwendungen zu gewährleisten. Zu den kritischen Objekten gehören:

Persistent Volumes (PVs): Sie enthalten die eigentlichen Daten der Anwendungen. Eine regelmäßige Sicherung ist unerlässlich, um Datenverluste zu verhindern. Tools wie Velero, Metallic.io oder Portworx können Snapshots von Persistent Volumes erstellen und diese bei Bedarf wiederherstellen.

ConfigMaps und Secrets: Diese Objekte speichern Konfigurationsdaten und sensible Informationen. Ihre Sicherung ist wichtig, um die Konfiguration und das Sicherheitsniveau der Anwendungen aufrechtzuerhalten.

Deployments, StatefulSets und DaemonSets: Die Sicherung dieser Objekte ist notwendig, um den Zustand der Anwendungen nach einem Ausfall wiederherzustellen. Hierbei sollte beachtet werden, dass neben den Objekten selbst auch deren aktuelle Konfigurationen gesichert sind.

Kubernetes-Cluster-Ressourcen: Dazu gehören Rollen, Rollenbindungen und Netzwerkrichtlinien. Sie sind essenziell für die Sicherheit und Zugriffskontrolle innerhalb des Clusters.

Beim Sichern dieser Objekte sollten folgende Aspekte beachtet werden:

  • Konsistenz: Sicherstellen, dass die Backups konsistent sind, insbesondere bei Stateful Applications.
  • Automatisierung: Die Automatisierung von Backups reduziert menschliche Fehler und sorgt für regelmäßige und verlässliche Backups.
  • Wiederherstellungsplan: Ein klar definierter Plan für die Wiederherstellung der Objekte ist entscheidend, um im Falle eines Ausfalls schnell reagieren zu können.

Neben Bordmitteln wie kubectl zum Exportieren und Wiederherstellen von Objektkonfigurationen, kommen auch Open-Source-Tools wie Velero zum Einsatz, die eine umfassendere Backup- und Wiederherstellungsfunktionalität bieten. Velero ermöglicht beispielsweise die Sicherung von gesamten Namespaces, inklusive der darin enthaltenen Objekte, und unterstützt das Backup von PVs über Cloud-Provider-spezifische Schnittstellen. Restic kann als Ergänzung dienen, um dateibasierte Backups für bestimmte Workloads zu realisieren. Die Kombination aus Bordmitteln und spezialisierten Tools ermöglicht eine umfassende und flexible Sicherungsstrategie in Kubernetes-Umgebungen.

Abbildung 1: Kubectl kann auch für die Datensicherung genutzt werden, zum Beispiel zum Exportieren von Daten.
Abbildung 1: Kubectl kann auch für die Datensicherung genutzt werden, zum Beispiel zum Exportieren von Daten.

Datenexport und -wiederherstellung mit kubectl

kubectl, das Command Line Interface (CLI) für Kubernetes, ermöglicht es, Konfigurationen von Kubernetes-Objekten zu exportieren und wiederherzustellen. Diese Funktionalität ist besonders nützlich für die Sicherung und Wiederherstellung von nicht-persistenten Daten wie Konfigurationen und Zuständen von Kubernetes-Ressourcen.

Mit kubectl get, gefolgt vom Typ des Objekts und dem Namen, können die Konfigurationen eines bestimmten Kubernetes-Objekts in einer YAML- oder JSON-Datei exportiert werden. Der Zusatz -o yaml oder -o json bestimmt das Format der Ausgabe. Beispiel:

Export eines Deployments:

Der folgende Befehl exportiert die Konfiguration des angegebenen Deployments in eine YAML-Datei mit der Bezeichnung deployment.yaml:

kubectl get deployment <DEPLOYMENT-NAME> -o yaml > deployment.yaml

Um ein Objekt aus einer exportierten Konfigurationsdatei wiederherzustellen, wird kubectl apply verwendet. Dieser Befehl erstellt oder aktualisiert Ressourcen basierend auf der Konfigurationsdatei, zum Beispiel so:

kubectl apply -f deployment.yaml

Mit diesem Befehl wird das Deployment aus der deployment.yaml-Datei im aktuellen Kubernetes-Cluster wiederhergestellt oder aktualisiert.

Es ist wichtig zu beachten, dass diese Methode hauptsächlich für die Sicherung und Wiederherstellung von Konfigurationen und Definitionen von Kubernetes-Objekten geeignet ist. Für die Sicherung von persistenten Daten, die in Volumes gespeichert sind, sind zusätzliche Tools oder Mechanismen erforderlich. Des Weiteren sollte beim Wiederherstellen von Objekten sichergestellt werden, dass die betreffenden Ressourcen mit den aktuellen Anforderungen und dem Zustand des Clusters kompatibel sind. Anpassungen an den Konfigurationsdateien können erforderlich sein, um Änderungen in der Clusterumgebung oder in den Anwendungsanforderungen zu berücksichtigen.

Erfahren Sie mehr über Backup-Lösungen und Tools