Le plug-in Container Storage Interface (CSI) prend en charge les quotas de répertoire sur les sous-répertoires des volumes NAS General-purpose. Lorsque vous montez des sous-répertoires NAS via la méthode subPath, les quotas de répertoire limitent indépendamment la capacité de chaque sous-répertoire, empêchant ainsi une application de consommer le stockage alloué à une autre. Lorsqu'un sous-répertoire atteint sa limite de quota, étendez-le en ligne en mettant à jour le PVC, sans redémarrage ni interruption de service.
Si vous utilisez CNFS pour gérer le NAS, la fonctionnalité de quota de répertoire est activée par défaut. Pour plus d'informations, consultez Utiliser CNFS pour étendre automatiquement les volumes NAS .
Limites
Les quotas de répertoire sont pris en charge uniquement pour les volumes NAS provisionnés dynamiquement qui remplissent toutes les conditions suivantes :
Protocole : NFS
Type de NAS : General-purpose NAS
Méthode de montage : subPath
Les volumes NAS provisionnés statiquement et les volumes NAS provisionnés dynamiquement montés via les méthodes sharepath ou filesystem ne prennent pas en charge les quotas de répertoire.
Pour la liste complète des limites relatives aux quotas de répertoire, consultez Quotas de répertoire .
Cas d'utilisation
Par défaut, lorsque vous montez un volume NAS dans un cluster ACK, la valeur de stockage déclarée dans la revendication de volume persistant (PVC) n'a aucun effet : le pod peut accéder à la capacité totale du système de fichiers NAS. Si le système de fichiers NAS est partagé entre plusieurs applications, utilisez les quotas de répertoire pour :
Définir une limite de capacité par sous-répertoire d'application
Étendre le quota d'un sous-répertoire en ligne sans interrompre les services en cours d'exécution
Améliorer l'utilisation des ressources et maîtriser les coûts de stockage
Les différents types de NAS ont des limites de capacité distinctes. Pour plus d'informations, consultez General-purpose NAS et Extreme NAS .
Prérequis
Avant de commencer, assurez-vous que :
Le plug-in CSI est installé dans votre cluster en version v1.18.8.45 ou ultérieure. Pour mettre à niveau, consultez Mettre à jour csi-plugin et csi-provisioner
Un système de fichiers General-purpose NAS dispose d'une cible de montage NFS. Dans le cas contraire, créez un système de fichiers General-purpose NAS
Une cible de montage se trouve dans le même VPC que les nœuds de votre cluster, avec le Status défini sur Active. Dans le cas contraire, créez une nouvelle cible de montage. Pour plus d'informations, consultez Gérer les cibles de montage
Utiliser des volumes NAS provisionnés dynamiquement avec des quotas de répertoire
Étape 1 : Créer une StorageClass avec les quotas de répertoire activés
-
Enregistrez le code YAML suivant sous le nom
alicloud-nas-quota-sc.yaml. Remplacez la valeurserverpar l'adresse de la cible de montage de votre système de fichiers NAS.Pour activer la fonctionnalité de quota de répertoire, définissez
allowVolumeExpansionouvolumeCapacitysurtrue. SiallowVolumeExpansionest défini surtrue, le paramètrevolumeCapacityn'a aucun effet, mais la fonctionnalité de quota de répertoire reste activée.Paramètre Description volumeAsDoit être subpath. Monte un sous-répertoire NAS en tant que PV.serverAdresse de la cible de montage du système de fichiers NAS. Consultez Gérer les cibles de montage. pathSous-répertoire NAS à monter. La valeur par défaut est /. Pour Extreme NAS, doit commencer par/share.volumeCapacityDéfinissez sur "true"pour activer les quotas de répertoire. SiallowVolumeExpansiona la valeurtrue, ce paramètre n'a aucun effet, mais le quota reste activé.allowVolumeExpansionDéfinissez sur truepour activer les quotas de répertoire et autoriser l'extension en ligne du PVC. Disponible uniquement pour General-purpose NAS.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas-quota-sc mountOptions: - nolock,tcp,noresvport - vers=3 parameters: volumeAs: subpath # Mount a subdirectory as a persistent volume (PV). Required for directory quotas. server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com" # Mount target address archiveOnDelete: "false" path: "/test" # Root subdirectory. Default: /. For Extreme NAS, must start with /share. volumeCapacity: "true" # Enables the directory quota feature. provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Delete allowVolumeExpansion: true # Allows online PVC expansion. When set to true, volumeCapacity has no effect but directory quotas remain enabled.Paramètres clés : pour tous les paramètres, consultez Utiliser des volumes NAS provisionnés dynamiquement.
-
Créez la StorageClass.
kubectl apply -f alicloud-nas-quota-sc.yaml
Étape 2 : Déployer une application avec un volume NAS
-
Enregistrez le code YAML suivant sous le nom
nas-sts.yaml. Le StatefulSet ci-dessous crée un pod avec un volume NAS provisionné dynamiquement de 20 Go, soutenu par la StorageClass avec les quotas de répertoire activés.apiVersion: apps/v1 kind: StatefulSet metadata: name: nas-sts spec: selector: matchLabels: app: nginx replicas: 1 template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 volumeMounts: - name: nas-pvc mountPath: /data volumeClaimTemplates: - metadata: name: nas-pvc spec: accessModes: [ "ReadWriteMany" ] storageClassName: "alicloud-nas-quota-sc" resources: requests: storage: 20Gi -
Créez le StatefulSet.
kubectl apply -f nas-sts.yaml -
Vérifiez que le pod est en cours d'exécution.
kubectl get pod -l app=nginxSortie attendue :
NAME READY STATUS RESTARTS AGE nas-sts-0 1/1 Running 0 24s -
Vérifiez que le PV a été créé et que le quota de répertoire est actif.
-
Vérifiez le PV.
kubectl get pvSortie attendue (le PV a une capacité de 20 Go) :
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE nas-****-c72c-497f-ab13-****** 20Gi RWX Delete Bound default/nas-pvc-nas-sts-0 alicloud-nas-quota-sc <unset> 15m Confirmez le quota de répertoire dans la console NAS. Dans la console NAS, accédez à la page File System List. Dans la colonne Actions du système de fichiers cible, cliquez sur  > Quota Management. Cliquez sur Manage Quotas pour afficher les détails. Le quota de répertoire est défini sur 20 Go.

