Auf dieser Seite finden Sie die empfohlene Bereitstellungsstrategie zum Erstellen einer robusten, hochverfügbaren (HA) VM-Anwendung (virtuelle Maschine) in Google Distributed Cloud (GDC) Air-Gapped. Sie müssen die VM-Anwendung in mehreren GDC-Zonen bereitstellen und die asynchrone Speicherreplikation konfigurieren, damit die Anwendung und ihre Daten im Falle unerwarteter Ausfallzeiten oder lokaler Katastrophen wiederhergestellt werden können.
Diese Seite richtet sich an Entwickler in der Gruppe der Anwendungsbetreiber, die für die Erstellung von Anwendungsarbeitslasten für ihre Organisation verantwortlich sind. Weitere Informationen finden Sie in der Dokumentation zu Zielgruppen für GDC-Air-Gap-Umgebungen.
Lernziele
- Erstellen Sie eine VM-Instanz mit angehängten Bootlaufwerken in zwei oder mehr Zonen in Ihrem GDC-Universum.
- Globales Load Balancing konfigurieren
- Konfigurieren Sie die asynchrone Speicherreplikation mit Block- oder Objektspeicher.
Hinweise
Prüfen Sie, ob Sie in einem GDC-Universum mit mehreren verfügbaren Zonen arbeiten. Führen Sie
gdcloud zones list
aus, um die in Ihrem Universum verfügbaren Zonen aufzulisten. Weitere Informationen finden Sie unter Zonen in einem Universum auflisten.Bitten Sie Ihren IAM-Administrator der Organisation, Ihnen die folgenden Rollen zuzuweisen:
- Die VM-Rollen zum Erstellen und Verwalten von VM-Arbeitslasten.
- Die Rollen „Administrator für Load-Balancer“ (
load-balancer-admin
) und „Globaler Administrator für Load-Balancer“ (global-load-balancer-admin
). Sie benötigen diese Rollen, um Load-Balancer zu erstellen und zu verwalten. - Die Rolle „Globaler Administrator für die Volumereplikation“ (
app-volume-replication-admin-global
). Sie benötigen diese Rolle, um die Volumereplikation zu verwalten. - Die Rolle „Global PNP Admin“ (
global-project-networkpolicy-admin
). Sie benötigen diese Rolle, um projektbezogene Netzwerkrichtlinien zonenübergreifend zu erstellen und zu verwalten. - Die Rolle „Globaler Administrator für die Volumereplikation“ (
app-volume-replication-admin-global
) zum Verwalten der Volumereplikationsbeziehung für Blockspeicherressourcen. - Die Rolle „Projekt-Bucket-Objekt-Administrator“ (
project-bucket-object-admin
) und „Projekt-Bucket-Administrator“ (project-bucket-admin
) zum Erstellen und Verwalten von Storage-Buckets.
Weitere Informationen finden Sie unter Rollenbeschreibungen.
Installieren und konfigurieren Sie die gcloud CLI und konfigurieren Sie Ihre zonalen und globalen Kontexte. Weitere Informationen finden Sie unter Ressourcen zonenübergreifend verwalten.
Installieren und konfigurieren Sie die kubectl-Befehlszeile mit entsprechenden kubeconfig-Dateien für den globalen API-Server und den Management API-Server. Weitere Informationen finden Sie unter kubeconfig-Datei manuell generieren.
VM-Instanz in mehreren Zonen erstellen
Eine VM-Instanz ist eine zonale Ressource. Daher müssen Sie in jeder Zone eine VM erstellen. In diesem Beispiel erstellen Sie eine VM-Instanz mit einem von GDC bereitgestellten Betriebssystem-Image und hängen ein Bootlaufwerk an die VM an. Weitere Informationen zum Erstellen von VM-Instanzen und zur Verwendung benutzerdefinierter Images finden Sie unter VM erstellen und starten.
Standardmäßig können in allen GDC-Projekten VMs aus von GDC bereitgestellten Betriebssystem-Images erstellt werden.
Console
- Wählen Sie im Navigationsmenü Virtuelle Maschinen > Instanzen aus.
- Klicken Sie auf Instanz erstellen.
- Geben Sie im Feld Name einen Namen für die VM ein.
- Wählen Sie die Zone aus, in der die VM erstellt werden soll.
- Klicken Sie auf Labels hinzufügen, um der VM Labels zuzuweisen und Ihre VM-Instanzen besser zu organisieren.
- Wählen Sie die Maschinenkonfiguration aus, die für die VM verwendet werden soll. Prüfen Sie, ob der Maschinentyp je nach Ihren Anforderungen zu Ihrer Arbeitslast passt.
- Klicken Sie auf Weiter.
- Aktivieren Sie den externen Zugriff für Ihre VM-Instanz.
- Klicken Sie auf Weiter.
- Wählen Sie Neues Laufwerk hinzufügen aus.
- Weisen Sie Ihrer VM-Festplatte einen Namen zu.
- Konfigurieren Sie die Laufwerkgröße und die Einstellungen für das Anhängen.
- Klicken Sie auf Speichern.
- Klicken Sie auf Erstellen, um die VM-Instanz zu erstellen.
- Wiederholen Sie die vorherigen Schritte für jede Zone in Ihrem GDC-Universum. Achten Sie darauf, dass sich in jeder Zone, die Sie für Ihre HA-Strategie benötigen, eine VM-Instanz befindet.
gdcloud
Melden Sie sich in der Zone an, in der Sie Ihre VM-Instanz hosten möchten:
gdcloud config set core/zone ZONE
Erstellen Sie die VM-Instanz in der Zone mit einem von GDC bereitgestellten Image:
gdcloud compute instances create VM_NAME \ --machine-type=MACHINE_TYPE \ --image=BOOT_DISK_IMAGE_NAME --image-project=vm-system \ --boot-disk-size=BOOT_DISK_SIZE \ --no-boot-disk-auto-delete=NO_BOOT_DISK_AUTO_DELETE
Ersetzen Sie Folgendes:
VM_NAME
ist der Name der neuen VM. Der Name darf nur alphanumerische Zeichen und Bindestriche enthalten und darf nicht länger als 53 Zeichen sein.MACHINE_TYPE
ist der vordefinierte Maschinentyp für die neue VM. Führen Siegdcloud compute machine-types list
aus, um einen verfügbaren Maschinentyp auszuwählen.BOOT_DISK_IMAGE_NAME
: Der Name des Images, das für das neue VM-Bootlaufwerk verwendet werden soll.BOOT_DISK_SIZE
: die Größe des Bootlaufwerks, z. B.20GB
. Dieser Wert muss immer größer oder gleich demminimumDiskSize
des Bootlaufwerk-Images sein.NO_BOOT_DISK_AUTO_DELETE
: Gibt an, ob das Bootlaufwerk automatisch gelöscht wird, wenn die VM-Instanz gelöscht wird.
Wiederholen Sie die vorherigen Schritte für jede Zone in Ihrem GDC-Universum. Achten Sie darauf, dass sich in jeder Zone, die Sie für Ihre HA-Strategie benötigen, eine VM-Instanz befindet.
API
Erstellen Sie die VM-Instanz in der Zone mit einem von GDC bereitgestellten Image:
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineDisk metadata: name: VM_BOOT_DISK_NAME namespace: PROJECT spec: source: image: name: BOOT_DISK_IMAGE_NAME namespace: vm-system size: BOOT_DISK_SIZE --- apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachine metadata: name: VM_NAME namespace: PROJECT spec: compute: virtualMachineType: MACHINE_TYPE disks: - virtualMachineDiskRef: name: VM_BOOT_DISK_NAME boot: true autoDelete: BOOT_DISK_AUTO_DELETE --- apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineExternalAccess metadata: name: VM_NAME namespace: PROJECT spec: enabled: true ports: - name: port-80 port: 80 protocol: TCP EOF
Ersetzen Sie Folgendes:
MANAGEMENT_API_SERVER
: Die kubeconfig-Datei des Management API-Servers für die Zone, in der die VM-Instanz erstellt werden soll. Wenn Sie noch keine kubeconfig-Datei für den Management API-Server generiert haben, lesen Sie den Abschnitt kubeconfig-Datei manuell generieren.VM_BOOT_DISK_NAME
: der Name des neuen VM-Bootlaufwerks.PROJECT
: Das GDC-Projekt, in dem die VM erstellt werden soll.BOOT_DISK_IMAGE_NAME
: Der Name des Images, das für das neue VM-Bootlaufwerk verwendet werden soll.BOOT_DISK_SIZE
: die Größe des Bootlaufwerks, z. B.20Gi
. Dieser Wert muss immer größer oder gleich demminimumDiskSize
des Bootlaufwerk-Images sein.VM_NAME
ist der Name der neuen VM. Der Name darf nur alphanumerische Zeichen und Bindestriche enthalten und darf nicht länger als 53 Zeichen sein.MACHINE_TYPE
ist der vordefinierte Maschinentyp für die neue VM. Führen Siegdcloud compute machine-types list
aus, um einen verfügbaren Maschinentyp auszuwählen.BOOT_DISK_AUTO_DELETE
: Gibt an, ob das Bootlaufwerk automatisch gelöscht wird, wenn die VM-Instanz gelöscht wird.
Prüfen Sie, ob die VM verfügbar ist, und warten Sie, bis die VM den Status
Running
hat. Der StatusRunning
bedeutet nicht, dass das Betriebssystem vollständig bereit und zugänglich ist.kubectl --kubeconfig MANAGEMENT_API_SERVER \ get virtualmachine.virtualmachine.gdc.goog VM_NAME -n PROJECT
Ersetzen Sie
VM_NAME
undPROJECT
durch den Namen und das Projekt der VM.Wiederholen Sie die vorherigen Schritte für jede Zone in Ihrem GDC-Universum. Achten Sie darauf, dass sich in jeder Zone, die Sie für Ihre HA-Strategie benötigen, eine VM-Instanz befindet.
Load-Balancer konfigurieren
Wenn Sie Traffic zwischen Ihren VMs in verschiedenen Zonen verteilen möchten, erstellen Sie Load-Balancer. Sie haben die Möglichkeit, externe Load-Balancer (ELB) und interne Load-Balancer (ILB) zu erstellen, die beide zonal oder global konfiguriert werden können. Konfigurieren Sie in diesem Beispiel einen globalen ILB und einen globalen ELB für Ihre VM-Anwendung.
Globalen internen Load Balancer erstellen
Interne Load-Balancer (ILB) machen Dienste innerhalb der Organisation über einen internen IP-Adresspool verfügbar, der der Organisation zugewiesen ist. Auf einen ILB-Dienst kann nie über einen Endpunkt außerhalb der Organisation zugegriffen werden.
Führen Sie die folgenden Schritte aus, um einen globalen ILB für Ihre VM-Arbeitslasten zu erstellen.
gdcloud
Erstellen Sie mit der gcloud CLI einen internen Lastenausgleich, der auf VM-Arbeitslasten ausgerichtet ist.
Dieser interne Load Balancer ist auf alle Arbeitslasten im Projekt ausgerichtet, die mit dem Label übereinstimmen, das im Backend
-Objekt definiert ist. Die benutzerdefinierte Ressource Backend
muss auf eine Zone beschränkt sein.
So erstellen Sie einen ILB mit der gcloud CLI:
Erstellen Sie in jeder Zone, in der Ihre VMs ausgeführt werden, eine zonale
Backend
-Ressource, um den Endpunkt für den ILB zu definieren:gdcloud compute backends create BACKEND_NAME \ --labels=LABELS \ --project=PROJECT \ --zone=ZONE
Ersetzen Sie Folgendes:
BACKEND_NAME
: der ausgewählte Name für die Backend-Ressource, z. B.my-backend
.LABELS
: Der Selektor, der definiert, welche Endpunkte zwischen VMs für diese Backend-Ressource verwendet werden sollen, z. B.app=web
.PROJECT
: Name Ihres ProjektsZONE
: die Zone, die für diesen Aufruf verwendet werden soll. Wenn Sie das Zonen-Flag für alle Befehle, die es erfordern, voreinstellen möchten, führen Siegdcloud config set core/zone ZONE
aus. Das Zonenflag ist nur in Umgebungen mit mehreren Zonen verfügbar. Dieses Feld ist optional.
Wiederholen Sie diesen Schritt für jede Zone in Ihrem GDC-Universum.
Globale Systemdiagnose für den internen Lastenausgleich definieren:
gdcloud compute health-checks create tcp HEALTH_CHECK_NAME \ --check-interval=CHECK_INTERVAL \ --healthy-threshold=HEALTHY_THRESHOLD \ --timeout=TIMEOUT \ --unhealthy-threshold=UNHEALTHY_THRESHOLD \ --port=PORT \ --global
Ersetzen Sie Folgendes:
HEALTH_CHECK_NAME
: Der Name der Systemdiagnoseressource, z. B.my-health-check
.CHECK_INTERVAL
: die Zeitspanne in Sekunden vom Start einer Prüfung bis zum Start der nächsten. Der Standardwert ist5
. Dieses Feld ist optional.HEALTHY_THRESHOLD
: die Zeit, die gewartet werden soll, bevor ein Fehler gemeldet wird. Der Standardwert ist5
. Dieses Feld ist optional.TIMEOUT
: Die Zeit in Sekunden, die gewartet werden soll, bevor ein Fehler gemeldet wird. Der Standardwert ist5
. Dieses Feld ist optional.UNHEALTHY_THRESHOLD
: Die Anzahl der sequenziellen Testdurchläufe, die fehlschlagen müssen, damit der Endpunkt als fehlerhaft eingestuft wird. Der Standardwert ist2
. Dieses Feld ist optional.PORT
: Der Port, auf dem die Systemdiagnose ausgeführt wird. Der Standardwert ist80
. Dieses Feld ist optional.
Erstellen Sie eine globale
BackendService
-Ressource:gdcloud compute backend-services create BACKEND_SERVICE_NAME \ --project=PROJECT \ --target-ports=TARGET_PORTS \ --health-check=HEALTH_CHECK_NAME \ --global
Ersetzen Sie Folgendes:
BACKEND_SERVICE_NAME
: Der Name des Backend-Dienstes.PROJECT
: Name Ihres ProjektsTARGET_PORTS
: eine durch Kommas getrennte Liste von Zielports, die von diesem Backend-Dienst übersetzt werden. Jeder Zielport gibt das Protokoll, den Port in der Weiterleitungsregel und den Port in der Backend-Instanz an. Sie können mehrere Zielports angeben. Dieses Feld muss das Formatprotocol:port:targetport
haben, z. B.TCP:80:8080
. Dieses Feld ist optional.HEALTH_CHECK_NAME
: der Name der Systemdiagnoseressource. Dieses Feld ist optional.
Fügen Sie die
BackendService
-Ressource der zuvor erstelltenBackend
-Ressource in jeder Zone hinzu:gdcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --backend-zone=ZONE \ --backend=BACKEND_NAME \ --project=PROJECT \ --global
Ersetzen Sie Folgendes:
BACKEND_SERVICE_NAME
: der Name des globalen Backend-Dienstes.ZONE
: die Zone des Backends.BACKEND_NAME
: Der Name des zonalen Backends.PROJECT
: Name Ihres Projekts
Führen Sie diesen Schritt für jedes zonale Backend aus, das Sie zuvor erstellt haben.
Erstellen Sie eine interne
ForwardingRule
-Ressource, die die virtuelle IP-Adresse (VIP) definiert, unter der der Dienst verfügbar ist:gdcloud compute forwarding-rules create FORWARDING_RULE_INTERNAL_NAME \ --backend-service=BACKEND_SERVICE_NAME \ --cidr=CIDR \ --ip-protocol-port=PROTOCOL_PORT \ --load-balancing-scheme=INTERNAL \ --project=PROJECT \ --global
Ersetzen Sie Folgendes:
FORWARDING_RULE_INTERNAL_NAME
: der Name der Weiterleitungsregel.CIDR
: der CIDR-Bereich, der für Ihre Weiterleitungsregel verwendet werden soll. Dieses Feld ist optional. Wenn nichts angegeben ist, wird automatisch einIPv4/32
-CIDR aus dem globalen IP-Adresspool reserviert. Geben Sie den Namen einerSubnet
-Ressource im selben Namespace wie diese Weiterleitungsregel an. EineSubnet
-Ressource stellt die Anfrage- und Zuweisungsinformationen eines globalen Subnetzes dar. Weitere Informationen zuSubnet
-Ressourcen finden Sie unter Subnetze verwalten.PROTOCOL_PORT
: das Protokoll und der Port, die in der Weiterleitungsregel verfügbar gemacht werden sollen. Dieses Feld muss das Formatip-protocol=TCP:80
haben. Der freigegebene Port muss mit dem Port übereinstimmen, den die eigentliche Anwendung in der VM freigibt.
Prüfen Sie die konfigurierte interne Load-Balancing-Instanz, indem Sie die
Ready
-Bedingung für jedes der erstellten Objekte bestätigen. Prüfen Sie den Traffic mit einercurl
-Anfrage an die VIP:Beschreiben Sie die Weiterleitungsregel, um die zugewiesene VIP zu erhalten:
gdcloud compute forwarding-rules describe FORWARDING_RULE_INTERNAL_NAME --global
Prüfen Sie den Traffic mit einer
curl
-Anfrage an die VIP am Port, der im Feld in der Weiterleitungsregel angegeben ist:curl http://FORWARDING_RULE_VIP:PORT
Ersetzen Sie Folgendes:
FORWARDING_RULE_VIP
: die VIP der Weiterleitungsregel.PORT
: die Portnummer der Weiterleitungsregel.
API
Erstellen Sie mit der KRM API einen ILB, der auf VM-Arbeitslasten ausgerichtet ist. Dieser interne Load Balancer ist auf alle Arbeitslasten im Projekt ausgerichtet, die dem im Backend
-Objekt definierten Label entsprechen. So erstellen Sie einen globalen ILB mit der KRM API:
Erstellen Sie eine
Backend
-Ressource, um die Endpunkte für den internen Lastenausgleich zu definieren. Erstellen SieBackend
-Ressourcen für jede Zone, in der sich die VM-Arbeitslasten befinden:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: Backend metadata: namespace: PROJECT name: BACKEND_NAME spec: endpointsLabels: matchLabels: app: APP_NAME EOF
Ersetzen Sie Folgendes:
MANAGEMENT_API_SERVER
: Der Kubeconfig-Pfad des zonalen Management API-Servers. Weitere Informationen finden Sie unter Auf zonalen Kontext umstellen.PROJECT
: Name Ihres ProjektsBACKEND_NAME
: der Name derBackend
-Ressource.APP_NAME
: der Name Ihrer VM-Anwendung.
Sie können dieselbe
Backend
-Ressource für jede Zone verwenden oderBackend
-Ressourcen mit unterschiedlichen Labelsätzen für jede Zone erstellen.Globale Systemdiagnose für den internen Lastenausgleich definieren:
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: HealthCheck metadata: namespace: PROJECT name: HEALTH_CHECK_NAME spec: tcpHealthCheck: port: PORT timeoutSec: TIMEOUT checkIntervalSec: CHECK_INTERVAL healthyThreshold: HEALTHY_THRESHOLD unhealthyThreshold: UNHEALTHY_THRESHOLD EOF
Ersetzen Sie Folgendes:
GLOBAL_API_SERVER
: Der kubeconfig-Pfad des globalen API-Servers. Weitere Informationen finden Sie unter Zum globalen Kontext wechseln.PROJECT
: Name Ihres ProjektsHEALTH_CHECK_NAME
: Der Name der Systemdiagnoseressource, z. B.my-health-check
.PORT
: der Port, auf dem die Systemdiagnose ausgeführt werden soll. Der Standardwert ist80
.TIMEOUT
: Die Wartezeit in Sekunden, bevor ein Fehler gemeldet wird. Der Standardwert ist5
.CHECK_INTERVAL
: die Zeitspanne in Sekunden vom Start einer Prüfung bis zum Start der nächsten. Der Standardwert ist5
.HEALTHY_THRESHOLD
: Die Anzahl der sequenziellen Testdurchläufe, die bestanden werden müssen, damit der Endpunkt als fehlerfrei gilt. Der Standardwert ist2
.UNHEALTHY_THRESHOLD
: Die Anzahl der sequenziellen Prüfungen, die fehlschlagen müssen, damit der Endpunkt als fehlerhaft gilt. Der Standardwert ist2
.
Erstellen Sie ein
BackendService
-Objekt mit der zuvor erstelltenBackend
-Ressource. Achten Sie darauf, die RessourceHealthCheck
anzugeben:kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: BackendService metadata: namespace: PROJECT name: BACKEND_SERVICE_NAME spec: backendRefs: - name: BACKEND_NAME zone: ZONE healthCheckName: HEALTH_CHECK_NAME targetPorts: - port: PORT protocol: PROTOCOL targetPort: TARGET_PORT EOF
Ersetzen Sie Folgendes:
GLOBAL_API_SERVER
: Der kubeconfig-Pfad des globalen API-Servers.PROJECT
: Name Ihres ProjektsBACKEND_SERVICE_NAME
: der ausgewählte Name für IhreBackendService
-Ressource.HEALTH_CHECK_NAME
: Der Name der zuvor erstelltenHealthCheck
-Ressource.BACKEND_NAME
: Der Name der zonalenBackend
-Ressource.ZONE
: die Zone, in der sich dieBackend
-Ressource befindet. Sie können mehrere Back-Ends im FeldbackendRefs
angeben. Beispiel:- name: my-backend-1 zone: us-east1-a - name: my-backend-2 zone: us-east1-b
Das Feld
targetPorts
ist optional. In dieser Ressource werden die Ports aufgeführt, die von dieserBackendService
-Ressource übersetzt werden. Wenn Sie dieses Objekt verwenden, geben Sie Werte für Folgendes an:PORT
: der vom Dienst bereitgestellte Port.PROTOCOL
: Das Layer-4-Protokoll, mit dem der Traffic übereinstimmen muss. Nur TCP und UDP werden unterstützt.TARGET_PORT
: Der Port, zu dem der Wert übersetzt wird, z. B.8080
. Der Wert darf in einem bestimmten Objekt nicht wiederholt werden.Ein Beispiel für
targetPorts
könnte so aussehen:targetPorts: - port: 80 protocol: TCP targetPort: 8080
Erstellen Sie eine interne
ForwardingRule
-Ressource, die die virtuelle IP-Adresse (VIP) definiert, unter der der Dienst verfügbar ist.kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ForwardingRuleInternal metadata: namespace: PROJECT name: FORWARDING_RULE_INTERNAL_NAME spec: cidrRef: CIDR ports: - port: PORT protocol: PROTOCOL backendServiceRef: name: BACKEND_SERVICE_NAME EOF
Ersetzen Sie Folgendes:
GLOBAL_API_SERVER
: Der kubeconfig-Pfad des globalen API-Servers.PROJECT
: Name Ihres ProjektsFORWARDING_RULE_INTERNAL_NAME
: der ausgewählte Name für IhreForwardingRuleInternal
-Ressource.CIDR
: der CIDR-Bereich, der für Ihre Weiterleitungsregel verwendet werden soll. Dieses Feld ist optional. Wenn nichts angegeben ist, wird automatisch einIPv4/32
-CIDR aus dem globalen IP-Adresspool reserviert. Geben Sie den Namen einerSubnet
-Ressource im selben Namespace wie diese Weiterleitungsregel an. EineSubnet
-Ressource stellt die Anfrage- und Zuweisungsinformationen eines globalen Subnetzes dar. Weitere Informationen zuSubnet
-Ressourcen finden Sie unter Subnetze verwalten.PORT
: Der Port, der für die Weiterleitungsregel verfügbar gemacht werden soll. Mit dem Feldports
können Sie ein Array von L4-Ports angeben, für die Pakete an die mit dieser Weiterleitungsregel konfigurierten Back-Ends weitergeleitet werden. Es muss mindestens ein Port angegeben werden. Verwenden Sie das Feldport
, um eine Portnummer anzugeben. Der bereitgestellte Port muss mit dem Port übereinstimmen, den die eigentliche Anwendung im Container bereitstellt.PROTOCOL
: Das Protokoll, das für die Weiterleitungsregel verwendet werden soll, z. B.TCP
. Ein Eintrag imports
-Array muss so aussehen:ports: - port: 80 protocol: TCP
Prüfen Sie die konfigurierte interne Load-Balancing-Instanz, indem Sie die
Ready
-Bedingung für jedes der erstellten Objekte bestätigen. Prüfen Sie den Traffic mit einercurl
-Anfrage an die VIP:Rufen Sie die VIP ab:
kubectl get forwardingruleinternal -n PROJECT
Die Ausgabe sieht so aus:
NAME BACKENDSERVICE CIDR READY ilb-name BACKEND_SERVICE_NAME 192.0.2.0/32 True
Testen Sie den Traffic mit einer
curl
-Anfrage an die VIP am Port, der im Feld in der Weiterleitungsregel angegeben ist:curl http://FORWARDING_RULE_VIP:PORT
Ersetzen Sie Folgendes:
FORWARDING_RULE_VIP
: die VIP der Weiterleitungsregel.PORT
: die Portnummer des Felds in der Weiterleitungsregel.
Globalen externen Load Balancer erstellen
Externe Load Balancer (ELB) machen Dienste für den Zugriff von außerhalb der Organisation über die IP-Adressen eines Pools verfügbar, die der Organisation aus dem größeren Pool externer IP-Adressen der Instanz zugewiesen sind.
Führen Sie die folgenden Schritte aus, um eine globale ELB für Ihre VM-Arbeitslasten zu erstellen.
gdcloud
Verwenden Sie die gcloud CLI, um einen globalen ELB zu erstellen, der auf alle Arbeitslasten im Projekt ausgerichtet ist, die mit dem Label übereinstimmen, das im Backend
-Objekt definiert ist.
Die benutzerdefinierte Ressource Backend
muss auf eine Zone beschränkt sein.
Damit ELB-Dienste funktionieren, müssen Sie eine eigene angepasste
ProjectNetworkPolicy
-Datenübertragungsrichtlinie konfigurieren und anwenden, um Traffic zu den Arbeitslasten dieses ELB-Dienstes zuzulassen. Netzwerkrichtlinien steuern den Zugriff auf Ihre Arbeitslasten, nicht auf den Load-Balancer selbst. ELBs machen Arbeitslasten für Ihr Kundennetzwerk verfügbar. Daher sind explizite Netzwerkrichtlinien erforderlich, um externen Traffic zum Arbeitslastport, z. B.8080
, zuzulassen.Geben Sie die externe CIDR-Adresse an, um Traffic zu den Arbeitslasten dieses ELB zuzulassen:
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: PROJECT name: allow-inbound-traffic-from-external spec: policyType: Ingress subject: subjectType: UserWorkload ingress: - from: - ipBlock: cidr: CIDR ports: - protocol: TCP port: PORT EOF
Ersetzen Sie Folgendes:
GLOBAL_API_SERVER
: Der kubeconfig-Pfad des globalen API-Servers. Wenn Sie noch keine kubeconfig-Datei für den globalen API-Server generiert haben, finden Sie weitere Informationen unter kubeconfig-Datei manuell generieren.PROJECT
: Name Ihres ProjektsCIDR
: Der externe CIDR-Bereich, über den auf den ELB zugegriffen werden muss. Diese Richtlinie ist erforderlich, da der externe Load-Balancer DSR (Direct Server Return) verwendet. Dadurch wird die externe Quell-IP-Adresse beibehalten und der Load-Balancer auf dem Rückgabepfad umgangen. Weitere Informationen finden Sie unter Globale Firewallregel für eingehenden organisationsübergreifenden Traffic erstellen.PORT
: der Backend-Port auf den VMs hinter dem Load-Balancer. Dieser Wert befindet sich im Feld.spec.ports[].targetPortfield
des Manifests für die RessourceService
. Dieses Feld ist optional.
Diese Konfiguration ermöglicht allen Ressourcen in Projekten den Zugriff auf den angegebenen CIDR-Bereich.
Erstellen Sie in jeder Zone eine
Backend
-Ressource, um den Endpunkt für den ELB zu definieren:gdcloud compute backends create BACKEND_NAME \ --labels=LABELS \ --project=PROJECT
Ersetzen Sie Folgendes:
BACKEND_NAME
: Der Name der Backend-Ressource, z. B.my-backend
.LABELS
: Ein Selektor, der definiert, welche Endpunkte zwischen VMs für diese Backend-Ressource verwendet werden sollen, z. B.app=web
.PROJECT
: Name Ihres Projekts
Sie können dieselbe
Backend
-Ressource für jede Zone verwenden oderBackend
-Ressourcen mit unterschiedlichen Labelsätzen für jede Zone erstellen.Globale Systemdiagnose für den ELB definieren:
gdcloud compute health-checks create tcp HEALTH_CHECK_NAME \ --check-interval=CHECK_INTERVAL \ --healthy-threshold=HEALTHY_THRESHOLD \ --timeout=TIMEOUT \ --unhealthy-threshold=UNHEALTHY_THRESHOLD \ --port=PORT \ --global
Ersetzen Sie Folgendes:
HEALTH_CHECK_NAME
: der Name der Systemdiagnoseressource, z. B.my-health-check
.CHECK_INTERVAL
: die Zeitspanne in Sekunden vom Start einer Prüfung bis zum Start der nächsten. Der Standardwert ist5
. Dieses Feld ist optional.HEALTHY_THRESHOLD
: Die Zeit, die gewartet werden soll, bevor ein Fehler gemeldet wird. Der Standardwert ist5
. Dieses Feld ist optional.TIMEOUT
: Die Wartezeit in Sekunden, bevor ein Fehler gemeldet wird. Der Standardwert ist5
. Dieses Feld ist optional.UNHEALTHY_THRESHOLD
: Die Anzahl der sequenziellen Prüfungen, die fehlschlagen müssen, damit der Endpunkt als fehlerhaft gilt. Der Standardwert ist2
. Dieses Feld ist optional.PORT
: der Port, auf dem die Systemdiagnose ausgeführt werden soll. Der Standardwert ist80
. Dieses Feld ist optional.
Erstellen Sie eine globale
BackendService
-Ressource:gdcloud compute backend-services create BACKEND_SERVICE_NAME \ --project=PROJECT \ --target-ports=TARGET_PORTS \ --health-check=HEALTH_CHECK_NAME \ --global
Ersetzen Sie Folgendes:
BACKEND_SERVICE_NAME
: der ausgewählte Name für diesen Backend-Dienst.PROJECT
: Name Ihres ProjektsTARGET_PORTS
: eine durch Kommas getrennte Liste der Zielports, die von diesem Backend-Dienst übersetzt werden. Jeder Zielport gibt das Protokoll, den Port in der Weiterleitungsregel und den Port in der Backend-Instanz an. Sie können mehrere Zielports angeben. Dieses Feld muss das Formatprotocol:port:targetport
haben, z. B.TCP:80:8080
. Dieses Feld ist optional.HEALTH_CHECK_NAME
: der Name der Systemdiagnoseressource. Dieses Feld ist optional.
Fügen Sie der zuvor erstellten zonalen
Backend
-Ressource die globaleBackendService
-Ressource hinzu:gdcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --backend=BACKEND_NAME \ --backend-zone BACKEND_ZONE \ --project=PROJECT \ --global
Führen Sie diesen Schritt für jedes zonale Backend aus, das Sie zuvor erstellt haben.
Erstellen Sie eine externe
ForwardingRule
-Ressource, die die VIP definiert, unter der der Dienst verfügbar ist:gdcloud compute forwarding-rules create FORWARDING_RULE_EXTERNAL_NAME \ --backend-service=BACKEND_SERVICE_NAME \ --cidr=CIDR \ --ip-protocol-port=PROTOCOL_PORT \ --load-balancing-scheme=EXTERNAL \ --project=PROJECT \ --global
Ersetzen Sie Folgendes:
FORWARDING_RULE_EXTERNAL_NAME
: der Name der Weiterleitungsregel.CIDR
: der CIDR-Bereich, der für Ihre Weiterleitungsregel verwendet werden soll. Dieses Feld ist optional. Wenn nichts angegeben ist, wird automatisch einIPv4/32
-CIDR aus dem globalen IP-Adresspool reserviert. Geben Sie den Namen einerSubnet
-Ressource im selben Namespace wie diese Weiterleitungsregel an. EineSubnet
-Ressource stellt die Anfrage- und Zuweisungsinformationen eines globalen Subnetzes dar. Weitere Informationen zuSubnet
-Ressourcen finden Sie unter Subnetze verwalten.PROTOCOL_PORT
: das Protokoll und der Port, die in der Weiterleitungsregel verfügbar gemacht werden sollen. Dieses Feld muss das Formatip-protocol=TCP:80
haben. Der freigegebene Port muss mit dem Port übereinstimmen, den die eigentliche Anwendung in der VM freigibt.PROJECT
: Name Ihres Projekts
Prüfen Sie die
Ready
-Bedingung für jedes der erstellten Objekte, um den konfigurierten ELB zu validieren. Prüfen Sie den Traffic mit einercurl
-Anfrage an die VIP:Beschreiben Sie die Weiterleitungsregel, um die zugewiesene VIP zu erhalten:
gdcloud compute forwarding-rules describe FORWARDING_RULE_EXTERNAL_NAME
Prüfen Sie den Traffic mit einer
curl
-Anfrage an die VIP am Port, der im FeldPROTOCOL_PORT
in der Weiterleitungsregel angegeben ist:curl http://FORWARDING_RULE_VIP:PORT
Ersetzen Sie Folgendes:
FORWARDING_RULE_VIP
: die VIP der Weiterleitungsregel.PORT
: die Portnummer aus dem FeldPROTOCOL_PORT
in der Weiterleitungsregel.
API
Erstellen Sie mit der KRM API einen ELB, der auf VM-Arbeitslasten ausgerichtet ist. Diese ELB ist auf alle Arbeitslasten im Projekt ausgerichtet, die mit dem im Backend
-Objekt definierten Label übereinstimmen. So erstellen Sie einen zonenbasierten ELB mit der KRM API:
Damit ELB-Dienste funktionieren, müssen Sie eine eigene angepasste
ProjectNetworkPolicy
-Datenübertragungsrichtlinie konfigurieren und anwenden, um Traffic zu den Arbeitslasten dieses ELB-Dienstes zuzulassen. Netzwerkrichtlinien steuern den Zugriff auf Ihre Arbeitslasten, nicht auf den Load-Balancer selbst. ELBs machen Arbeitslasten für Ihr Kundennetzwerk verfügbar. Daher sind explizite Netzwerkrichtlinien erforderlich, um externen Traffic zum Arbeitslastport, z. B.8080
, zuzulassen.Geben Sie die externe CIDR-Adresse an, um Traffic zu den Arbeitslasten dieses ELB zuzulassen:
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: namespace: PROJECT name: allow-inbound-traffic-from-external spec: policyType: Ingress subject: subjectType: UserWorkload ingress: - from: - ipBlock: cidr: CIDR ports: - protocol: TCP port: PORT EOF
Ersetzen Sie Folgendes:
GLOBAL_API_SERVER
: Der kubeconfig-Pfad des globalen API-Servers. Wenn Sie noch keine kubeconfig-Datei für den globalen API-Server generiert haben, finden Sie weitere Informationen unter kubeconfig-Datei manuell generieren.PROJECT
: Name Ihres ProjektsCIDR
: Der externe CIDR-Bereich, über den auf den ELB zugegriffen werden muss. Diese Richtlinie ist erforderlich, da der externe Load-Balancer DSR (Direct Server Return) verwendet. Dadurch wird die externe Quell-IP-Adresse beibehalten und der Load-Balancer auf dem Rückgabepfad umgangen. Weitere Informationen finden Sie unter Globale Firewallregel für eingehenden organisationsübergreifenden Traffic erstellen.PORT
: der Backend-Port auf den VMs hinter dem Load-Balancer. Dieser Wert befindet sich im Feld.spec.ports[].targetPortfield
des Manifests für die RessourceService
. Dieses Feld ist optional.
Erstellen Sie eine
Backend
-Ressource, um die Endpunkte für die ELB zu definieren. Erstellen SieBackend
-Ressourcen für jede Zone, in der sich die Arbeitslasten befinden:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: Backend metadata: namespace: PROJECT name: BACKEND_NAME spec: endpointsLabels: matchLabels: app: server EOF
Ersetzen Sie Folgendes:
MANAGEMENT_API_SERVER
: Der Kubeconfig-Pfad des zonalen Management API-Servers. Wenn Sie noch keine kubeconfig-Datei für den API-Server in Ihrer Zielzone generiert haben, lesen Sie den Abschnitt kubeconfig-Datei manuell generieren.PROJECT
: Name Ihres ProjektsBACKEND_NAME
ist der Name derBackend
-Ressource.
Sie können dieselbe
Backend
-Ressource für jede Zone verwenden oderBackend
-Ressourcen mit unterschiedlichen Labelsätzen für jede Zone erstellen.Globale Systemdiagnose für den ELB definieren:
kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: HealthCheck metadata: namespace: PROJECT name: HEALTH_CHECK_NAME spec: tcpHealthCheck: port: PORT timeoutSec: TIMEOUT checkIntervalSec: CHECK_INTERVAL healthyThreshold: HEALTHY_THRESHOLD unhealthyThreshold: UNHEALTHY_THRESHOLD EOF
Ersetzen Sie Folgendes:
HEALTH_CHECK_NAME
: der Name der Systemdiagnoseressource, z. B.my-health-check
.PORT
: der Port, auf dem die Systemdiagnose ausgeführt werden soll. Der Standardwert ist80
.TIMEOUT
: Die Wartezeit in Sekunden, bevor ein Fehler gemeldet wird. Der Standardwert ist5
.CHECK_INTERVAL
: die Zeitspanne in Sekunden vom Start einer Prüfung bis zum Start der nächsten. Der Standardwert ist5
.HEALTHY_THRESHOLD
: Die Anzahl der sequenziellen Tests, die bestanden werden müssen, damit der Endpunkt als fehlerfrei gilt. Der Standardwert ist2
.UNHEALTHY_THRESHOLD
: Die Anzahl der sequenziellen Prüfungen, die fehlschlagen müssen, damit der Endpunkt als fehlerhaft gilt. Der Standardwert ist2
.
Da es sich um eine globale ELB handelt, erstellen Sie die Systemdiagnose in der globalen API.
Erstellen Sie ein
BackendService
-Objekt mit der zuvor erstelltenBackend
-Ressource:kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: BackendService metadata: namespace: PROJECT name: BACKEND_SERVICE_NAME spec: backendRefs: - name: BACKEND_NAME zone: ZONE healthCheckName: HEALTH_CHECK_NAME EOF
Ersetzen Sie Folgendes:
BACKEND_SERVICE_NAME
: der ausgewählte Name für IhreBackendService
-Ressource.HEALTH_CHECK_NAME
: Der Name der zuvor erstelltenHealthCheck
-Ressource. Geben Sie dieses Feld nicht an, wenn Sie einen ELB für Pod-Arbeitslasten konfigurieren.ZONE
: die Zone, in der sich dieBackend
-Ressource befindet. Sie können mehrere Back-Ends im FeldbackendRefs
angeben. Beispiel:
- name: my-backend-1 zone: us-east1-a - name: my-backend-2 zone: us-east1-b
Erstellen Sie eine externe
ForwardingRule
-Ressource, in der die VIP definiert ist, unter der der Dienst verfügbar ist.kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ForwardingRuleExternal metadata: namespace: PROJECT name: FORWARDING_RULE_EXTERNAL_NAME spec: cidrRef: CIDR ports: - port: PORT protocol: PROTOCOL backendServiceRef: name: BACKEND_SERVICE_NAME EOF
Ersetzen Sie Folgendes:
FORWARDING_RULE_EXTERNAL_NAME
: Der ausgewählte Name für IhreForwardingRuleExternal
-Ressource.CIDR
: der CIDR-Bereich, der für Ihre Weiterleitungsregel verwendet werden soll. Dieses Feld ist optional. Wenn nichts angegeben ist, wird automatisch einIPv4/32
-CIDR aus dem globalen IP-Adresspool reserviert. Geben Sie den Namen einerSubnet
-Ressource im selben Namespace wie diese Weiterleitungsregel an. EineSubnet
-Ressource stellt die Anfrage- und Zuweisungsinformationen eines globalen Subnetzes dar. Weitere Informationen zuSubnet
-Ressourcen finden Sie unter Subnetze verwalten.PORT
: der Port, der für die Weiterleitungsregel verfügbar gemacht werden soll. Verwenden Sie das Feldports
, um ein Array von L4-Ports anzugeben, für die Pakete an die mit dieser Weiterleitungsregel konfigurierten Back-Ends weitergeleitet werden. Es muss mindestens ein Port angegeben werden. Verwenden Sie das Feldport
, um eine Portnummer anzugeben. Der bereitgestellte Port muss mit dem Port übereinstimmen, den die eigentliche Anwendung im Container bereitstellt.PROTOCOL
: das Protokoll, das für die Weiterleitungsregel verwendet werden soll, z. B.TCP
. Ein Eintrag imports
-Array muss so aussehen:
ports: - port: 80 protocol: TCP
Prüfen Sie die
Ready
-Bedingung für jedes der erstellten Objekte, um den konfigurierten ELB zu validieren. Testen Sie den Traffic mit einercurl
-Anfrage an die VIP.Rufen Sie die VIP für das Projekt ab:
kubectl get forwardingruleexternal -n PROJECT
Die Ausgabe sieht so aus:
NAME BACKENDSERVICE CIDR READY elb-name BACKEND_SERVICE_NAME 192.0.2.0/32 True
Prüfen Sie den Traffic mit einer curl-Anfrage an die VIP am Port, der im Feld
PORT
in der Weiterleitungsregel angegeben ist:curl http://FORWARDING_RULE_VIP:PORT
Ersetzen Sie
FORWARDING_RULE_VIP:PORT
durch die VIP und den Port der Weiterleitungsregel, z. B.192.0.2.0:80
.
Asynchrone Speicherreplikation konfigurieren
GDC-Universen mit mehreren Zonen bieten die Verwendung replizierter Speicherressourcen wie Volumes und Buckets im asynchronen Modus für Notfallwiederherstellungsszenarien. Diese Speicherressourcenoptionen ermöglichen die asynchrone Datenreplikation zwischen zwei beliebigen Zonen in derselben Region. Die asynchrone Replikation erfolgt im Hintergrund und bietet im Katastrophenfall ein niedriges, aber nicht null Recovery Point Objective (RPO). Alle replizierten Daten sind online und sofort zugänglich. Möglicherweise ist jedoch ein manuelles Failover-Verfahren erforderlich, um das Schreiben in die sekundäre Zone zu ermöglichen.
Sie können einen der folgenden asynchronen Speicherreplikationstypen für Ihre VM-Anwendung auswählen:
Dual-Zone-Bucket für Objektspeicher erstellen
Objektspeicherdaten werden in einen einzelnen Bucket geschrieben, dessen Daten in beiden Zonen gespeichert werden. Da die Daten asynchron über Zonen hinweg kopiert werden, enthalten die Zonen möglicherweise nicht zu jedem Zeitpunkt dieselben Objektversionen. Wenn keine zusätzlichen Änderungen vorgenommen werden, werden sie jedoch schließlich gleich. Im Gegensatz zur Volume-Replikation sind replizierte Buckets während Zonenteilungen beschreibbar. Bei jedem Schreibvorgang in ein Objekt wird eine andere Version erstellt. Die neueste Version in einer der beiden Zonen ist der endgültige Zustand, nachdem die Verbindung wiederhergestellt wurde.
Prüfen Sie, ob Ihr Infrastruktur-Operator (IO) die benutzerdefinierte Ressource
BucketLocationConfig
erstellt hat. Diese ist für die zonenübergreifende asynchrone Replikation für den Objektspeicher erforderlich. Diese Ressource muss auf dem globalen API-Server der obersten Ebene bereitgestellt werden.Erstellen Sie die benutzerdefinierte Ressource
Bucket
für zwei Zonen:kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: object.global.gdc.goog/v1 kind: Bucket metadata: name: BUCKET_NAME namespace: PROJECT spec: location: LOCATION_NAME description: Sample DZ Bucket storageClass: Standard EOF
Ersetzen Sie Folgendes:
GLOBAL_API_SERVER
: die kubeconfig-Datei für den globalen API-Server.BUCKET_NAME
: Der Name des Speicher-Buckets.PROJECT
: der Name des Projekts, in dem sich der Bucket befindet.LOCATION_NAME
: Der physische Ort, an dem sich die Objektdaten im Bucket befinden. Dies muss dem Namen einer vorhandenenBucketLocation
-Ressource entsprechen. Wenn Sie den globalen API-Server Ihrer Organisation nach einer Liste der verfügbarenBucketLocation
-Ressourcen abfragen möchten, führen Siekubectl --kubeconfig GLOBAL_API_SERVER bucketlocations
aus. Wenn keineBucketLocation
-Ressourcen vorhanden sind, wenden Sie sich an Ihren IO, um zu prüfen, ob er die asynchrone Replikation aktiviert hat.
Asynchrone Blockspeicherreplikation über Zonen hinweg konfigurieren
Replizierter Blockspeicher bietet asynchron replizierte Volumes (PVs), die die Blockäquivalenz zwischen dem primären und dem sekundären Volume aufrechterhalten. Aufgrund der asynchronen Natur spiegelt das sekundäre Volume den Zustand der primären Zone zu einem bestimmten Zeitpunkt in der Vergangenheit wider (RPO ungleich null). Das sekundäre Volume kann nicht bereitgestellt werden, solange es das Ziel der Replikation ist. Es ist ein manueller Eingriff erforderlich, um die Beziehung zu beenden und Schreibvorgänge zu ermöglichen.
Sie müssen eine benutzerdefinierte VolumeReplicationRelationship
-Ressource auf dem globalen API-Server bereitstellen, um replizierte Daten zu erstellen, die für das Failover verfügbar sind, wenn die Daten der Quellzone nicht mehr verfügbar sind.
Prüfen Sie vor Beginn, ob Ihr Infrastruktur-Operator (IO) die benutzerdefinierten Ressourcen StorageClusterPeering
und StorageVirtualMachinePeering
erstellt und konfiguriert hat, um die Block Storage-Replikation über Zonen hinweg zu ermöglichen. Diese Ressource muss auf dem globalen API-Server der obersten Ebene bereitgestellt werden.
gdcloud
Legen Sie die asynchrone Replikationsbeziehung zwischen der primären Zone und den sekundären Zonen fest:
gdcloud compute disks start-async-replication PRIMARY_DISK_NAME \ --project PROJECT \ --zone PRIMARY_ZONE \ --secondary-disk SECONDARY_DISK_NAME \ --secondary-zone SECONDARY_ZONE
Ersetzen Sie Folgendes:
PRIMARY_DISK_NAME
: der Name des Quelllaufwerks, das repliziert wird.PROJECT
: das GDC-Projekt des primären Laufwerks.PRIMARY_ZONE
: die Zone, in der sich das primäre Laufwerk befindet.SECONDARY_DISK_NAME
: der Name des Ziellaufwerks, auf das repliziert werden soll.SECONDARY_ZONE
: die Zone, in der sich das sekundäre Laufwerk befinden muss.
Erstellen Sie in der Zielzone eine benutzerdefinierte
VolumeFailover
-Ressource, die die Replikation in die Zielzone beendet, wenn die Quellzone aus irgendeinem Grund nicht verfügbar ist:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: storage.gdc.goog/v1 kind: VolumeFailover metadata: name: FAILOVER_NAME namespace: PROJECT spec: volumeReplicationRelationshipRef: REPL_NAME EOF
Ersetzen Sie Folgendes:
MANAGEMENT_API_SERVER
: die kubeconfig-Datei für den Management API-Server.FAILOVER_NAME
: der Name des Failovers.PROJECT
: Das Projekt, in dem sich die Speicherinfrastruktur befindet.REPL_NAME
: der Name der Volume-Replikationsbeziehung.
Weitere Informationen zum Verwalten der asynchronen Replikation für VM-Arbeitslasten finden Sie unter Volumes asynchron replizieren.
API
Erstellen Sie eine benutzerdefinierte
VolumeReplicationRelationship
-Ressourcendatei in YAML und stellen Sie sie auf dem globalen API-Server bereit:kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: storage.global.gdc.goog/v1 kind: VolumeReplicationRelationship metadata: name: VRR_NAME namespace: PROJECT spec: source: virtualMachineDisk: virtualMachineDiskRef: PRIMARY_DISK_NAME zoneRef: PRIMARY_ZONE destination: volumeOverrideName: SECONDARY_DISK_NAME zoneRef: SECONDARY_ZONE EOF
Ersetzen Sie Folgendes:
GLOBAL_API_SERVER
: die kubeconfig-Datei für den globalen Management-API-Server.VRR_NAME
: der Name der Volume-Replikationsbeziehung. Beim Beenden der asynchronen Replikation muss derselbe Name verwendet werden.PROJECT
: das GDC-Projekt des primären Laufwerks.PRIMARY_DISK_NAME
: der Name des Quelllaufwerks, das repliziert wird.PRIMARY_ZONE
: die Zone, in der sich das primäre Laufwerk befindet.SECONDARY_DISK_NAME
: der Name des Ziellaufwerks, auf das repliziert werden soll.SECONDARY_ZONE
: die Zone, in der sich das sekundäre Laufwerk befinden muss.
Erstellen Sie in der Zielzone eine benutzerdefinierte
VolumeFailover
-Ressource, die die Replikation in die Zielzone beendet, wenn die Quellzone aus irgendeinem Grund nicht verfügbar ist:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: storage.gdc.goog/v1 kind: VolumeFailover metadata: name: FAILOVER_NAME namespace: PROJECT spec: volumeReplicationRelationshipRef: REPL_NAME EOF
Ersetzen Sie Folgendes:
MANAGEMENT_API_SERVER
: Die kubeconfig-Datei für den Management API-Server.FAILOVER_NAME
: der Name des Failovers.PROJECT
: Das Projekt, in dem sich die Speicherinfrastruktur befindet.REPL_NAME
: der Name der Volume-Replikationsbeziehung.
Weitere Informationen zum Verwalten der asynchronen Replikation für VM-Arbeitslasten finden Sie unter Volumes asynchron replizieren.