Sichern und Wiederherstellen von Kubernetes-Ressourcen mit Heptio Ark

Wahrscheinlich mussten Sie den Kubernetes-Cluster nach einem Fehler neu erstellen. Haben Sie eine intelligente Backup-Strategie entwickelt, bei der mehrere Tage lang nicht gepflügt werden muss? Ja, Sie können auf einem etcd-Cluster sichern, aber was ist, wenn nur ein Teil des Clusters abfällt oder Sie persistente Volumes wie AWS EBS verwenden?


In solchen Fällen ist es am einfachsten, das Dienstprogramm Heptio Ark zu verwenden .


Mit Heptio können Sie Sicherungen des gesamten Clusters, einzelner Namespaces oder Ressourcentypen erstellen und Sicherungen planmäßig durchführen. Für mich ist der Hauptvorteil von Heptio Ark die Integration mit verschiedenen Cloud-Dienstanbietern, z. B. AWS, Azure, Google Cloud usw. Wenn es also gesichert wird, werden Snapshots der verwendeten persistenten Volumes erstellt.


Lassen Sie uns sehen, wie dieses Dienstprogramm installiert wird und wie einfache und geplante Sicherungen erstellt und anschließend wiederhergestellt werden.


Es wird einen separaten Beitrag über die Sicherung permanenter Volumes geben.


Installation


Installationsanweisungen finden Sie hier: examples / README.md. Dieser Prozess erstellt mehrere benutzerdefinierte Ressourcendefinitionen, RBAC-Regeln (rollenbasierte Zugriffssteuerung), mit denen Heptio eine Sicherung durchführen kann, und die Bereitstellung. Standardmäßig befinden sie sich im heptio-ark-Namespace.


Wichtig! Nach einer erfolgreichen Installation müssen Sie heptio-ark so konfigurieren, dass dem Server mitgeteilt wird, welcher Cloud-Dienstanbieter verwendet werden soll und wo die Sicherungen gespeichert werden sollen. So sieht diese Konfiguration aus:


apiVersion: ark.heptio.com/v1 kind: Config metadata: namespace: heptio-ark name: default backupStorageProvider: name: aws bucket: heptio-backup-bucket config: region: eu-central-1 backupSyncPeriod: 30m gcSyncPeriod: 30m scheduleSyncPeriod: 1m restoreOnlyMode: false 

Sie können es mit dem Befehl anwenden


  kubectl apply -f heptio.yaml 

Heptio weiß jetzt, in welchem ​​Eimer er sichern muss. Auf den Sicherungsspeicherort muss von den Heptio-Server-Herden aus zugegriffen werden können, damit Sie das Instanzprofil mit Zugriff auf diesen Bucket oder Kube2IAM für dynamische herdbasierte Instanzprofile verwenden können.


Schließlich müssen Sie für Sicherungen, Zeitpläne und Wiederherstellungen die Heptio Ark CLI vom GitHub herunterladen.


Fast alle Befehle können über YAML oder JSON als benutzerdefinierte Ressourcendefinitionen ausgeführt werden.


Backup


In diesem kleinen Beispiel habe ich eine einfache Bereitstellung von NGINX und davor einen Dienst im Webserver- Namespace erstellt:


 $ kubectl get all NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/nginx 1 1 1 1 28s NAME DESIRED CURRENT READY AGE rs/nginx-66f5756f9b 1 1 1 28s NAME READY STATUS RESTARTS AGE po/nginx-66f5756f9b-c88ck 1/1 Running 0 28s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/nginx ClusterIP 10.32.0.183 <none> 80/TCP 28s 

Lassen Sie uns ein Backup von der Heptio Ark CLI erstellen:


 $ ark backup create nginx-simple --include-namespaces webserver 

Dieser Befehl sichert nur den Webserver- Namespace. Ohne diesen Parameter erstellt Heptio Ark eine vollständige Sicherung aller Ressourcen im Kubernetes-Cluster. Die Sicherung dauert einige Zeit. Eine Kopie wird im angegebenen Bucket in S3 ( Heptio-Backup-Bucket ) gespeichert . Geben Sie den folgenden Befehl in die CLI ein, um den Status und die Liste aller Sicherungen anzuzeigen:


 $ ark backup get NAME STATUS CREATED EXPIRES SELECTOR nginx-simple Completed 2018-07-08 17:35:09 +0200 CEST 29d <none> 

