Cette page explique comment activer le provisionnement dynamique des volumes Hyperdisk équilibrés à haute disponibilité et des disques persistants régionaux, et comment les provisionner manuellement dans Google Kubernetes Engine (GKE). Pour connaître la compatibilité avec les types de machines, consultez Limites pour les disques régionaux et Séries de machines compatibles avec Hyperdisk. En règle générale, vous devez utiliser des volumes Hyperdisk équilibrés à haute disponibilité pour les séries de machines de troisième génération ou ultérieures, et des disques persistants régionaux pour les séries de machines de deuxième génération ou antérieures. Pour en savoir plus sur la génération des séries de machines, consultez la terminologie Compute Engine.
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. Cette fonctionnalité n'est pas compatible avec les volumes Hyperdisk équilibré à haute disponibilité.
Haute disponibilité sur Hyperdisk équilibré
Cet exemple montre comment les volumes Hyperdisk équilibrés à haute disponibilité peuvent être provisionnés de manière dynamique, au besoin, ou manuellement par l'administrateur du cluster.
Provisionnement dynamique
Enregistrez le fichier manifeste suivant dans un fichier nommé
balanced-ha-storage.yaml
.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: balanced-ha-storage provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: hyperdisk-balanced-high-availability provisioned-throughput-on-create: "250Mi" provisioned-iops-on-create: "7000" allowedTopologies: - matchLabelExpressions: - key: topology.gke.io/zone values: - ZONE1 - ZONE2
Remplacez les éléments suivants :
ZONE1
etZONE2
: zones de la région dans lesquelles le volume provisionné de manière dynamique sera répliqué.
Créez la StorageClass :
kubectl create -f hdb-ha-example-class.yaml
Enregistrez le fichier manifeste de PersistentVolumeClaim suivant dans un fichier nommé
pvc-example.yaml
:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ACCESS_MODE storageClassName: balanced-ha-storage resources: requests: storage: 20Gi
Remplacez les éléments suivants :
ACCESS_MODE
: Hyperdisk équilibré à haute disponibilité est compatible avecReadWriteOnce
,ReadWriteMany
etReadWriteOncePod
. Pour connaître les différences et les cas d'utilisation de chaque mode d'accès, consultez Modes d'accès aux volumes persistants.
Appliquez la PersistentVolumeClaim qui fait référence à la StorageClass que vous avez créée précédemment :
kubectl apply -f pvc-example.yaml
Provisionnement manuel
Suivez la documentation Compute Engine pour créer manuellement un volume Hyperdisk équilibré à haute disponibilité.
Enregistrez le fichier manifeste PersistentVolume suivant dans un fichier nommé
pv-example.yaml
. Le fichier manifeste fait référence au volume Hyperdisk équilibré à haute disponibilité que vous venez de créer :apiVersion: v1 kind: PersistentVolume metadata: name: pv-demo spec: capacity: storage: 500Gi accessModes: - ACCESS_MODE claimRef: namespace: default name: podpvc csi: driver: pd.csi.storage.gke.io volumeHandle: projects/PROJECT_ID/regions/REGION/disks/gce-disk-1 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.gke.io/zone operator: In values: - ZONE1 - ZONE2
Remplacez les éléments suivants :
PROJECT_ID
: ID du projet du volume que vous avez créé.REGION
: région du disque que vous avez créé. Pour connaître la disponibilité régionale la plus récente, consultez la documentation Compute Engine.ZONE1
,ZONE2
: zones de la région dans lesquelles le volume que vous avez créé est répliqué.ACCESS_MODE
: Hyperdisk équilibré à haute disponibilité est compatible avecReadWriteOnce
,ReadWriteMany
etReadWriteOncePod
. Pour connaître les différences et les cas d'utilisation de chaque mode d'accès, consultez Modes d'accès aux volumes persistants.
Créez le PersistentVolume qui fait référence au volume Hyperdisk Balanced à haute disponibilité que vous avez créé précédemment :
kubectl apply -f pv-example.yaml
Enregistrez le fichier manifeste de PersistentVolumeClaim suivant dans un fichier nommé
pvc-example.yaml
:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ACCESS_MODE storageClassName: balanced-ha-storage resources: requests: storage: 20Gi
Remplacez les éléments suivants :
ACCESS_MODE
: Hyperdisk équilibré à haute disponibilité est compatible avecReadWriteOnce
,ReadWriteMany
etReadWriteOncePod
. Il doit s'agir du même mode d'accès que celui spécifié dans PersistentVolume à l'étape précédente. Pour connaître les différences et les cas d'utilisation de chaque mode d'accès, consultez Modes d'accès aux volumes persistants.
Appliquez la PersistentVolumeClaim qui fait référence au PersistentVolume que vous avez créé précédemment :
kubectl apply -f pvc-example.yaml
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é.
Pour utiliser des disques persistants régionaux de type pd-standard
, définissez l'attribut spec.resources.requests.storage
de PersistentVolumeClaim sur au moins 200 Gio. Si votre cas d'utilisation nécessite un volume plus faible, envisagez d'utiliser pd-balanced
ou pd-ssd
à la place.
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.