Eine nächtliche Wiederherstellungsübung durch einen Agenten
Ein Snapshot hilft nur, wenn er sich wiederherstellen lässt, und wissen kannst du das nur, indem du einen wiederherstellst. Dieses Rezept lässt einen Agenten die Wiederherstellung jede Nacht auf Staging beweisen: Er schreibt eine Markierung, macht einen Snapshot, schreibt eine zweite Markierung, stellt den Snapshot an Ort und Stelle wieder her und prüft, dass die erste Markierung zurückgekommen ist und die zweite nicht. Dann berichtet er.
Was du brauchst
Abschnitt betitelt „Was du brauchst“- Staging als eigenen Cluster,
upcheck-stagingaus Lernschritt 4, mit seinen Snapshots in deinem S3-Bucket. - Eine Zeit, in der Staging weg sein darf. Eine Wiederherstellung hält die Kubernetes-API des Clusters an, solange sie läuft. Im Labor dauerte die Wiederherstellung 160 Sekunden, und die API war etwa 35 Sekunden nach dem Start zurück. Eine Wiederherstellung wird sofort eingereiht; sie wartet nicht auf das Wartungsfenster, also leg die Übung selbst in das Fenster von Staging.
- Einen API-Schlüssel aus API keys & agents, angelegt von einem Team-Admin, mit allen vier Scopes:
k3s:read, um die Operationen zu verfolgen,k3s:writefür den Snapshot,k3s:accessfür eine Kubeconfig undk3s:destructivefür die Wiederherstellung. - Einen Ort für den Bericht: ein Issue, eine Chatnachricht, eine Mail; wohin dein Agent eben schreiben kann.
Die Übung
Abschnitt betitelt „Die Übung“Gib deinem Agenten diese Schritte, oder schreib sie als Skript, das die REST-API aufruft. Jeder Schritt nennt das MCP-Tool und den Endpunkt unter …/k3s/clusters/upcheck-staging/.
-
Eine Kubeconfig holen.
request_kubeconfigmitroleadmin, dannget_kubeconfig_result(POST access/,GET access/<id>/result/), lokal entschlüsselt mitpaasbox_kubeconfig.py. Hol sie vor dem Snapshot: Die Wiederherstellung setzt den Zustand des Clusters auf den Snapshot zurück, und mit ihm den ServiceAccount hinter jeder Kubeconfig, die später ausgestellt wurde. -
Die erste Markierung schreiben.
Terminal-Fenster kubectl -n default create configmap drill-before --from-literal=at="$(date -u +%FT%TZ)" -
Den Snapshot machen.
create_snapshot(POST snapshots/) reiht ihn ein. Fragget_operation(GET operations/<id>/) ab, bisstatesucceededist; im Labor war ein Snapshot nach 25 Sekunden im Bucket. Der neueste Name inlist_snapshots(GET snapshots/) ist der, der wiederhergestellt wird. -
Die zweite Markierung schreiben, die die Wiederherstellung entfernen muss:
Terminal-Fenster kubectl -n default create configmap drill-after --from-literal=at="$(date -u +%FT%TZ)" -
Wiederherstellen.
restore_snapshot(POST restore/) mit dem Namen des Snapshots undconfirmgleichupcheck-staging, dem Namen des Clusters. Fragget_operationab, bis siesucceededoderfailedist. Die Schritte sindstop_k3s,reset_restore,start_k3s,wait_apiundforget_stale_nodes; der letzte wartet zwei Minuten, bevor er Nodes entfernt, die nicht zurückgekommen sind. -
Prüfen.
Terminal-Fenster kubectl -n default get configmap drill-before drill-afterkubectl -n upcheck get saasapp upcheckdrill-beforemuss da sein, mit seiner Zeit,drill-aftermuss weg sein, und die App muss wiederReadyerreichen.get_clustermussstatereadyzeigen und keine Zustandsaussage, die schlechter ist als vorher. Ergänze die Prüfungen, die deine App braucht, etwa eine Anfrage an ihre Health-Seite. -
Berichten und aufräumen. Schick, was bestanden hat und was nicht, den Namen des Snapshots, die IDs der beiden Operationen und wie lange jede gedauert hat. Dann lösch
drill-before.
Schlägt ein Schritt fehl, hält der Agent dort an und berichtet ihn mit dem fehlgeschlagenen Schritt und der Meldung der Operation aus get_operation. Er versucht es nicht noch einmal: Eine zweite Wiederherstellung auf einem Cluster, der eine nicht geschafft hat, braucht zuerst deinen Blick.
Wer die Wiederherstellung bestätigt
Abschnitt betitelt „Wer die Wiederherstellung bestätigt“Nachts ist niemand da, der ja sagt. Das Portal prüft, dass confirm der Name des Clusters ist; das hält den Agenten davon ab, einen Cluster wiederherzustellen, den er nicht genannt hat. Es prüft nicht, dass eine Person zugestimmt hat. Die Scopes eines Schlüssels gelten für jeden Cluster deines Teams, der Schlüssel, der Staging wiederherstellen darf, darf also auch die Produktion wiederherstellen. Drei Wege, das in der Hand zu behalten:
- Lass die Übung als Skript laufen, das du gelesen hast, mit
upcheck-stagingdarin festgeschrieben, und halte den Schlüssel nur dort, wo das Skript läuft. - Oder starte den Agenten jeden Morgen selbst und bestätige die Wiederherstellung an seiner Rückfrage. Dann ist es eine Übung am Morgen, keine nächtliche.
- Und halte die Produktion in einem Team, zu dem dieser Schlüssel nicht gehört, und Staging im Team des Schlüssels: Dann erreicht er die Produktion gar nicht.
Leitplanken für Agenten sagt, was jede Grenze aufhält.
Was die Übung nicht beweist
Abschnitt betitelt „Was die Übung nicht beweist“- Deine Volumes. Ein Snapshot hält den Zustand des Clusters, nicht die Daten in deinen Volumes. Eine Wiederherstellung an Ort und Stelle lässt die Platte des Servers, wie sie ist: Im Labor waren die Daten in einem Volume danach unversehrt. Im Snapshot waren sie nie.
- Deine Datenbank. Postgres auf der PaaSbox Platform hat eigene Backups, pro Anwendung. Den Zustand des Clusters wiederherzustellen, stellt keine Datenbank wieder her; das prüfst du mit der eigenen Wiederherstellung der Datenbank.
- Einen neuen Server. Ist der Server verloren, hat eine Wiederherstellung an Ort und Stelle nichts, worauf sie laufen kann. Eine Wiederherstellung auf einen neuen Server ist Geplant.
- Einen Bucket, dessen Schlüssel du selbst hältst. Das Labor nutzte einen Bucket, dessen Schlüssel das Portal hielt; mit deinen eigenen Schlüsseln ist die Wiederherstellung noch nicht gelaufen In Arbeit.