Aprovisiona discos persistentes regionales

En esta página, se explica cómo habilitar el aprovisionamiento dinámico de discos persistentes regionales y cómo aprovisionarlos de forma manual en Google Kubernetes Engine (GKE).

Discos persistentes regionales

Al igual que con los discos persistentes zonales, el administrador del clúster puede aprovisionar de forma dinámica o manual por adelantado los discos persistentes regionales según sea necesario, aunque la primera opción es la recomendada.

Aprovisionamiento dinámico

Para habilitar el aprovisionamiento dinámico de discos persistentes regionales, crea una StorageClass con el parámetro replication-type y especifica las restricciones de zona en allowedTopologies.

Por ejemplo, en el siguiente manifiesto, se describe una StorageClass llamada regionalpd-storageclass en la que se usan discos persistentes estándares y se replican datos en las zonas europe-west1-b y europe-west1-c:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: regionalpd-storageclass
provisioner: pd.csi.storage.gke.io
parameters:
  type: pd-standard
  replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
  - key: topology.gke.io/zone
    values:
    - europe-west1-b
    - europe-west1-c

Si usas un clúster regional, puedes dejar allowedTopologies sin especificar. Si lo haces, cuando crees un pod que consume una PersistentVolumeClaim que usa este StorageClass, se aprovisiona un disco persistente regional con dos zonas. Una zona es la misma en la que está programado el pod. La otra zona se elige al azar entre las zonas disponibles para el clúster.

Cuando se usa un clúster zonal, allowedTopologies debe configurarse.

Una vez creado StorageClass, crea un objeto PersistentVolumeClaim y usa el campo storageClassName para hacer referencia al StorageClass. Por ejemplo, con el siguiente manifiesto, se crea un PersistentVolumeClaim llamado regional-pvc que hace referencia a regionalpd-storageclass:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: regional-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Gi
  storageClassName: regionalpd-storageclass

Dado que StorageClass se configura con volumeBindingMode: WaitForFirstConsumer, el PersistentVolume no se aprovisiona hasta que se crea un pod mediante PersistentVolumeClaim.

El siguiente manifiesto es un pod de ejemplo en el que se usa el PersistentVolumeClaim creado con anterioridad:

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

Aprovisionamiento manual

Primero, crea un disco persistente regional. En el siguiente ejemplo, se crea un disco llamado gce-disk-1 replicado en las zonas europe-west1-b y europe-west1-c:

gcloud compute disks create \
 gce-disk-1 \
   --size 500Gi \
   --region europe-west1 \
   --replica-zones europe-west1-b,europe-west1-c

Luego, puedes crear un PersistentVolume que haga referencia al disco persistente regional. Además de los objetos que figuran en Usa discos persistentes preexistentes como PersistentVolumes, el PersistentVolume para un disco persistente regional también debe contener node-affinity. Si se usa un StorageClass, debe especificar el controlador de CSI de PD. Ten en cuenta que volumeHandle se completa con los detalles de la llamada gcloud compute disks create, incluido el ID del proyecto. Además, el espacio de nombres en claimRef se debe especificar incluso cuando es el predeterminado.

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: regionalpd-storageclass
provisioner: pd.csi.storage.gke.io
parameters:
  type: pd-standard
  replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
  - key: topology.gke.io/zone
    values:
    - europe-west1-b
    - europe-west1-c
---
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

Asigna nombres a los discos persistentes

Kubernetes no puede distinguir entre discos persistentes regionales y zonales que tengan el mismo nombre. Para evitar este problema, asegúrate de que los discos persistentes tengan nombres únicos. Esto no es necesario cuando se usan los discos persistentes aprovisionados de forma dinámica.

¿Qué sigue?