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).
Si deseas crear soluciones de extremo a extremo para aplicaciones de alta disponibilidad con discos persistentes regionales, consulta Aumenta la disponibilidad de las apps con estado con el operador de HA con estado.
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-balanced
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, se debe configurar allowedTopologies
.
Una vez creado StorageClass
, crea un objeto PersistentVolumeClaim
y usa el campo storageClassName
para hacer referencia a 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 con el comando gcloud compute disks create
. 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 que acabas de crear. Además de los objetos que figuran en Usa discos persistentes preexistentes como PersistentVolumes, el PersistentVolume
para un disco persistente regional también debe especificar una node-affinity
.
Si usas un StorageClass
, debe especificar el controlador CSI del disco persistente.
A continuación, se muestra un ejemplo de un manifiesto StorageClass
que usa discos persistentes estándares y replica 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-balanced
replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
- key: topology.gke.io/zone
values:
- europe-west1-b
- europe-west1-c
A continuación, se muestra un manifiesto de ejemplo que crea un PersistentVolume
con el nombre pv-demo
y hace referencia a regionalpd-storageclass
:
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
Ten en cuenta lo siguiente para el ejemplo de PersistentVolume
:
- El campo
volumeHandle
contiene detalles de la llamadagcloud compute disks create
, incluido tuPROJECT_ID
. - El campo
claimRef.namespace
debe especificarse incluso cuando se configura endefault
.
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?
- Sigue un instructivo para aprender a implementar WordPress en GKE con discos persistentes y Cloud SQL.