Lorsque la charge de travail augmente, l'espace des volumes de disque montés sur les pods peut venir à manquer. Container Service for Kubernetes (ACK) prend en charge l'extension en ligne des volumes de disque via FlexVolume pour Kubernetes 1.16 et versions ultérieures ; dans la plupart des cas, aucun redémarrage du pod n'est nécessaire. Cette rubrique présente deux scénarios d'extension : l'extension tandis que le pod reste en état Running, et l'extension après redémarrage du pod.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un fichier kubeconfig pour votre cluster et kubectl configuré pour s'y connecter. Consultez Se connecter à un cluster ACK à l'aide de kubectl.
Un volume persistant (PV) provisionné dynamiquement, monté via une revendication de volume persistant (PVC) qui inclut le paramètre
storageClassName.Le plug-in FlexVolume en version v1.14.8.109-5f88ade-aliyun ou ultérieure. Vérifiez la page des composants du cluster dans la console ACK pour mettre à niveau.
Limitations
Avant d'étendre un volume de disque, examinez les contraintes suivantes :
| Contrainte | Détails |
|---|---|
| PV provisionnés dynamiquement uniquement | Seuls les PV provisionnés dynamiquement avec une StorageClass peuvent être étendus en ligne. Les volumes inline et les volumes adossés à des disques basiques ne peuvent pas être étendus sans interruption de service. |
| Taille maximale du disque | Les disques de 2 000 GiB ou moins peuvent être étendus sans interruption de service. |
| Le pod doit être en état Running | Le pod doit rester en état Running pendant l'extension. S'il n'est pas en état Running, utilisez la méthode basée sur le redémarrage à la place. |
Exigence relative à la StorageClass
La StorageClass doit avoir allowVolumeExpansion: true. Les StorageClasses créées par ACK définissent cette option automatiquement. Pour les StorageClasses créées manuellement, définissez-la explicitement :
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-disk-available
provisioner: alicloud/disk
allowVolumeExpansion: true
Sauvegarder vos données
Avant l'extension, créez un snapshot de disque pour vous protéger contre toute perte de données due à des erreurs lors du processus d'extension.
Accorder l'autorisation ResizeDisk au rôle RAM
Avant d'étendre un volume de disque, accordez l'autorisation ResizeDisk au rôle RAM Master du cluster. Sans cette autorisation, la demande d'extension renvoie une erreur d'autorisation.
Connectez-vous à la console ACK.
Dans le volet de navigation de gauche, cliquez sur Clusters.
Recherchez le cluster et cliquez sur Details dans la colonne Actions.
Dans le volet de navigation de gauche, cliquez sur Cluster Information.
Cliquez sur l'onglet Cluster Resources, puis cliquez sur le lien hypertexte situé à côté de Master RAM Role.
-
Dans la console RAM, accordez l'autorisation ResizeDisk au rôle. Pour plus de détails, consultez Modifier le document et la description d'une stratégie personnalisée.