Wie Sie sehen können, ist die Sicherung abgeschlossen.


Backup-Wiederherstellung


Entfernen wir den Webserver-Namespace (Inline):


 $ kubectl delete ns heptio-test 

Stellen Sie nun den Namespace nach einer „zufälligen“ Löschung und erneut über die Heptio Ark CLI wieder her:


 $ ark restore create --from-backup nginx-simple Restore request "nginx-simple-20180708173924" submitted successfully. Run `ark restore describe nginx-simple-20180708173924` for more details. 

Sie sollten sehen, dass der Namespace und alle Ressourcen (Bereitstellung, Replikatsatz, Sub und Service) wiederhergestellt werden:


 $ kubectl get all NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/nginx 1 1 1 1 20s NAME DESIRED CURRENT READY AGE rs/nginx-66f5756f9b 1 1 1 20s NAME READY STATUS RESTARTS AGE po/nginx-66f5756f9b-9mjvg 1/1 Running 0 20s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/nginx ClusterIP 10.32.0.77 <none> 80/TCP 20s 

Sicherungsstruktur


Um die Sicherungsstruktur anzuzeigen, laden Sie sie einfach aus dem Bucket in S3 oder geben Sie den Befehl Heptio Ark ein:


 $ ark backup download nginx-simple Backup nginx-simple has been successfully downloaded to $PWD/nginx-simple-data.tar.gz 


In der Datei webserver.json unseres Namespace sehen wir eine reguläre Namespace-Ressource.


 { "apiVersion":"v1", "kind":"Namespace", "metadata": { "annotations": { "kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"webserver\",\"namespace\":\"\"}}\n" }, "creationTimestamp":"2018-07-08T15:26:44Z", "name":"webserver", "resourceVersion":"3364", "selfLink":"/api/v1/namespaces/webserver", "uid":"52698ae7-82c3-11e8-8529-0645eb60c3f4" }, "spec": { "finalizers":["kubernetes"] }, "status": { "phase":"Active" } } 

Wenn wir keine vollständige Wiederherstellung benötigen, können wir nur einen Teil mit dem Befehl Heptio Ark wiederherstellen oder direkt zur Sicherung gehen und diesen Teil über kubectl wiederherstellen.


 $ ark schedule create nginx-schedule --schedule="* 10 * * *" --include-namespaces webserver Schedule "nginx-schedule" created successfully. 

Geplante Sicherung


Heptio Ark kann geplante Aufgaben ausführen. Wir geben an, welche Ressourcen und Namespaces in die Sicherung aufgenommen oder von dieser ausgeschlossen werden sollen und wann sie gesichert werden sollen:


 $ ark schedule create nginx-schedule --schedule="* 10 * * *" --include-namespaces webserver Schedule "nginx-schedule" created successfully. 

In diesem Fall wird jeden Tag um 10 Uhr ein Backup erstellt, das nur den Webserver-Namespace enthält. In der Heptio Ark-CLI sehen wir, dass ein Zeitplan angezeigt wurde und Heptio Ark bereits das erste Backup erstellt hat:


 $ ark schedule get NAME STATUS CREATED SCHEDULE BACKUP TTL LAST BACKUP SELECTOR nginx-schedule Enabled 2018-07-08 17:49:00 +0200 CEST * 10 * * * 720h0m0s 25s ago <none> $ ~/Downloads/ark backup get NAME STATUS CREATED EXPIRES SELECTOR nginx-schedule-20180708154900 Completed 2018-07-08 17:49:00 +0200 CEST 29d <none> nginx-simple Completed 2018-07-08 17:35:09 +0200 CEST 29d <none> 

Hier wird angezeigt, dass geplante Sicherungen nach 720 Stunden, dh nach 30 Tagen, gelöscht werden. Wenn Sie eine Sicherung oder einen Zeitplan erstellen, können Sie die Lebensdauer der Kopie angeben - TTL. Nach diesem Zeitraum wird die Sicherung aus dem Repository gelöscht, in unserem Fall AWS.

Source: https://habr.com/ru/post/de423559/


All Articles