- Kubernetes-Cluster werden basierend auf etcd-Snapshots wiederhergestellt
- Für Disaster Recovery konfigurieren
Für Disaster Recovery konfigurieren
Hinweis:
Bei dieser Lösung wird davon ausgegangen, dass sowohl Kubernetes-Cluster, einschließlich der Control-Plane- als auch Worker-Knoten, bereits vorhanden sind.Konfiguration planen
Hinweis:
Bei dieser Lösung wird davon ausgegangen, dass sowohl Kubernetes-Cluster, einschließlich der Control-Plane- als auch Worker-Knoten, bereits vorhanden sind. Die in diesem Playbook bereitgestellten Empfehlungen und Utilitys prüfen nicht die Kapazität und Konfiguration von Ressourcen, Control Plane oder Worker-Knoten.Die Wiederherstellung kann, wie hier beschrieben, in Clustern angewendet werden, die primär "mirror" sind (gleiche Anzahl von Control-Plane-Knoten, gleiche Anzahl von Worker-Knoten). Bei den Prozeduren wird davon ausgegangen, dass ein primäres Kubernetes-Cluster, das mit kubeadm
erstellt wurde, vorhanden ist. Hostnamen im sekundären System sind so konfiguriert, dass sie primär nachahmen, wie in den nächsten Absätzen beschrieben. Dann wird das sekundäre Cluster auch mit kubeadm
erstellt (auch wenn die erforderliche Hostnamensauflösung nicht berücksichtigt wird).
Geben Sie bei der Planung der Konfiguration die folgenden Anforderungen für Restore
ein:
- Bestätigen Sie, dass die erforderlichen Worker-Knoten und -Ressourcen im primären Knoten sekundär verfügbar sind. Dazu gehören Shared Storage Mounts, Load Balancer und Datenbanken, die von den Pods und Systemen verwendet werden, die in den wiederherzustellenden Namespaces verwendet werden.
- Konfigurieren Sie die Hostnamensauflösung so, dass die von der Steuerungs- und Worker-Ebene verwendeten Hostnamen sekundär gültig sind.
Beispiel: Wenn Ihre primäre Site das Cluster wie folgt auflöst:
[opc@olk8-m1 ~]$ kubectl get nodes -A NAME STATUS ROLES AGE VERSION olk8-m1 Ready control-plane 552d v1.25.12 olk8-m2 Ready control-plane 552d v1.25.12 olk8-m3 Ready control-plane 2y213d v1.25.12 olk8-w1 Ready <none> 2y213d v1.25.12 olk8-w2 Ready <none> 2y213d v1.25.12 olk8-w3 Ready <none> 2y213d v1.25.12 [opc@olk8-m1 ~]$ nslookup olk8-m1 Server: 169.254.169.254 Address: 169.254.169.254#53 Non-authoritative answer: Name: olk8-m1.k8dbfrasubnet.k8dbvcn.oraclevcn.com Address: 10.11.0.16
Dann muss die sekundäre Site dieselben Knotennamen verwenden. Im vorherigen Beispielknoten in der Control Plane ist der Hostname in Region 2 mit einem anderen IP identisch.[opc@k8dramsnewbastion ~]$ nslookup olk8-m1 Server: 169.254.169.254 Address: 169.254.169.254#53 Non-authoritative answer: Name: olk8-m1.sub01261629121.k8drvcnams.oraclevcn.com Address: 10.5.176.144 [opc@k8dramsnewbastion ~]$
Die resultierende Konfiguration in einer sekundären Konfiguration (nach Verwendung vonkubeadm
zum Erstellen des Clusters und Hinzufügen der Worker-Knoten) verwendet genau dieselben Knotennamen, selbst wenn interne IPs und andere Werte verschoben werden.[opc@k8dramsnewbastion ~]$ kubectl get nodes -A NAME STATUS ROLES AGE VERSION olk8-m1 Ready control-plane 552d v1.25.11 olk8-m2 Ready control-plane 552d v1.25.11 olk8-m3 Ready control-plane 2y213d v1.25.11 olk8-w1 Ready <none> 2y213d v1.25.11 olk8-w2 Ready <none> 2y213d v1.25.11 olk8-w3 Ready <none> 2y213d v1.25.11
- Verwenden Sie eine ähnliche "Hostnamen-Aliasing" für die Frontend-Adresse
kube-api
.Hinweis:
Ihr primäres Kubernetes-Cluster darf keine IPs für das Frontend
kube-api
verwenden. Sie müssen einen Hostnamen verwenden, damit dieses Frontend im sekundären System verknüpft werden kann. Im Skript maak8s-kube-api-alias.sh finden Sie ein Beispiel dafür, wie Sie Ihrem vorhandenen primärenkube-api
-System einen Hostnamenalias hinzufügen.Beispiel: Die Auflösung derkube-api
-Adresse der primären Adresse lautet wie folgt:[opc@olk8-m1 ~]$ grep server .kube/config server: https://k8lbr.paasmaaoracle.com:6443 [opc@olk8-m1 ~]$ grep k8lbr.paasmaaoracle.com /etc/hosts 132.145.247.187 k8lbr.paasmaaoracle.com k8lbr
Dann musskube-api
des sekundären Benutzers denselben Hostnamen verwenden (Sie können ihn einer anderen IP zuordnen):[opc@k8dramsnewbastion ~]$ grep server .kube/config server: https://k8lbr.paasmaaoracle.com:6443 [opc@k8dramsnewbastion ~]$ grep k8lbr.paasmaaoracle.com /etc/hosts 144.21.37.81 k8lbr.paasmaaoracle.com k8lbr
Dazu können Sie virtuelle Hosts, die lokale/etc/hosts
-Auflösung oder einen anderen DNS-Server in jedem Speicherort verwenden. Um die Hostnamensauflösungsmethode zu bestimmen, die von einem bestimmten Host verwendet wird, suchen Sie nach dem Wert des Hosts-Parameters in der Datei/etc/nsswitch.conf
auf dem Host.-
Wenn Sie Hostnamen lokal auf dem Host auflösen möchten, machen Sie die Dateieingabe zum ersten Eintrag für den Parameter
hosts
. Wennfiles
der erste Eintrag für den Parameter hosts ist, werden Einträge in der Hostdatei/etc/hosts
zuerst zur Auflösung von Hostnamen verwendet.Angeben der Auflösung des lokalen Hostnamens in der Datei
/etc/nsswitch.conf
:hosts: files dns nis
-
Wenn Sie Hostnamen mit DNS auf dem Host auflösen möchten, machen Sie den Eintrag
dns
zum ersten Eintrag für den Parameter "hosts". WennDNS
der erste Eintrag für den Parameterhosts
ist, werden zuerst DNS-Servereinträge verwendet, um Hostnamen aufzulösen.Angeben der DNS-Hostnamensauflösungsdatei
/etc/nsswitch.conf
:hosts: dns files nis
Aus Gründen der Einfachheit und Konsistenz empfiehlt Oracle, dass alle Hosts innerhalb einer Site (Produktions-Site oder Standbysite) dieselbe Hostnamensauflösungsmethode verwenden (Hostnamen lokal auflösen oder Hostnamen mit separaten DNS-Servern oder einem globalen DNS-Server auflösen).
Die "Host Name Aliasing"-Technik wird seit vielen Jahren in Disaster Protection for Middleware Systems eingesetzt. Details und Beispiele finden Sie in der Dokumentation von Oracle, einschließlich des Oracle Fusion Middleware Disaster Recovery Guide und anderer Dokumente zu Oracle Cloud Disaster Protection, wie Oracle WebLogic Server for Oracle Cloud Infrastructure Disaster Recovery und SOA Suite auf Oracle Cloud Infrastructure Marketplace Disaster Recovery.
-
- Erstellen Sie das sekundäre Cluster mit demselben Hostnamen für den Frontend-Load Balancer
kube-api
wie in der primären Datenbank.Führen Sie diesen Schritt aus, nachdem Ihre Hostnamenauflösung bereit ist. Weitere Informationen finden Sie in der Dokumentation zum Kubernetes-Toolkubeadm
. Verwenden Sie dieselbenkubeadm
- und Kubernetes-Versionen wie in der primären Version. Containerlaufzeiten können sich verzögern, Sie sollten jedoch dieselben Versionen der Kubernetes-Infrastruktur in beiden Regionen verwenden.Beispiel: Wenn das primäre Cluster wie folgt erstellt wurde:kubeadm init --control-plane-endpoint $LBR_HN:$LBR_PORT --pod-network-cidr=10.244.0.0/16 --node-name $mnode1 --upload-certs --v=9
Verwenden Sie dann genau dieselben
$LBR_HN:$LBR_PORT
- und CIDR-Werte in der sekundären wie in der primären Datenbank. Dasselbe gilt, wenn Sie andere Tools zur Clustererstellung verwenden, wie kOps und kubesparay. - Stellen Sie beim Hinzufügen von zusätzlichen Control-Plane- oder Worker-Knoten sicher, dass Sie dieselben Knotennamen in Primär- und Sekundärknoten verwenden.
kubeadm join $LBR_HN:$LBR_PORT --token $token --node-name $host --discovery-token-ca-cert-hash $token_ca --control-plane --certificate-key $cp_ca
- Nachdem das sekundäre Cluster konfiguriert wurde, müssen beim Abrufen der Knoteninformationen aus kubernetes dieselben Hostnamen angezeigt werden.
Die $host-Variablen, die für jede Control Plane und jeden Worker-Knoten sekundär verwendet werden, müssen mit den in der primären Ebene verwendeten Variablen identisch sein.
Primäres Cluster
Führen Sie den folgenden Befehl auf der primären Ebene aus, um den Status, die Rolle, das Alter, die Version, die interne IP, die externe IP, das BS-Image, die Kernelversion und die Containerlaufzeit zu bestätigen:Im Folgenden finden Sie eine Beispielausgabe.[opc@olk8-m1 ~]$ kubectl get nodes -o wide
[opc@olk8-m1 ~]$ kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME olk8-m1 Ready control-plane 578d v1.25.12 10.11.0.16 <none> Oracle Linux Server 7.9 4.14.35-1902.302.2.el7uek.x86_64 cri-o://1.26.1 olk8-m2 Ready control-plane 578d v1.25.12 10.11.210.212 <none> Oracle Linux Server 7.9 5.4.17-2136.301.1.3.el7uek.x86_64 cri-o://1.26.1 olk8-m3 Ready control-plane 2y238d v1.25.12 10.11.0.18 <none> Oracle Linux Server 7.9 4.14.35-2047.527.2.el7uek.x86_64 cri-o://1.26.1 olk8-w1 Ready <none> 2y238d v1.25.12 10.11.0.20 <none> Oracle Linux Server 7.9 4.14.35-1902.302.2.el7uek.x86_64 cri-o://1.26.1 olk8-w2 Ready <none> 2y238d v1.25.12 10.11.0.21 <none> Oracle Linux Server 7.9 4.14.35-1902.302.2.el7uek.x86_64 cri-o://1.26.1 olk8-w3 Ready <none> 2y238d v1.25.12 10.11.0.22 <none> Oracle Linux Server 7.9 4.14.35-1902.302.2.el7uek.x86_64 cri-o://1.26.1 [opc@olk8-m1 ~]$
Führen Sie den folgenden Befehl auf der primären Ebene aus, um zu ermitteln, wo die Kubernetes-Control Plane und das Core-DNS ausgeführt werden.[opc@olk8-m1 ~]$ kubectl cluster-info
Sekundäres Cluster
Führen Sie den folgenden Befehl auf der Sekundärseite aus, um den Status, die Rolle, das Alter, die Version, die interne IP, die externe IP, das BS-Image, die Kernelversion und die Containerlaufzeit zu bestätigen:[opc@k8dramsnewbastion ~]$ kubectl get node -o wide
Im Folgenden finden Sie eine Beispielausgabe.[opc@k8dramsnewbastion ~]$ kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME olk8-m1 Ready control-plane 579d v1.25.11 10.5.176.144 <none> Oracle Linux Server 8.7 5.15.0-101.103.2.1.el8uek.x86_64 containerd://1.6.21 olk8-m2 Ready control-plane 579d v1.25.11 10.5.176.167 <none> Oracle Linux Server 8.7 5.15.0-101.103.2.1.el8uek.x86_64 containerd://1.6.21 olk8-m3 Ready control-plane 2y239d v1.25.11 10.5.176.154 <none> Oracle Linux Server 8.7 5.15.0-101.103.2.1.el8uek.x86_64 containerd://1.6.21 olk8-w1 Ready <none> 2y239d v1.25.11 10.5.176.205 <none> Oracle Linux Server 8.7 5.15.0-101.103.2.1.el8uek.x86_64 containerd://1.6.22 olk8-w2 Ready <none> 2y239d v1.25.11 10.5.176.247 <none> Oracle Linux Server 8.7 5.15.0-101.103.2.1.el8uek.x86_64 containerd://1.6.22 olk8-w3 Ready <none> 2y239d v1.25.11 10.5.176.132 <none> Oracle Linux Server 8.7 5.15.0-101.103.2.1.el8uek.x86_64 containerd://1.6.22 [opc@k8dramsnewbastion ~]$ kubectl cluster-info Kubernetes control plane is running at https://k8lbr.paasmaaoracle.com:6443 CoreDNS is running at https://k8lbr.paasmaaoracle.com:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. [opc@k8dramsnewbastion ~]$
Führen Sie den folgenden Befehl sekundär aus, um anzugeben, wo die Kubernetes-Control Plane und das Core-DNS ausgeführt werden.[opc@k8dramsnewbastion ~]$ kubectl cluster-info
Wenn die Standardeinstellungen für die Clustererstellung
kubeadm
lauten, verwendetetcd
dieselben Ports in primärer und sekundärer Datenbank. Wenn das Cluster auf der sekundären Seite verschiedene Ports verwenden muss, müssen Sie die Skripte ändern, um es zu verarbeiten. Sie können verschiedene Speicherorte in Primär- und Sekundärspeicherorten für die Datenbanketcds
verwenden. Die Skripte kümmern sich um die Wiederherstellung an dem entsprechenden Speicherort, den das sekundäre Cluster füretcd
verwendet. - Installieren Sie
etcdctl
sowohl im primären als auch im sekundären Verzeichnis (Knoten, die Backup- und Restore-Skripte ausführen).Die Skripte für Backup und Restore verwendenetcdctl
, um Informationen aus dem Cluster abzurufen undetcd
-Snapshots zu erstellen und anzuwenden. Informationen zur Installation vonetcdctl
finden Sie in der Dokumentation https://github.com/etcd-io/etcd/releases. - Stellen Sie sicher, dass die entsprechenden Firewall- und Sicherheitsregeln vorhanden sind, damit der Knoten, der die Backup- und Restore-Vorgänge ausführt, für diesen Zugriffstyp aktiviert ist.Die Skripte müssen außerdem mit kubectl auf das Cluster zugreifen und die verschiedenen Knoten über SSH und HTTP (für Shellbefehle und
etcdctl
-Vorgänge) abrufen.
Konfigurieren
Für Disaster Recovery konfigurieren.
Die Schritte für eine Wiederherstellung umfassen:
- Erstellen Sie ein
etcd
-Backup an einem primären Speicherort. - Senden Sie das Backup an den sekundären Standort.
- Stellen Sie dieses
etcd
-Backup in einem sekundären Cluster wieder her.
Gehen Sie wie folgt vor:
- Erstellen Sie ein
etcd
-Backup in einem primären Kubernetes-Cluster.- Laden Sie ALLE Skripte für
etcd
Snapshot DR aus dem Abschnitt "Code herunterladen" dieses Dokuments herunter.Hinweis:
Alle Skripte müssen sich im selben Pfad befinden, da die Hauptskripte andere Hilfsskripte verwenden. - Rufen Sie die advert_port aus der Konfiguration eines Control-Plane-Knotens
etcd
ab.[opc@olk8-m1 ~]$ sudo grep etcd.advertise-client-urls /etc/kubernetes/manifests/etcd.yaml | awk -F ":" '{print $NF}' 2379
Und dasselbe fürinit_port
:[opc@olk8-m1 ~]$ sudo grep initial-advertise-peer-urls /etc/kubernetes/manifests/etcd.yaml | awk -F ":" '{print $NF}' 2380
Diese Ports sind die Standardports und werden von allen
etcd
-Pods der Control Plane verwendet. In seltenen Fällen, in denenetcd
an die Verwendung eines andereninit
- undadvertise
-Ports in jedem Knoten angepasst wurde, müssen Sie die Skripte so anpassen, dass sie diese berücksichtigen. Sie können den Wert fürinfra_pod_list
auch anpassen, wenn andere Netzwerk-Plug-ins verwendet werden oder andere relevante Pods oder Deployments nach der Wiederherstellung in Ihrem bestimmten Fall neu gestartet werden müssen. Im Allgemeinen kann es jedoch auf die in der Datei angegebenen Werte gesetzt werden. - Bearbeiten Sie das Skript
maak8s.env
, und aktualisieren Sie die Variablen entsprechend Ihrer Umgebung.Die folgendemaak8s.env
-Beispieldatei ist:[opc@olk8-m1 ~]$ cat maak8s.env #sudo ready user to ssh into the control plane nodes export user=opc #ssh key for the ssh export ssh_key=/home/opc/KeyMAA.ppk #etcdctl executable's location export etcdctlhome=/scratch/etcdctl/ #etcd advertise port export advert_port=2379 #etcd init cluster port export init_port=2380 #infrastructure pods that will be restarted on restore export infra_pod_list="flannel proxy controller scheduler"
- Führen Sie das Skript
maak8-etcd-backup.sh
aus, und geben Sie die folgenden Felder in dieser Reihenfolge als Argumente an:- Das Verzeichnis, in dem das Backup gespeichert wird
- Ein "LABEL/TEXT" mit einer Beschreibung des Backups
- Der Speicherort der Clusterkonfiguration zur Ausführung von
kubectl
-Vorgängen
Beispiel:[opc@olk8-m1 ~]$ ./maak8-etcd-backup.sh /backup-volumes/ "ETCD Snapshot after first configuration " /home/opc/.kubenew/config
Das Skript führt die folgenden Schritte aus:
- Erstellt einen
etcd
-Snapshot vom Masterknotenetcd
- Erstellt eine Kopie der aktuellen Konfiguration jedes Control-Plane-Knotens (Manifeste und Certs für jeden Control-Plane-Knoten), einschließlich der Signaturschlüssel für das Cluster
- Zeichnet die Liste der Knoten, Pods, Services und Clusterkonfiguration auf
- Speichert alle oben genannten Informationen in einem mit dem Datum gekennzeichneten Verzeichnis. Wenn das im Befehlszeilenargument angegebene Verzeichnis
/backup-volume
lautet, wird das Backup unter/backup-volume/etcd_snapshot_date
des Backups gespeichert. Beispiel:/backup-volume/etcd_snapshot_2022-08-29_15-56-59
.
- Laden Sie ALLE Skripte für
- Kopieren Sie das gesamte Verzeichnis (
/backup-volume/etcd_snapshot_date
) in das sekundäre Cluster.- Verwenden Sie ein
sftp
-Tool, oder erstellen Sie einen tar mit dem Verzeichnis, und senden Sie ihn an den sekundären Speicherort. - Dekomprimieren oder entpacken Sie die Datei, um sie im sekundären System wie im primären System verfügbar zu machen.
- Notieren Sie sich das Datumslabel im Backup (im obigen Beispiel wäre es 2022-08-29_15-56-59).
Beispiel:[opc@olk8-m1 ~]$ scp -i KeyMAA.ppk -qr /backup-volume/etcd_snapshot_2022-08-29_15-56-59 154.21.39.171:/restore-volume [opc@olk8-m1 ~]$ ssh -i KeyMAA.ppk 154.21.39.171 "ls -lart /restore-volume" total 4 drwxrwxrwt. 6 root root 252 Aug 30 15:11 .. drwxrwxr-x. 3 opc opc 47 Aug 30 15:12 . drwxrwxr-x. 5 opc opc 4096 Aug 30 15:12 etcd_snapshot_2022-08-29_15-56-59
- Verwenden Sie ein
- Wenn das Backup im sekundären Speicherort verfügbar ist, führen Sie die folgenden Schritte aus, um es wiederherzustellen:
- Laden Sie ALLE Skripte für
etcd
-Snapshot DR aus dem Abschnitt "Code herunterladen" in den sekundären Regionsknoten herunter, der die Wiederherstellung ausführt.Beachten Sie, dass für diesen Knoten auchetcdctl
installiert undkubectl
auf das sekundäre Cluster zugreifen muss.Hinweis:
Da die Hauptskripte andere Hilfsskripte verwenden, müssen sich bei der Ausführung der verschiedenen Schritte alle Skripte im selben Pfad befinden. - Bearbeiten Sie das Skript
maak8s.env
, und aktualisieren Sie die Variablen entsprechend Ihrer Umgebung.Sie können den Benutzer-, SSH- undetcdctl
-Speicherort entsprechend den sekundären Knoten ändern. Die Portsadvert
undinit
müssen jedoch mit den Ports identisch sein, die in der primären Datenbank verwendet werden.Die folgendemaak8s.env
-Beispieldatei ist:[opc@olk8-m1 ~]$ cat maak8s.env #sudo ready user to ssh into the control plane nodes export user=opc #ssh key for the ssh export ssh_key=/home/opc/KeyMAA.ppk #etcdctl executable's location export etcdctlhome=/scratch/etcdctl/ #etcd advertise port export advert_port=2379 #etcd init cluster port export init_port=2380 #infrastructure pods that will be restarted on restore export infra_pod_list="flannel proxy controller scheduler"
- Führen Sie die Wiederherstellung mit dem Skript
maak8-etcd-restore.sh
aus. Geben Sie als Argumente das Root-Verzeichnis an, in das das Backup von der primären in die Standby-Datenbank kopiert wurde, den Zeitstempel des Backups und den Speicherort derkubectl
-Konfiguration für das Cluster.Beispiel:[opc@k8dramsnewbastion ~]$ ./maak8-etcd-restore.sh /restore-volume 2022-08-29_15-56-59 /home/opc/.kube/config
Das Skript sucht im Verzeichnis
/restore-volume
nach einem Unterverzeichnis namensetcd_snapshot_date
. In diesem Beispiel wird/restore-volume/etcd_snapshot_2022-08-29_15-56-59
verwendet.Bei der Wiederherstellung werden die folgenden Schritte ausgeführt:- Erzwingen, dass die Control Plane in der sekundären Ebene gestoppt wird, wenn sie ausgeführt wird
- Stellt den Snapshot
etcd
in allen Control-Plane-Knoten wieder her - Ersetzt die Clustersignaturschlüssel in allen Control-Plane-Knoten
- Startet die Control Plane
- Schaltet alle Infrastrukturpods (Proxy, Scheduler, Controller) und Deployments im Cluster um (um sie in einen konsistenten Status zu versetzen)
Am Ende der Wiederherstellung wird in einem Bericht der Status der Pods und des
etcd
-Subsystems angezeigt. Beispiel:NAMESPACE NAME READY STATUS RESTARTS AGE default dnsutils 1/1 Running 0 27d default nginx-deployment-566ff9bd67-6rl7f 1/1 Running 0 19s default nginx-deployment-566ff9bd67-hnx69 1/1 Running 0 17s default nginx-deployment-566ff9bd67-hvrwq 1/1 Running 0 15s default test-pd 1/1 Running 0 26d kube-flannel kube-flannel-ds-4f2fz 1/1 Running 3 (22d ago) 35d kube-flannel kube-flannel-ds-cvqzh 1/1 Running 3 (22d ago) 35d kube-flannel kube-flannel-ds-dmbhp 1/1 Running 3 (22d ago) 35d kube-flannel kube-flannel-ds-skhz2 1/1 Running 3 (22d ago) 35d kube-flannel kube-flannel-ds-zgkkp 1/1 Running 4 (22d ago) 35d kube-flannel kube-flannel-ds-zpbn7 1/1 Running 3 (22d ago) 35d kube-system coredns-8f994fbf8-6ghs4 0/1 ContainerCreating 0 15s kube-system coredns-8f994fbf8-d79h8 1/1 Running 0 19s kube-system coredns-8f994fbf8-wcknd 1/1 Running 0 12s kube-system coredns-8f994fbf8-zh8w4 1/1 Running 0 19s kube-system etcd-olk8-m1 1/1 Running 22 (89s ago) 44s kube-system etcd-olk8-m2 1/1 Running 59 (88s ago) 44s kube-system etcd-olk8-m3 1/1 Running 18 (88s ago) 26s kube-system kube-apiserver-olk8-m1 1/1 Running 26 (89s ago) 44s kube-system kube-apiserver-olk8-m2 1/1 Running 60 (88s ago) 42s kube-system kube-apiserver-olk8-m3 1/1 Running 18 (88s ago) 27s kube-system kube-controller-manager-olk8-m1 1/1 Running 19 (89s ago) 10s kube-system kube-controller-manager-olk8-m2 1/1 Running 18 (88s ago) 10s kube-system kube-controller-manager-olk8-m3 1/1 Running 18 (88s ago) 10s kube-system kube-flannel-ds-62dcq 1/1 Running 0 19s kube-system kube-flannel-ds-bh5w7 1/1 Running 0 19s kube-system kube-flannel-ds-cc2rk 1/1 Running 0 19s kube-system kube-flannel-ds-p8kdk 1/1 Running 0 19s kube-system kube-flannel-ds-vj8r8 1/1 Running 0 18s kube-system kube-flannel-ds-wz2kv 1/1 Running 0 18s kube-system kube-proxy-28d98 1/1 Running 0 14s kube-system kube-proxy-2gb99 1/1 Running 0 15s kube-system kube-proxy-4dfjd 1/1 Running 0 14s kube-system kube-proxy-72l5q 1/1 Running 0 14s kube-system kube-proxy-s8zbs 1/1 Running 0 14s kube-system kube-proxy-tmqnm 1/1 Running 0 14s kube-system kube-scheduler-olk8-m1 0/1 Pending 0 5s kube-system kube-scheduler-olk8-m2 1/1 Running 18 (88s ago) 5s kube-system kube-scheduler-olk8-m3 1/1 Running 18 (88s ago) 5s newopns weblogic-operator-5d74f56886-mtjp6 0/1 Terminating 0 26d newopns weblogic-operator-webhook-768d9f6f79-tdt8b 0/1 Terminating 0 26d soans soaedgdomain-adminserver 0/1 Running 0 22d soans soaedgdomain-soa-server1 0/1 Running 0 22d soans soaedgdomain-soa-server2 0/1 Running 0 22d +--------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ | ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS | +--------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ | olk8-m1:2379 | 63c63522f0be24a6 | 3.5.6 | 146 MB | true | false | 2 | 1195 | 1195 | | | olk8-m2:2379 | 697d3746d6f10842 | 3.5.6 | 146 MB | false | false | 2 | 1195 | 1195 | | | olk8-m3:2379 | 7a23c67093a3029 | 3.5.6 | 146 MB | false | false | 2 | 1195 | 1195 | | +--------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ +------------------+---------+---------+----------------------+---------------------------+------------+ | ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS | IS LEARNER | +------------------+---------+---------+----------------------+---------------------------+------------+ | 7a23c67093a3029 | started | olk8-m3 | https://olk8-m3:2380 | https://10.5.176.154:2379 | false | | 63c63522f0be24a6 | started | olk8-m1 | https://olk8-m1:2380 | https://10.5.176.144:2379 | false | | 697d3746d6f10842 | started | olk8-m2 | https://olk8-m2:2380 | https://10.5.176.167:2379 | false | +------------------+---------+---------+----------------------+---------------------------+------------+ Restore completed at 2023-08-30_15-18-22 [opc@k8dramsnewbastion ~]$
- Laden Sie ALLE Skripte für
Verifizieren
maak8DR-apply.sh
, ob alle im primären Cluster vorhandenen Artefakte im sekundären Cluster repliziert wurden. Prüfen Sie das sekundäre Cluster, und stellen Sie sicher, dass die Pods in der sekundären Site fehlerfrei ausgeführt werden.
- Prüfen Sie den Status der Sekundärinstanz, bis die erforderlichen Pods mit dem Status in der Primärdatenbank übereinstimmen. Standardmäßig werden die Pods und Deployments in der sekundären Region gestartet. Am Ende der Wiederherstellung wird der Status des sekundären Clusters angezeigt. Einige Pods benötigen möglicherweise zusätzliche Zeit, um den Status RUNNING zu erreichen.
- Prüfen Sie das
restore
-Log in der sekundären Datei auf mögliche Fehler.Der Logspeicherort wird zu Beginn der Wiederherstellung gemeldet. Standardmäßig wird das Log unter dem Verzeichnis erstellt, in dem sich das Backup selbst befand, unter/backup_dir/etcd_snapshot_backup-date/restore_attempted_restore-date/restore.log
. Ein anderes Log wird speziell für den Snapshot-Wiederherstellungsvorgang/backup_dir/etcd_snapshot_backup-date/restore_attempted_restore-date/etcd_op.log
vonetcd
erstellt. - (Optional) Kehren Sie zurück.
Zusätzlich zu den Restore-Logs wird ein Backup der vorherigen
/etc/kubernetes
-Konfiguration für jeden der Control-Plane-Knoten unter dem Verzeichnis/backup_dir/etcd_snapshot_backup-date/restore_attempted_restore-date/current_etc_kubernetes
erstellt. Gleichermaßen werden dieetcd
-Datenbanken in jedem Knoten VOR der Wiederherstellung nach/backup_dir/etcd_snapshot_backup-date/restore_attempted_restore-date/node_name
kopiert. Mit diesen Optionen können Sie die Clusterkonfiguration wiederherstellen, die vor der Ausführung der Wiederherstellung vorhanden war.