Pour les clusters ACK dédiés utilisant FlexVolume ou les clusters ACK gérés, suivez les étapes 1 à 4 ci-dessus et cliquez sur le lien hypertexte situé à côté de Master RAM Role .
Étendre un volume de disque sans redémarrer le pod
Utilisez cette méthode lorsque le pod est en état Running. Le disque est redimensionné en ligne sans interruption de service.
Vérifier l'état actuel
-
Vérifiez que le pod est en état Running :
kubectl get podSortie attendue :
web-0 1/1 Running 0 42s -
Vérifiez l'utilisation actuelle du disque à l'intérieur du pod :
kubectl exec web-0 -- df /dataSortie attendue :
Filesystem 1K-blocks Used Available Use% Mounted on /dev/vdb 20511312 45080 20449848 1% /dataNotez la taille actuelle : 20 GiB.
-
Confirmez que le PVC est lié (Bound) et vérifiez sa capacité actuelle :
kubectl get pvcSortie attendue :
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE disk-ssd-web-0 Bound d-wz9hpoifm43yn9zie6gl 20Gi RWO alicloud-disk-available 57s
Étendre le volume
-
Appliquez un patch au PVC pour demander la nouvelle taille de stockage :
kubectl patch pvc disk-ssd-web-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'Attendez environ une minute pour que l'extension se termine.
Vérifier l'extension
-
Confirmez que le PV est mis à jour à 30 GiB :
kubectl get pv d-wz9hpoifm43yn9zie6glSortie attendue :
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE d-wz9hpoifm43yn9zie6gl 30Gi RWO Delete Bound default/disk-ssd-web-0 alicloud-disk-available 5m23s -
Confirmez que le PVC reflète la nouvelle capacité :
kubectl get pvcSortie attendue :
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE disk-ssd-web-0 Bound d-wz9hpoifm43yn9zie6gl 30Gi RWO alicloud-disk-available 5m10s -
Vérifiez que la nouvelle taille du disque est visible à l'intérieur du pod :
kubectl exec web-0 -- df /dataSortie attendue :
Filesystem 1K-blocks Used Available Use% Mounted on /dev/vdb 30832548 45036 30771128 1% /dataLe volume de disque a été étendu de 20 GiB à 30 GiB sans temps d'arrêt.
Redémarrer le pod pour étendre le volume de disque
Utilisez cette méthode lorsque le système de fichiers ne reflète pas la nouvelle taille tant que le pod n'a pas été redémarré, ou lorsque le pod n'est pas en état Running.
Vérifier l'état actuel
-
Vérifiez l'état du pod et notez la taille actuelle du disque :
kubectl get podSortie attendue :
web-0 1/1 Running 0 42s -
Vérifiez l'utilisation actuelle du disque à l'intérieur du pod :
kubectl exec web-0 -- df /dataSortie attendue :
Filesystem 1K-blocks Used Available Use% Mounted on /dev/vdb 20511312 45080 20449848 1% /data -
Confirmez que le PVC et le PV sont liés :
kubectl get pvc kubectl get pv
Empêcher la replanification du pod
-
Recherchez le libellé de zone du PV :
kubectl get pv d-wz9g2j5qbo37r2lamkg4 -oyaml | grep failure-domain.beta.kubernetes.io/zoneSortie attendue :
failure-domain.beta.kubernetes.io/zone: cn-shenzhen-e -
Modifiez le libellé de zone avec une valeur invalide afin que le pod ne puisse pas être planifié :
kubectl label pv d-wz9g2j5qbo37r2lamkg4 failure-domain.beta.kubernetes.io/zone=cn-shenzhen-e-nozone --overwriteSortie attendue :
persistentvolume/d-wz9g2j5qbo37r2lamkg4 labeled -
Supprimez le pod pour déclencher un redémarrage. Le pod passe à l'état Pending car le libellé de zone ne correspond plus à aucun nœud :
kubectl delete pod web-0Vérifiez que le pod est en état Pending :
kubectl get podSortie attendue :
web-0 0/1 Pending 0 27s
Étendre le volume
-
Appliquez un patch au PVC pour demander la nouvelle taille de stockage :
kubectl patch pvc disk-ssd-web-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
Restaurer le pod
-
Restaurez le libellé de zone d'origine afin que le pod puisse être à nouveau planifié :
kubectl label pv d-wz9g2j5qbo37r2lamkg4 failure-domain.beta.kubernetes.io/zone=cn-shenzhen-e --overwriteSortie attendue :
persistentvolume/d-wz9g2j5qbo37r2lamkg4 labeledAttendez environ une minute pour que le pod redémarre et que l'extension se termine.
Vérifier l'extension
-
Confirmez que le pod est en état Running :
kubectl get podSortie attendue :
web-0 1/1 Running 0 3m23s -
Confirmez que le PVC reflète la nouvelle capacité :
kubectl get pvcSortie attendue :
disk-ssd-web-0 Bound d-wz9g2j5qbo37r2lamkg4 30Gi RWO alicloud-disk-available 17m -
Confirmez que le PV reflète la nouvelle capacité :
kubectl get pv d-wz9g2j5qbo37r2lamkg4Sortie attendue :
d-wz9g2j5qbo37r2lamkg4 30Gi RWO Delete Bound default/disk-ssd-web-0 alicloud-disk-available 17m -
Vérifiez que la nouvelle taille du disque est visible à l'intérieur du pod :
kubectl exec web-0 -- df /dataSortie attendue :
/dev/vdb 30832548 45036 30771128 1% /dataLe volume de disque a été étendu de 20 GiB à 30 GiB.