-
Vérifier la limite du quota de répertoire
Étant donné que le volume possède un quota de 20 Go, toute écriture dépassant 20 Go dans le répertoire monté déclenche une erreur Disk quota exceeded.
-
Écrivez 20 000 MiB (environ 19,53 Go) dans le répertoire monté
/data.kubectl exec -it nas-sts-0 -- dd if=/dev/zero of=/data/20G.txt bs=1M count=20000 -
Attendez 5 à 15 minutes, puis vérifiez le quota de répertoire dans la console NAS. Dans la console NAS, accédez à File System List. Dans la colonne Actions du système de fichiers cible, cliquez sur  > Quota Management. Cliquez sur Manage Quotas pour afficher l'utilisation actuelle. Le répertoire indique désormais environ 19 Go utilisés.

-
Tentez d'écrire 1 Go supplémentaire pour dépasser le quota.
kubectl exec -it nas-sts-0 -- dd if=/dev/zero of=/data/1G.txt bs=1M count=1024L'erreur suivante confirme que le quota est appliqué :
dd: closing output file '/data/1G.txt': Disk quota exceeded
Étendre un volume NAS provisionné dynamiquement avec des quotas de répertoire
Étendez le volume en appliquant un correctif à la valeur de stockage du PVC. Cette opération n'interrompt pas les services en cours d'exécution.
Le quota d'un répertoire NAS est mesuré en Go. Après avoir modifié le PVC, le plug-in CSI ajuste le quota du répertoire NAS monté à la nouvelle capacité de volume spécifiée par le PVC. Lors de cet ajustement, le plug-in CSI arrondit la valeur de capacité à l'entier supérieur le plus proche.
-
Vérifiez la taille actuelle du PVC.
kubectl get pvcSortie attendue :
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE nas-pvc-nas-sts-0 Bound nas-****-c72c-497f-ab13-****** 20Gi RWX alicloud-nas-quota-sc <unset> 23m -
Étendez le PVC de 20 Go à 30 Go.
kubectl patch pvc nas-pvc-nas-sts-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}' -
Vérifiez l'extension en contrôlant le PV et le PVC.
-
Vérifiez le PV.
kubectl get pvSortie attendue (la capacité est désormais de 30 Go) :
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE nas-****-c72c-497f-ab13-****** 30Gi RWX Delete Bound default/nas-pvc-nas-sts-0 alicloud-nas-quota-sc <unset> 25m -
Vérifiez le PVC.
kubectl get pvcSortie attendue :
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE nas-pvc-nas-sts-0 Bound nas-****-c72c-497f-ab13-****** 30Gi RWX alicloud-nas-quota-sc <unset> 26m
-
-
Confirmez le quota mis à jour dans la console NAS. Dans la console NAS, accédez à File System List. Dans la colonne Actions du système de fichiers cible, cliquez sur  > Quota Management. Cliquez sur Manage Quotas pour confirmer que le quota de répertoire est désormais de 30 Go.

FAQ
Si vous rencontrez des problèmes lors du montage ou de l'utilisation de volumes NAS, consultez :
Étapes suivantes
Pour plus de détails sur les quotas de répertoire NAS, consultez Quotas de répertoire.
Pour surveiller l'utilisation de la capacité des volumes NAS, utilisez la métrique
node_volume_capacity_bytes_usedet créez une règle d'alerte pour une instance Prometheus.