Regionalen nichtflüchtigen Speicher bereitstellen

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.

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: kubernetes.io/gce-pd
parameters:
  type: pd-standard
  replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
  - key: topology.kubernetes.io/zone
    values:
    - europe-west1-b
    - europe-west1-c

Es ist möglich, für allowedTopologies keine Angabe zu machen. 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.

Erstellen Sie ein PersistentVolumeClaim-Objekt und verwenden Sie das Feld storageClassName, um auf die von Ihnen erstellte StorageClass zu verweisen. Das folgende Manifest erstellt beispielsweise ein PersistentVolumeClaim namens regional-pvc und verweist auf regionalpd-storageclass:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: regional-pvc
  namespace: testns
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 200Gi
  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. 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 beta compute disks create \
 gce-disk-1 \
   --region europe-west1 \
   --replica-zones europe-west1-b,europe-west1-c

Sie können dann ein PersistentVolume erstellen, das auf den regionalen nichtflüchtigen Speicher verweist. Zusätzlich zu den Objekten unter Vorhandenen nichtflüchtigen Speicher als PersistentVolumes verwenden sollte das PersistentVolume für einen regionalen nichtflüchtigen Speicher auch Knotenaffinität enthalten, beispielsweise:

  spec:
    ...
    nodeAffinity:
      required:
        nodeSelectorTerms:
          - matchExpressions:
              - key: topology.kubernetes.io/zone
                operator: In
                values:
                  - europe-west1-b
                  - europe-west1-c

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