Cette page explique comment activer le provisionnement dynamique des disques persistants régionaux et comment les provisionner manuellement dans Google Kubernetes Engine (GKE).
Pour créer des solutions de bout en bout pour les applications hautement disponibles dotées de disques persistants régionaux, consultez Augmenter la disponibilité des applications avec état avec l'opérateur HA avec état.
Disques persistants régionaux
Comme pour les disques persistants zonaux, les disques persistants régionaux peuvent être provisionnés de manière dynamique, au besoin, ou manuellement par l'administrateur du cluster. Le provisionnement dynamique est toutefois recommandé.
Provisionnement dynamique
Pour activer le provisionnement dynamique des disques persistants régionaux, créez une StorageClass
avec le paramètre replication-type
et spécifiez des contraintes de zone dans allowedTopologies
.
Par exemple, le fichier manifeste suivant décrit une StorageClass
nommée regionalpd-storageclass
qui utilise des disques persistants standards et qui réplique les données sur les zones europe-west1-b
et 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 vous utilisez un cluster régional, vous pouvez laisser allowedTopologies
non spécifié. Le cas échéant, lorsque vous créez un pod qui utilise un PersistentVolumeClaim
qui utilise cette StorageClass
, un disque persistant régional est provisionné avec deux zones. Une zone est identique à celle dans laquelle le pod est programmé. L'autre zone est choisie de manière aléatoire parmi les zones disponibles pour le cluster.
Lorsque vous utilisez un cluster zonal, allowedTopologies
doit être défini.
Une fois l'objet StorageClass
créé, créez un objet PersistentVolumeClaim
en utilisant le champ storageClassName
pour faire référence à StorageClass
. Par exemple, le fichier manifeste suivant crée un objet PersistentVolumeClaim
nommé regional-pvc
et fait référence à regionalpd-storageclass
:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: regional-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Gi
storageClassName: regionalpd-storageclass
Comme la StorageClass
est configurée avec volumeBindingMode: WaitForFirstConsumer
, le PersistentVolume
n'est provisionné qu'une fois qu'un pod utilisant l'objet PersistentVolumeClaim
a été créé.
Le fichier manifeste suivant est un exemple de pod utilisant l'objet PersistentVolumeClaim
précédemment créé :
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
Provisionnement manuel
Commencez par créer un disque persistant régional à l'aide de la commande gcloud compute disks create
. L'exemple suivant crée un disque nommé gce-disk-1
, répliqué sur les zones europe-west1-b
et europe-west1-c
:
gcloud compute disks create gce-disk-1 \
--size 500Gi \
--region europe-west1 \
--replica-zones europe-west1-b,europe-west1-c
Vous pouvez ensuite créer un objet PersistentVolume
qui fait référence au disque persistant régional que vous venez de créer. Outre les objets de
Utiliser des disques persistants préexistants en tant que ressources PersistentVolume, le PersistentVolume
pour un disque persistant régional doit également spécifier unnode-affinity
.
Si vous utilisez un StorageClass
, il doit spécifier le pilote CSI de disque persistant.
Voici un exemple de fichier manifeste StorageClass
qui utilise des disques persistants standards et qui réplique les données sur les zones europe-west1-b
et 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
Voici un exemple de fichier manifeste qui crée un objet PersistentVolume
nommé pv-demo
et fait référence à 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
Notez les points suivants pour l'exemple PersistentVolume
:
- Le champ
volumeHandle
contient des informations sur l'appelgcloud compute disks create
, y compris votrePROJECT_ID
. - Le champ
claimRef.namespace
doit être spécifié même s'il est défini surdefault
.
Nommer les disques persistants
Kubernetes n'arrive pas à différencier les disques persistants zonaux et régionaux qui portent le même nom. Pour contourner ce problème, assurez-vous que les disques persistants sont dotés de noms uniques. Ce problème n'apparaît pas lorsque vous utilisez des disques persistants provisionnés dynamiquement.
Étape suivante
- Suivez un tutoriel pour savoir comment déployer WordPress sur GKE avec des disques persistants et Cloud SQL.