Zum Inhalt

BackupPolicy

Eine einfache BackupPolicy sieht wie folgt aus:

apiVersion: k8sbackup.afi.ai/v1alpha1
kind: BackupPolicy
metadata:
  name: gold
spec:
  selectors: []
  repoRef: cloud
  schedule:
    fixed:
      hours: [4, 12, 20]
      daysOfWeek: [0, 1, 2, 3, 4, 5, 6]
  encryptionKey: default-encryption-key
  • selectors ist eine Liste von Regeln, die festlegen, welche Manifeste in eine Sicherung aufgenommen werden. Eine leere Selektorenliste bedeutet, dass alle YAML-Dateien eines Namespace in die Sicherungen aufgenommen werden.`
  • repoRef ist der Name eines Repositorys, in dem Archive gespeichert werden. Derzeit wird beim Onboarding eines Mandanten ein Standard-Repository für Sicherungsarchive (cloud) erstellt. Es dient zur Datenspeicherung in der Afi-Cloud. Künftige Updates werden benutzerdefinierte, selbstverwaltete Sicherungs-Repositorys unterstützen.
  • schedule veranlasst die regelmäßige Ausführung von Sicherungen. Ein leerer schedule-Abschnitt bedeutet, dass Sicherungen nur bei manueller Auslösung ausgeführt werden. Beim Konfigurieren eines Zeitplans können Sie über die Liste hours mehrere Sicherungszeitfenster pro Tag und über die Liste daysOfWeek die Wochentage für die Sicherung festlegen. Die Nummerierung in hours beginnt mit 0 für Mitternacht (0–23), die Nummerierung in daysOfWeek mit 0 für Sonntag (0 – Sonntag, 1 – Montag, …, 6 – Samstag). Die Werte in hours werden gemäß der beim Cluster-Onboarding angegebenen Zeitzone interpretiert. Für eine bestimmte Stunde geplante Sicherungen werden voraussichtlich innerhalb eines 15-minütigen Sicherungszeitfensters gestartet. Eine für Stunde 0, also Mitternacht, geplante Sicherung startet beispielsweise voraussichtlich im Zeitfenster von 00:00 bis 00:15 Uhr.
  • encryptionKey ist der Name des von dieser Sicherungsrichtlinie verwendeten Verschlüsselungsschlüssels. Sicherungsverschlüsselungsschlüssel werden im Afi-Portal auf der Registerkarte Service → Settings → Secrets angezeigt und verwaltet. Ein von Afi beim Cluster-Onboarding erstellter Verschlüsselungsschlüssel heißt default-encryption-key. Dies ist der Standardname, er kann jedoch später geändert werden.

Mit dem folgenden Befehl können Sie die in einem Kubernetes-Cluster konfigurierten Sicherungsrichtlinien auflisten (backup-agent ist der Namespace, in dem der Afi-Sicherungsagent installiert ist):

kubectl get backuppolicies

Mit dem folgenden Befehl können Sie eine neue Sicherungsrichtlinie erstellen. Eine beispielhafte YAML-Konfiguration ist oben dargestellt:

kubectl apply -f my-custom-backup-policy.yaml

Selektoren

Dieser Teil einer Sicherungsrichtlinie enthält eine Liste von Filtern. Sie werden auf Objekte in einem geschützten Namespace angewendet und bestimmen, welche YAML-Dateien in Sicherungen aufgenommen werden. Jeder Selektor hat eines der folgenden Formate:

include:
  namespaced: ...
  apiVersion: ...
  kind: ...
  name: ...
  labelSelector: ...

oder

exclude:
  namespaced: ...
  apiVersion: ...
  kind: ...
  name: ...
  labelSelector: ...

Ein include-Selektor fügt einem Snapshot Objekte hinzu, ein exclude-Selektor schließt sie aus. Die Selektoren werden in der Reihenfolge ihrer Definition angewendet.

Jedes Selektorfeld (apiVersion, kind usw.) ist optional. Ein leeres Feld stimmt mit jedem Objekt überein.

Die Funktionsweise der Selektoren lässt sich am besten anhand praktischer Beispiele erklären.

Nur Secrets sichern

selectors:
  - include:
      apiVersion: v1
      kind: Secret

Secrets und ConfigMaps sichern

selectors:
  - include:
      apiVersion: v1
      kind: Secret
  - include:
      apiVersion: v1
      kind: ConfigMap

Nur die Anwendungskonfiguration sichern und persistente Daten ausschließen

selectors:
  - include: {} # zuerst alles einschließen
  - exclude:    # anschließend nicht benötigte Teile ausschließen
      apiVersion: v1
      kind: PersistentVolumeClaim

Umgekehrt nur persistente Daten sichern

selectors:
  - include:
      apiVersion: v1
      kind: PersistentVolumeClaim

Nur mit app.kubernetes.io/name: apache-spark-0 gekennzeichnete Manifeste sichern

selectors:
  - include:
      labelSelector:
        matchLabels:
          - app.kubernetes.io/name: apache-spark-0

Ausführliche Informationen zu Label-Selektoren finden Sie unter https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ und https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#labelselector-v1-meta.