Auf dieser Seite wird erläutert, wie Sie die dynamische Bereitstellung regionaler nichtflüchtiger Speicher aktivieren und diese manuell in Google Kubernetes Engine (GKE) bereitstellen.
Informationen zum Erstellen von End-to-End-Lösungen für Hochverfügbarkeitsanwendungen mit regionalen nichtflüchtigen Speichern finden Sie unter Verfügbarkeit zustandsorientierter Anwendungen mit zustandsorientiertem HA-Operator erhöhen.
Regionale nichtflüchtige Speicher
Ebenso wie zonaler nichtflüchtiger Speicher kann auch regionaler nichtflüchtiger Speicher dynamisch nach Bedarf oder vorab manuell vom Clusteradministrator bereitgestellt werden, obwohl die dynamische Bereitstellung empfohlen wird.
Dynamische Bereitstellung
Um die dynamische Bereitstellung regionaler nichtflüchtiger Speicher zu aktivieren, erstellen Sie eine StorageClass
mit dem Parameter replication-type
und geben Sie Zoneneinschränkungen in allowedTopologies
an.
Das folgende Manifest beschreibt beispielsweise eine StorageClass
namens regionalpd-storageclass
, die nichtflüchtige Standardspeicher verwendet und Daten in die Zonen europe-west1-b
und europe-west1-c
repliziert:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: regionalpd-storageclass
provisioner: pd.csi.storage.gke.io
parameters:
type: pd-balanced
replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
- key: topology.gke.io/zone
values:
- europe-west1-b
- europe-west1-c
Bei Verwendung eines regionalen Clusters können Sie allowedTopologies
nicht angeben. In diesem Fall wird beim Erstellen eines Pods, der einen PersistentVolumeClaim
verwendet, welcher diese StorageClass
nutzt, ein regionaler nichtflüchtiger Speicher mit zwei Zonen bereitgestellt. Eine Zone entspricht der Zone, in der der Pod geplant ist. Die andere Zone wird zufällig aus den für den Cluster verfügbaren Zonen ausgewählt.
Bei Verwendung eines zonalen Clusters muss allowedTopologies
festgelegt werden.
Nachdem Sie das Objekt StorageClass
erstellt haben, erstellen Sie als Nächstes ein Objekt PersistentVolumeClaim
und verweisen Sie mit dem Feld storageClassName
auf das Objekt StorageClass
. Das folgende Manifest erstellt beispielsweise ein PersistentVolumeClaim
namens regional-pvc
und verweist auf regionalpd-storageclass
:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: regional-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Gi
storageClassName: regionalpd-storageclass
Da die StorageClass
mit volumeBindingMode: WaitForFirstConsumer
konfiguriert ist, wird das PersistentVolume
erst bereitgestellt, wenn ein Pod erstellt wurde, der den PersistentVolumeClaim
verwendet.
Das folgende Manifest ist ein Beispiel-Pod mit dem zuvor erstellten PersistentVolumeClaim
:
kind: Pod
apiVersion: v1
metadata:
name: task-pv-pod
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: regional-pvc
containers:
- name: task-pv-container
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage
Manuelle Bereitstellung
Erstellen Sie zuerst einen regionalen nichtflüchtigen Speicher mit dem Befehl gcloud compute disks create
. Im folgenden Beispiel wird ein Speicher namens gce-disk-1
erstellt, der in die Zonen europe-west1-b
und europe-west1-c
repliziert wird:
gcloud compute disks create gce-disk-1 \
--size 500Gi \
--region europe-west1 \
--replica-zones europe-west1-b,europe-west1-c
Sie können dann ein PersistentVolume
erstellen, das auf den gerade erstellten regionalen nichtflüchtigen Speicher verweist. Zusätzlich zu den Objekten in
Vorhandenen nichtflüchtigen Speicher als PersistentVolumes verwenden sollte das PersistentVolume
für einen regionalen nichtflüchtigen Speicher auch eine node-affinity
angeben.
Wenn Sie einen StorageClass
verwenden, sollte der CSI-Treiber für den nichtflüchtigen Speicher angegeben werden.
Hier ein Beispiel für ein StorageClass
-Manifest, das nichtflüchtige Standardspeicher verwendet und Daten in die Zonen europe-west1-b
und europe-west1-c
repliziert:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: regionalpd-storageclass
provisioner: pd.csi.storage.gke.io
parameters:
type: pd-balanced
replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
- key: topology.gke.io/zone
values:
- europe-west1-b
- europe-west1-c
Hier ist ein Beispielmanifest, das einen PersistentVolume
namens pv-demo
erstellt und auf regionalpd-storageclass
verweist:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-demo
spec:
storageClassName: "regionalpd-storageclass"
capacity:
storage: 500Gi
accessModes:
- ReadWriteOnce
claimRef:
namespace: default
name: pv-claim-demo
csi:
driver: pd.csi.storage.gke.io
volumeHandle: projects/PROJECT_ID/regions/europe-west1/disks/gce-disk-1
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: topology.gke.io/zone
operator: In
values:
- europe-west1-b
- europe-west1-c
Beachten Sie für das Beispiel PersistentVolume
Folgendes:
- Das Feld
volumeHandle
enthält Details zum Aufrufgcloud compute disks create
, einschließlich deinesPROJECT_ID
. - Das Feld
claimRef.namespace
muss auch angegeben werden, wenn es aufdefault
gesetzt ist.
Nichtflüchtige Speicher benennen
Kubernetes kann nicht zwischen zonalen und regionalen nichtflüchtigen Speichern mit demselben Namen unterscheiden. Geben Sie daher allen nichtflüchtigen Speichern eindeutige Namen. Bei der Verwendung von dynamisch bereitgestellten nichtflüchtigen Speichern tritt dieses Problem nicht auf.
Nächste Schritte
- Sehen Sie sich in einer Anleitung an, wie Sie WordPress auf GKE mit nichtflüchtigem Speicher und Cloud SQL bereitstellen.