Cette page explique comment vos clusters Google Kubernetes Engine (GKE) peuvent mettre en commun et partager la capacité de stockage, le débit et les IOPS sur plusieurs disques à l'aide des pools de stockage Hyperdisk GKE.
Présentation
Les pools de stockage regroupent logiquement les appareils de stockage physiques, ce qui vous permet de segmenter vos ressources. Vous pouvez provisionner des Hyperdisks Google Cloud dans ces pools de stockage, ce qui crée essentiellement des pools de stockage Hyperdisk. Les pools de stockage Hyperdisk offrent une capacité, un débit et des IOPS préprovisionnés que vos disques de cluster GKE peuvent partager.
Vous pouvez utiliser des pools de stockage Hyperdisk pour gérer vos ressources de stockage plus efficacement et à moindre coût. Vous pouvez ainsi profiter des technologies d'efficacité telles que la déduplication et le provisionnement allégé.
Dans ce guide, vous allez utiliser la zone us-east4-c
pour créer le pool de stockage Hyperdisk équilibré et d'autres ressources.
Considérations liées à la planification
Tenez compte des exigences et limites suivantes avant de provisionner et d'utiliser votre pool de stockage Hyperdisk.
Créer et gérer des pools de stockage
Les exigences et limites suivantes s'appliquent :
- Toutes les limites des pools de stockage Hyperdisk Compute Engine s'appliquent.
- Toutes les limites de création de disques dans un pool de stockage Hyperdisk s'appliquent.
- Le type de pool de stockage Hyperdisk que vous créez détermine le type de disques que vous pouvez créer dans le pool de stockage. Consultez la section Types de pools de stockage Hyperdisk.
Provisionner des disques de démarrage dans des pools de stockage
Les exigences et limites suivantes s'appliquent:
- Assurez-vous que les emplacements de nœuds du cluster et les emplacements de nœuds du pool de nœuds correspondent exactement aux zones du pool de stockage. Cette restriction ne s'applique pas si le provisionnement automatique des nœuds est activé. Le provisionnement automatique des nœuds peut créer automatiquement des pools de nœuds dans les zones appropriées, si nécessaire.
- Assurez-vous que le type de machine qui exécute votre pod est compatible avec l'association d'un type de disque Hyperdisk avec équilibrage. Hyperdisk Throughput n'est pas compatible en tant que disque de démarrage. Consultez la documentation compatible avec les types de machines Hyperdisk.
- Vous ne pouvez provisionner des disques de démarrage dans des pools de stockage que sur des pools de nœuds créés ou mis à jour manuellement.
- Lorsque des nœuds sont créés automatiquement à l'aide du provisionnement automatique des nœuds, les disques de démarrage de ces nœuds ne peuvent pas être placés dans un pool de stockage.
Provisionner un disque associé dans des pools de stockage
Les exigences et limites suivantes s'appliquent:
- La version GKE minimale requise pour le provisionnement de disques connectés dans des pools de stockage est la version 1.29.2-gke.1035000 ou ultérieure.
- Assurez-vous que le pilote CSI de disque persistant Compute Engine est activé. Le pilote de disque persistant Compute Engine est activé par défaut sur les nouveaux clusters Autopilot et Standard et ne peut pas être désactivé ni modifié dans les clusters Autopilot. Pour activer le pilote, consultez la section Activer le pilote CSI de disque persistant Compute Engine sur un cluster existant.
- Assurez-vous que le pool de stockage se trouve dans au moins un des emplacements de nœud du cluster et des emplacements de nœud du pool de nœuds.
- Vous ne pouvez provisionner que des disques associés à Hyperdisk Throughput et Hyperdisk avec équilibrage dans des pools de stockage. Le type du disque connecté doit correspondre au type du pool de stockage. Pour en savoir plus, consultez la page Types de pools de stockage Hyperdisk.
- Assurez-vous que le type de machine qui exécute votre pod est compatible avec l'association du type de disque que vous utilisez à partir du pool de stockage. Pour en savoir plus, consultez la section Compatibilité avec les types de machines Hyperdisk.
Quota
Lorsque vous créez un pool de stockage Hyperdisk, vous pouvez le configurer avec le provisionnement standard ou avancé pour la capacité et les performances. Si vous souhaitez augmenter le quota en termes de capacité, de débit ou d'IOPS, demandez un quota plus élevé pour le filtre de quota approprié.
Pour en savoir plus, consultez les pages Afficher les quotas de votre projet et Demander un quota plus élevé.
Utilisez les filtres de quota suivants pour les pools de stockage Hyperdisk Balanced:
HDB-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region
: pour augmenter la capacité avec le provisionnement de capacité Advanced.HDB-STORAGE-POOL-TOTAL-ADVANCED-IOPS-per-project-region
: pour augmenter les IOPS avec le provisionnement de performances Advanced.HDB-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region
: pour augmenter le débit avec le provisionnement de performances Advanced.HDB-TOTAL-GB-per-project-region
: pour augmenter la capacité avec le provisionnement de capacité standard.HDB-TOTAL-IOPS-per-project-region
: pour augmenter les IOPS avec le provisionnement de performances Standard.HDB-TOTAL-THROUGHPUT-per-project-region
: pour augmenter le débit avec le provisionnement de performances Standard.
Utilisez les filtres de quota suivants pour les pools de stockage Hyperdisk Throughput :
HDT-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region
: pour augmenter la capacité avec le provisionnement de capacité Advanced.HDT-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region
: pour augmenter le débit avec le provisionnement des performances Advanced.HDT-TOTAL-GB-per-project-region
: pour augmenter la capacité avec le provisionnement de capacité Standard.HDT-TOTAL-THROUGHPUT-per-project-region
: pour augmenter le débit avec le provisionnement de performances standard.
Par exemple, si vous souhaitez augmenter la capacité totale des pools de stockage Hyperdisk Balanced avec un provisionnement de capacité Advanced, par projet et par région, demandez un quota plus élevé pour le filtre suivant:
hdb-storage-pool-total-advanced-capacity-per-project-region
.
Tarifs
Pour en savoir plus sur les tarifs, consultez la page Tarifs des pools de stockage Hyperdisk.
Avant de commencer
Avant de commencer, effectuez les tâches suivantes :
- Activez l'API Google Kubernetes Engine. Activer l'API Google Kubernetes Engine
- Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez gcloud CLI. Si vous avez déjà installé gcloud CLI, assurez-vous de disposer de la dernière version en exécutant la commande
gcloud components update
.
- Consultez les régions et zones compatibles pour créer votre pool de stockage Hyperdisk équilibré.
Créer un pool de stockage Hyperdisk
Créez un pool de stockage Hyperdisk avant de provisionner des disques de démarrage ou des disques associés dans ce pool de stockage. Pour en savoir plus, consultez la page Créer des pools de stockage Hyperdisk.
Assurez-vous de créer des pools de stockage dans l'une des zones compatibles.
Par exemple, utilisez la commande suivante pour créer un pool de stockage Hyperdisk Balanced avec une capacité et des performances avancées, et provisionner une capacité de 10 To, 10 000 IOPS/s et un débit de 1 024 Mbit/s dans la zone us-east4-c
:
export PROJECT_ID=PROJECT_ID
export ZONE=us-east4-c
gcloud compute storage-pools create pool-$ZONE \
--provisioned-capacity=10tb --storage-pool-type=hyperdisk-balanced \
--zone=$ZONE --project=$PROJECT_ID --capacity-provisioning-type=advanced \
--performance-provisioning-type=advanced --provisioned-iops=10000 \
--provisioned-throughput=1024
Remplacez PROJECT_ID
par l'ID de votre projet Google Cloud.
Inspecter les zones de pool de stockage
Pour les clusters Autopilot et les clusters Standard avec le provisionnement automatique des nœuds activé, vous pouvez créer un pool de stockage dans n'importe quelle zone de la région du cluster. Si aucun pool de nœuds n'existe dans la zone dans laquelle vous avez créé le pool de stockage, les pods restent à l'état
Pending
jusqu'à ce que l'autoscaler de cluster GKE puisse provisionner un nouveau pool de nœuds dans cette zone.Pour les clusters standards sans provisionnement automatique des nœuds, créez des pools de stockage dans les zones de nœuds par défaut de votre cluster, car les pools de stockage sont des ressources zonales. Vous pouvez définir les zones de nœud de votre cluster à l'aide de l'indicateur
--node-locations
.- Pour les clusters zonaux, si vous ne spécifiez pas la valeur
--node-locations
, tous les nœuds sont créés dans la zone principale du cluster. - Pour les clusters régionaux, si vous ne spécifiez pas de
--node-locations
, GKE répartit vos nœuds de calcul dans trois zones de la région choisies de manière aléatoire.
- Pour les clusters zonaux, si vous ne spécifiez pas la valeur
Pour inspecter les zones de nœuds par défaut d'un cluster, exécutez la commande suivante:
gcloud container clusters describe CLUSTER_NAME | yq '.locations'
Remplacez CLUSTER_NAME
par le nom du cluster que vous souhaitez créer lors du provisionnement d'un disque de démarrage ou d'un disque associé.
Provisionner un disque de démarrage GKE dans un pool de stockage Hyperdisk
Vous pouvez provisionner un disque de démarrage GKE dans un pool de stockage Hyperdisk lorsque vous effectuez l'une des opérations suivantes:
- Lors de la création d'un cluster GKE
- Lors de la création d'un pool de nœuds
- Lors de la mise à jour d'un pool de nœuds existant
Lors de la création d'un cluster
Pour créer un cluster GKE avec des disques de démarrage provisionnés dans un pool de stockage, exécutez la commande suivante:
gcloud container clusters create CLUSTER_NAME \
--disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
--node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
--zone=ZONE
Remplacez les éléments suivants :
CLUSTER_NAME
: indiquez un nom unique pour le cluster que vous créez.DISK_TYPE
: définissez cette valeur surhyperdisk-balanced.
. Si aucune valeur n'est spécifiée, le type de disque est défini par défaut sur "Hyperdisk équilibré".STORAGE_POOL,[...]
: liste des chemins d'accès aux ressources du pool de stockage (par exemple,projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
) où les disques de démarrage du cluster seront provisionnés, séparés par une virgule. Assurez-vous que les zones des chemins d'accès aux ressources du pool de stockage correspondent aux zones de--node-locations
.ZONE,[...]
: liste des zones, séparées par une virgule, dans lesquelles l'empreinte de votre nœud doit être répliquée. Pour les clusters régionaux, vous pouvez spécifier des régions à la place. Toutes les zones doivent se trouver dans la même région que le cluster, spécifiée par les options-location
,--zone
ou--region
.MACHINE_TYPE
: type de machine compatible que vous souhaitez utiliser pour vos nœuds.ZONE
: zone dans laquelle vous souhaitez créer votre cluster. Utilisez l'option—region
pour créer un cluster régional.
Lorsque vous créez un pool de nœuds
Pour créer un pool de nœuds GKE avec des disques de démarrage provisionnés dans un pool de stockage, exécutez la commande suivante:
gcloud container node-pools create NODE_POOL_NAME \
--disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
--node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
--zone=ZONE --cluster=CLUSTER_NAME
Remplacez les éléments suivants :
NODE_POOL_NAME
: indiquez un nom unique pour le pool de nœuds que vous créez.DISK_TYPE
: définissez cette valeur surhyperdisk-balanced.
. Si aucune valeur n'est spécifiée, le type de disque est défini par défaut sur "Hyperdisk équilibré".STORAGE_POOL,[...]
: liste des chemins d'accès aux ressources du pool de stockage (par exemple,projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
) où les disques de démarrage du cluster seront provisionnés, séparés par une virgule. Assurez-vous que les zones des chemins d'accès aux ressources du pool de stockage correspondent aux valeurs de--node-locations
.ZONE,[...]
: liste des zones, séparées par une virgule, dans lesquelles l'empreinte de votre nœud doit être répliquée. Toutes les zones doivent se trouver dans la même région que le cluster, spécifiée par les indicateurs-location
,--zone
ou--region
.MACHINE_TYPE
: type de machine compatible que vous souhaitez utiliser pour vos nœuds.ZONE
: zone dans laquelle vous souhaitez créer le pool de nœuds.CLUSTER_NAME
: cluster existant dans lequel vous créez le pool de nœuds.
Lorsque vous mettez à jour un pool de nœuds
Vous pouvez utiliser une commande update
pour ajouter ou remplacer des pools de stockage dans un pool de nœuds.
Cette commande ne peut pas être utilisée pour supprimer des pools de stockage d'un pool de nœuds.
Pour mettre à jour un pool de nœuds GKE afin que ses disques de démarrage soient provisionnés dans un pool de stockage, exécutez la commande suivante.
gcloud container node-pools update NODE_POOL_NAME \
--storage-pools=STORAGE_POOL,[...] \
--zone=ZONE --cluster=CLUSTER_NAME
NODE_POOL_NAME
: nom d'un pool de nœuds existant que vous souhaitez mettre à jour pour utiliser un pool de stockage.STORAGE_POOL,[...]
: liste des chemins d'accès aux ressources de pool de stockage existants, séparés par une virgule (par exemple,projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
). Assurez-vous que les zones des chemins d'accès aux ressources du pool de stockage correspondent à la zone du pool de nœuds que vous mettez à jour.ZONE
: zone où se trouve le pool de nœuds.CLUSTER_NAME
: nom du cluster GKE auquel appartient ce pool de nœuds.
GKE met à jour le pool de nœuds en fonction de la stratégie de mise à niveau du pool de nœuds.
Provisionner un disque associé à GKE dans un pool de stockage Hyperdisk
Dans cette section :
- Vous créez un cluster GKE avec des disques associés provisionnés dans un pool de stockage.
- Créez une ressource StorageClass pour provisionner de manière dynamique un PersistentVolume (PV) lorsqu'un pod le demande via un PersistentVolumeClaim (PVC). Pour qu'un PV puisse utiliser les ressources partagées du pool de stockage, vous devez spécifier le pool de stockage à l'aide du paramètre
storage-pools
dans votre StorageClass. La StorageClass est ensuite utilisée dans une PVC pour provisionner le volume Hyperdisk Balanced qui sera utilisé par le pod. - Créez un PVC pour demander un PV (un espace de stockage Hyperdisk) pour un pod à partir de votre cluster GKE. Cela vous permet de bénéficier des ressources partagées du pool de stockage.
- Créez un déploiement qui utilise un PVC pour vous assurer que votre application a accès au stockage persistant même après le redémarrage et la reprogrammation du pod.
Créer un cluster GKE
Avant de commencer, consultez les considérations à prendre en compte pour provisionner un disque connecté.
Autopilot
Pour créer un cluster Autopilot à l'aide de la gcloud CLI, consultez la section Créer un cluster Autopilot.
Exemple :
gcloud container clusters create-auto CLUSTER_NAME --region=REGION
Remplacez les éléments suivants :
CLUSTER_NAME
: indiquez un nom unique pour le cluster que vous créez.REGION
: région dans laquelle vous créez le cluster.
Pour sélectionner un type de machine compatible, vous devez spécifier le nodeSelector cloud.google.com/compute-class: Performance
lors de la création d'un déploiement. Pour obtenir la liste des séries de machines Compute Engine disponibles avec la classe de calcul Performance, consultez la page Séries de machines compatibles.
Standard
Pour créer un cluster zonal standard à l'aide de la gcloud CLI, consultez Créer un cluster zonal.
Pour créer un cluster régional standard à l'aide de gcloud CLI, consultez la page Créer un cluster régional.
Exemple :
gcloud container clusters create CLUSTER_NAME --zone=ZONE --project=PROJECT_ID --machine-type=MACHINE_TYPE --disk-type="DISK_TYPE"
Remplacez les éléments suivants :
CLUSTER_NAME
: indiquez un nom unique pour le cluster que vous créez.ZONE
: zone dans laquelle vous créez le cluster. Utilisez l'option—region
pour créer un cluster régional.PROJECT_ID
: ID de projet de votre compte Google Cloud.MACHINE_TYPE
: type de machine compatible que vous souhaitez utiliser pour vos nœuds.DISK_TYPE
: définissez cette valeur surhyperdisk-balanced.
. Si vous laissez ce champ vide, le type de disque est défini par défaut sur "Hyperdisk équilibré".
Créer un objet StorageClass
Dans Kubernetes, pour indiquer que vous souhaitez que votre PV soit créé dans un pool de stockage, utilisez une StorageClass. Pour en savoir plus, consultez StorageClasses.
Pour créer une ressource StorageClass avec le niveau de débit ou d'IOPS souhaité :
- Utilisez
pd.csi.storage.gke.io
dans le champ approvisionneur. - Spécifiez le type de stockage Hyperdisk Balanced.
- Spécifiez le paramètre
storage-pools
avec une valeur sous la forme d'une liste de pools de stockage spécifiques que vous souhaitez utiliser. Chaque pool de stockage de la liste doit être spécifié au format suivant :projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME.
- Vous pouvez également spécifier les paramètres de performances
provisioned-throughput-on-create
etprovisioned-iops-on-create.
.
Chaque type de volume Hyperdisk possède des valeurs par défaut, qui déterminent les performances en fonction de la taille du disque initial provisionnée. Lors de la création d'une StorageClass, vous pouvez éventuellement spécifier les paramètres suivants en fonction de votre type de volume Hyperdisk. Si vous omettez ces paramètres, GKE utilise les valeurs par défaut des types de disques basés sur la capacité.
Paramètre | Type de volume Hyperdisk | Utilisation |
---|---|---|
provisioned-throughput-on-create |
Hyperdisk Balanced, Hyperdisk Throughput | Exprimez la valeur du débit en Mio/s à l'aide du qualificatif "Mi". Par exemple, si le débit requis est de 250 Mio/s, spécifiez "250Mi" lors de la création de la StorageClass. |
provisioned-iops-on-create |
Hyperdisk Balanced, Hyperdisk IOPS | La valeur des IOPS doit être exprimée sans qualificatif. Par exemple, si vous avez besoin de 7 000 IOPS, spécifiez "7000" lors de la création de la StorageClass. |
Pour obtenir des conseils sur les valeurs autorisées pour le débit ou les IOPS, consultez la section Planifier le niveau de performances de vos volumes Hyperdisk.
Utilisez le fichier manifeste suivant pour créer et appliquer une StorageClass nommée storage-pools-sc
afin de provisionner de manière dynamique un PV dans le pool de stockage projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
:
kubectl apply -f - <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: storage-pools-sc
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
type: hyperdisk-balanced
provisioned-throughput-on-create: "140Mi"
provisioned-iops-on-create: "3000"
storage-pools: projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
EOF
En utilisant le volumeBindingMode: WaitForFirstConsumer
dans cette ressource StorageClass, la liaison et le provisionnement d'un PVC sont retardés jusqu'à ce qu'un pod utilisant le PVC soit créé.
Cette approche garantit que le PV n'est pas provisionné prématurément et qu'il existe une correspondance de zone entre le PV et le pod qui l'utilise. Si leurs zones ne correspondent pas, le pod reste à l'état Pending
.
Créer un PersistentVolumeClaim (PVC)
Créez un PVC faisant référence à la ressource StorageClass storage-pools-sc
que vous avez créée.
Utilisez le fichier manifeste suivant pour créer un PVC nommé my-pvc
, avec une capacité de stockage cible de 2 048 Gio pour le volume Hyperdisk Balanced :
kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
storageClassName: storage-pools-sc
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2048Gi
EOF
Créer un déploiement qui utilise le PVC
Lorsque vous utilisez des pods avec des objets PersistentVolume, utilisez un contrôleur de charge de travail tel qu'un déploiement ou un StatefulSet.
Pour vous assurer que les pods peuvent être planifiés sur un pool de nœuds avec une série de machines compatible avec Hyperdisk Balanced, configurez un déploiement avec le sélecteur de nœud cloud.google.com/machine-family
. Pour en savoir plus, consultez la section Compatibilité avec les types de machines pour les hyperdisques. Vous utilisez la série de machines c3
dans l'exemple de déploiement suivant.
Créez et appliquez le fichier manifeste suivant pour configurer un pod afin de déployer un serveur Web Postgres à l'aide du PVC créé dans la section précédente:
Autopilot
Sur les clusters Autopilot, spécifiez le nodeSelector cloud.google.com/compute-class: Performance
pour provisionner un volume Hyperdisk Balanced. Pour en savoir plus, consultez la page Demander un nœud dédié pour un pod.
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
nodeSelector:
cloud.google.com/machine-family: c3
cloud.google.com/compute-class: Performance
containers:
- name: postgres
image: postgres:14-alpine
args: [ "sleep", "3600" ]
volumeMounts:
- name: sdk-volume
mountPath: /usr/share/data/
volumes:
- name: sdk-volume
persistentVolumeClaim:
claimName: my-pvc
EOF
Standard
Sur les clusters standards sans provisionnement automatique des nœuds activé, assurez-vous qu'un pool de nœuds avec la série de machines spécifiée est opérationnel avant de créer le déploiement. Sinon, la planification du pod échoue.
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
nodeSelector:
cloud.google.com/machine-family: c3
containers:
- name: postgres
image: postgres:14-alpine
args: [ "sleep", "3600" ]
volumeMounts:
- name: sdk-volume
mountPath: /usr/share/data/
volumes:
- name: sdk-volume
persistentVolumeClaim:
claimName: my-pvc
EOF
Vérifiez que le déploiement a bien été créé :
kubectl get deployment
Le provisionnement des instances Hyperdisk peut prendre quelques minutes et afficher un état READY
.
Vérifier si le disque associé est provisionné
Vérifiez si le PVC nommé
my-pvc
a bien été associé à un PV:kubectl get pvc my-pvc
Le résultat ressemble à ce qui suit :
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE my-pvc Bound pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 2Ti RWO storage-pools-sc 2m24s
Vérifiez si le volume a été provisionné comme spécifié dans votre StorageClass et votre PVC :
gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
Le résultat ressemble à ce qui suit :
NAME STATUS PROVISIONED_IOPS PROVISIONED_THROUGHPUT SIZE_GB pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 READY 3000 140 2048
Créer et restaurer des disques associés dans des pools de stockage
Il n'est pas possible de déplacer des disques dans ou hors d'un pool de stockage. Pour déplacer un disque dans un pool de stockage ou en dehors, recréez-le à partir d'un instantané. Pour en savoir plus, consultez la page Modifier le type de disque.
Dans cette section :
- Vous écrivez un fichier de test sur le disque provisionné dans votre pod.
- Créez un instantané de volume et supprimez le fichier de test de ce disque.
- Restaurez l'instantané sur un nouveau disque du même pool de stockage pour récupérer efficacement les données supprimées.
Créer un fichier de test
Pour créer et valider un fichier de test, procédez comme suit:
Obtenez le nom de pod du déploiement Postgres:
kubectl get pods -l app=postgres
Le résultat ressemble à ce qui suit :
NAME READY STATUS RESTARTS AGE postgres-78fc84c9ff-77vx6 1/1 Running 0 44s
Créez un fichier de test
hello.txt
dans le pod :kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'echo "Hello World!" > /usr/share/data/hello.txt'
Vérifiez que le fichier de test est créé:
kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'cat /usr/share/data/hello.txt' Hello World!
Créer un instantané de volume et supprimer un fichier de test
Pour créer et vérifier un instantané :
Créez un VolumeSnapshotClass qui spécifie comment l'instantané de vos volumes doit être pris et géré :
kubectl apply -f - <<EOF apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: my-snapshotclass driver: pd.csi.storage.gke.io deletionPolicy: Delete EOF
Créez un VolumeSnapshot et prenez l'instantané du volume associé au PersistentVolumeClaim
my-pvc
:kubectl apply -f - <<EOF apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: my-snapshot spec: volumeSnapshotClassName: my-snapshotclass source: persistentVolumeClaimName: my-pvc EOF
Vérifiez que le contenu de l'instantané de volume est créé :
kubectl get volumesnapshotcontents
Le résultat ressemble à ce qui suit :
NAME READYTOUSE RESTORESIZE DELETIONPOLICY DRIVER VOLUMESNAPSHOTCLASS VOLUMESNAPSHOT VOLUMESNAPSHOTNAMESPACE AGE snapcontent-e778fde2-5f1c-4a42-a43d-7f9d41d093da false 2199023255552 Delete pd.csi.storage.gke.io my-snapshotclass my-snapshot default 33s
Vérifiez que l'instantané est prêt à être utilisé:
kubectl get volumesnapshot \ -o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
Le résultat ressemble à ce qui suit :
NAME READY my-snapshot true
Supprimez le fichier de test d'origine
hello.txt
créé dans le podpostgres-78fc84c9ff-77vx6
:kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'rm /usr/share/data/hello.txt'
Restaurer l'instantané de volume
Pour restaurer l'instantané de volume et les données, procédez comme suit:
Créez un PVC qui restaure les données d'un instantané et garantit que le nouveau volume est provisionné dans le même pool de stockage (
storage-pools-sc
) que le volume d'origine. Appliquez le fichier manifeste suivant :kubectl apply -f - <<EOF apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-restore spec: dataSource: name: my-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: storage-pools-sc accessModes: - ReadWriteOnce resources: requests: storage: 2048Gi EOF
Mettez à jour le déploiement existant nommé
postgres
afin qu'il utilise le PVC nouvellement restauré que vous venez de créer. Appliquez le fichier manifeste suivant :kubectl apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: postgres spec: selector: matchLabels: app: postgres template: metadata: labels: app: postgres spec: nodeSelector: cloud.google.com/machine-family: c3 containers: - name: postgres image: google/cloud-sdk:slim args: [ "sleep", "3600" ] volumeMounts: - name: sdk-volume mountPath: /usr/share/data/ volumes: - name: sdk-volume persistentVolumeClaim: claimName: pvc-restore EOF
Obtenez le nom du pod que vous venez de créer et qui fait partie du déploiement
postgres
:kubectl get pods -l app=postgres
Le résultat ressemble à ce qui suit :
NAME READY STATUS RESTARTS AGE postgres-59f89cfd8c-42qtj 1/1 Running 0 40s
Vérifiez que le fichier
hello.txt
, qui avait été supprimé précédemment, existe désormais dans le nouveau pod (postgres-59f89cfd8c-42qtj
) après avoir restauré le volume à partir de l'instantané :kubectl exec postgres-59f89cfd8c-42qtj \ -- sh -c 'cat /usr/share/data/hello.txt' Hello World!
Cela valide que le processus d'instantané et de restauration a bien été effectué et que les données de l'instantané ont été restaurées sur le nouveau PV accessible au pod.
Vérifiez que le volume créé à partir de l'instantané se trouve dans votre pool de stockage:
kubectl get pvc pvc-restore
Le résultat ressemble à ce qui suit :
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-restore Bound pvc-b287c387-bc51-4100-a00e-b5241d411c82 2Ti RWO storage-pools-sc 2m24s
Vérifiez si le nouveau volume est provisionné comme indiqué dans votre StorageClass et votre PVC :
gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
Le résultat ressemble à ce qui suit, où vous pouvez voir le nouveau volume
pvc-b287c387-bc51-4100-a00e-b5241d411c82
provisionné dans le même pool de stockage.NAME STATUS PROVISIONED_IOPS PROVISIONED_THROUGHPUT SIZE_GB pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 READY 3000 140 2048 pvc-b287c387-bc51-4100-a00e-b5241d411c82 READY 3000 140 2048
Cela garantit que le volume restauré bénéficie des ressources et des fonctionnalités partagées du pool.
Migrer des volumes existants vers un pool de stockage
Utilisez un instantané et une restauration pour migrer des volumes situés en dehors d'un pool de stockage vers un pool de stockage.
Assurez-vous que les conditions suivantes sont remplies :
- Votre nouvelle ressource PVC
pvc-restore
fait référence à une ressource StorageClass qui spécifie le paramètrestorage-pools
, pointant vers le pool de stockage dans lequel vous souhaitez déplacer le volume. - Le PV source dont vous créez une image doit être associé à un PVC avec une StorageClass qui ne spécifie pas le paramètre
storage-pools
.
Après avoir effectué la restauration à partir d'un instantané sur un nouveau volume, vous pouvez supprimer le PVC et le PV sources.
Effectuer un nettoyage
Pour éviter que des frais ne soient facturés sur votre compte Google Cloud, supprimez les ressources de stockage que vous avez créées dans ce guide. Commencez par supprimer tous les disques du pool de stockage, puis supprimez le pool de stockage.
Supprimer le disque de démarrage
Lorsque vous supprimez un nœud (en procédant à un scaling à la baisse du pool de nœuds) ou un pool de nœuds entier, les disques de démarrage associés sont automatiquement supprimés. Vous pouvez également supprimer le cluster pour supprimer automatiquement les disques de démarrage de tous les pools de nœuds qu'il contient.
Pour en savoir plus, consultez les pages suivantes :
Supprimer le disque associé
Pour supprimer le disque associé provisionné dans un pool de stockage Hyperdisk :
Supprimez le pod qui utilise le PVC :
kubectl delete deployments postgres
Supprimez le PVC qui utilise la StorageClass du pool de stockage Hyperdisk.
kubectl delete pvc my-pvc
Confirmez que le PVC
pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6
a été supprimé:gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
Supprimer le pool de stockage Hyperdisk
Supprimez le pool de stockage Hyperdisk à l'aide de la commande suivante:
gcloud compute storage-pools delete pool-us-east4-c --zone=us-east4-c --project=my-project
Étape suivante
- Consultez la page Résoudre les problèmes de stockage dans GKE.
- En savoir plus sur le pilote CSI Persistent Disk sur GitHub.