Tous les produits
Search
Centre de documentation

:Automatically scale out NAS volumes using CNFS

Dernière mise à jour :Aug 11, 2026

La mise à l'échelle automatique du Container Network File System (CNFS) vous permet de définir une politique unique : le composant storage-operator surveille l'utilisation de votre volume NAS et augmente automatiquement la capacité lorsque celle-ci dépasse un seuil défini. Aucune modification de code, aucune intervention manuelle et aucune surveillance directe des niveaux de stockage ne sont requises.

Fonctionnement

Le workflow de mise à l'échelle automatique est entièrement géré par le composant storage-operator.

image

  1. Définissez une politique. Créez une ressource StorageAutoScalerPolicy qui spécifie la PersistentVolumeClaim (PVC) cible, les conditions de déclenchement et les actions de mise à l'échelle.

    La StorageClass utilisée par la PVC doit avoir allowVolumeExpansion: true .
  2. Surveillez en continu. Le composant storage-operator surveille l'utilisation du stockage en temps réel de la PVC cible.

  3. Déclenchez la mise à l'échelle. Lorsque les conditions sont remplies, le composant storage-operator envoie une demande de mise à l'échelle à la PVC.

  4. Exécutez la mise à l'échelle. Le pilote Container Storage Interface (CSI) traite la demande et Alibaba Cloud NAS effectue l'extension réelle du système de fichiers.

  5. Synchronisez le statut. Le statut de la PVC se met à jour automatiquement pour refléter la nouvelle capacité.

Prérequis

Avant de commencer, assurez-vous que :

  • Les composants csi-plugin et csi-provisioner sont en version v1.20.5-ff6490f-aliyun ou ultérieure. Pour mettre à niveau, consultez la rubrique Mettre à niveau les composants CSI.

  • Le composant storage-operator est en version v1.18.8.56-2aa33ba-aliyun ou ultérieure. Pour mettre à niveau, consultez la rubrique Gérer le composant storage-operator.

  • Le composant cnfs-controller est installé. Il s'agit d'un composant géré installé par défaut ; vérifiez qu'il n'a pas été désinstallé.

  • Un CNFS dont le statut est Available. Pour en créer un, consultez la rubrique Gérer les systèmes de fichiers NAS avec CNFS.

Pour les versions de storage-operator antérieures à v1.33.1, exécutez la commande suivante afin d'activer la fonctionnalité de mise à l'échelle automatique dans la ConfigMap avant de poursuivre :

kubectl patch configmap/storage-operator \
  -n kube-system \
  --type merge \
  -p '{"data":{"storage-auto-expander":"{\"imageRep\":\"acs/storage-auto-expander\",\"imageTag\":\"\",\"install\":\"true\",\"template\":\"/acs/templates/storage-auto-expander/install.yaml\",\"type\":\"deployment\"}"}}'

Pour vérifier le statut du CNFS :

# List all CNFS objects
kubectl get cnfs

# Check the status of a specific CNFS
kubectl get cnfs <CNFS_NAME> -o yaml | grep Available

Sortie attendue :

NAME                                      AGE
default-cnfs-nas-837d6ea-20210819155623   14d
status: Available

Étape 1 : Définir la politique de mise à l'échelle

Créez une ressource StorageAutoScalerPolicy pour spécifier quand et comment le composant storage-operator étend votre volume NAS.

L'exemple suivant déclenche une mise à l'échelle lorsque l'utilisation de la capacité d'une PVC portant le libellé app: nginx (dans le namespace default ou nginx) dépasse 80 %. Chaque extension double la capacité actuelle, jusqu'à un maximum de 200 GiB.

cat << EOF | kubectl apply -f -
apiVersion: storage.alibabacloud.com/v1alpha1
kind: StorageAutoScalerPolicy
metadata:
  name: hybrid-expand-policy
spec:
  # Match PVCs by label selector.
  pvcSelector:
    matchLabels:
      app: nginx  # Must match the labels on your PVC and Deployment.
  # Namespaces where this policy applies.
  namespaces:
    - default
    - nginx
  # Conditions that trigger a scale-out.
  conditions:
    - name: condition1
      key: volume-capacity-used-percentage  # Metric: capacity usage percentage.
      operator: Gt                          # Greater than.
      values:
        - "80"                              # Threshold: 80%.
  # Actions to perform when conditions are met.
  actions:
    - name: action1
      type: volume-expand
      params:
        scale: 100%    # Increase capacity by 100% of the current size.
        limits: 200Gi  # Cap total capacity at 200 GiB.
EOF

Paramètres de la politique :

Paramètre Description
pvcSelector Sélecteur de libellés qui correspond aux PVC auxquelles cette politique s'applique.
namespaces Namespaces dans lesquels la politique est active. Plusieurs namespaces utilisent une logique OU. La valeur par défaut est default si aucun paramètre n'est défini.
conditions Une ou plusieurs conditions de déclenchement. Plusieurs conditions utilisent une logique ET : toutes doivent être remplies avant que la politique ne s'exécute.
actions Actions à exécuter lorsque les conditions sont remplies. Le système exécute la première action correspondante.

**Paramètres de conditions :**

Paramètre Valeurs Description
key volume-capacity-used-percentage Déclenche l'action lorsque la capacité utilisée dépasse le seuil.
volume-capacity-free-size Déclenche l'action lorsque l'espace libre descend en dessous du seuil.
volume-capacity-pvc-size Déclenche l'action lorsque la capacité initialement demandée (pvc.spec.resources.requests.storage) descend en dessous du seuil.
operator Gt, Lt, Eq, Ne Opérateur de comparaison. Non sensible à la casse.
values Chaîne numérique Valeur de seuil pour la condition.

**Paramètres de actions :**

Paramètre Description
type Type d'action. Seule la valeur volume-expand est actuellement prise en charge.
scale Taille de l'étape d'extension. Utilisez un pourcentage (par exemple, 50%) ou une valeur statique (par exemple, 100Gi).
limits Capacité totale maximale après extension. Définissez ce paramètre pour contrôler les coûts et éviter une croissance incontrôlée.

Étape 2 : Créer une StorageClass

Créez une StorageClass qui fait référence à votre système de fichiers NAS CNFS existant. Définissez allowVolumeExpansion: true : cela établit la ligne de base de capacité utilisée par la politique de mise à l'échelle automatique pour calculer l'utilisation.

cat << EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alibabacloud-cnfs-nas  # Referenced in the PVC in the next step.
mountOptions:
- nolock,tcp,noresvport
- vers=3
parameters:
  volumeAs: subpath
  # Format: <nas-server-address>:/<path>
  server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s"
  archiveOnDelete: "true"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
allowVolumeExpansion: true  # Required for auto-scaling.
EOF

Pour obtenir la liste complète des paramètres de StorageClass, consultez la rubrique Gérer les systèmes de fichiers NAS avec CNFS.

Étape 3 : Déployer l'application et la PVC

Créez une PVC et un Deployment avec des libellés correspondant à pvcSelector.matchLabels dans votre politique (app: nginx). Le composant storage-operator utilise ces libellés pour associer la politique à la PVC correcte.

cat << EOF | kubectl apply -f -
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: cnfs-nas-pvc
  labels:
    app: nginx  # Must match pvcSelector.matchLabels in the policy.
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: alibabacloud-cnfs-nas  # References the StorageClass created earlier.
  resources:
    requests:
      storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cnfs-nas-deployment
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx  # Must match pvcSelector.matchLabels in the policy.
  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:
        - mountPath: "/data"
          name: cnfs-nas-pvc
      volumes:
      - name: cnfs-nas-pvc
        persistentVolumeClaim:
          claimName: cnfs-nas-pvc
EOF

Étape 4 : Vérifier la mise à l'échelle automatique

Déclenchez une mise à l'échelle en écrivant des données de test, puis confirmez l'extension via les événements et le tableau de bord de surveillance.

  1. Confirmez que le Pod est en cours d'exécution.

    kubectl get pods -l app=nginx

    Sortie attendue :

    NAME                                       READY   STATUS    RESTARTS   AGE
    cnfs-nas-deployment-56dbcc7fb7-wh79z       1/1     Running   0          20m
  2. Enregistrez la capacité initiale de la PVC avant d'écrire des données.

    kubectl get pvc cnfs-nas-pvc

    Sortie attendue (état initial, 20 GiB) :

    NAME           STATUS   VOLUME       CAPACITY   ACCESS MODES   STORAGECLASS             AGE
    cnfs-nas-pvc   Bound    ...          20Gi       RWX            alibabacloud-cnfs-nas    2m
  3. Écrivez 20 GiB de données de test pour pousser l'utilisation au-delà du seuil de 80 %.

    L'opération d'écriture peut prendre plusieurs minutes selon le débit réseau et les performances du stockage.
    kubectl exec -it <POD_NAME> -- dd if=/dev/zero of=/data/testfile bs=1G count=20
  4. Vérifiez les événements générés par la mise à l'échelle.

    kubectl get events | grep cnfs-nas-pvc

    Les événements StartExpand et VolumeResizeSuccessful confirment que l'extension est terminée. Dans cet exemple, la PVC est passée de 20 GiB à 40 GiB (augmentation de 100 %).

    12s   Warning  StartExpand            persistentvolumeclaim/cnfs-nas-pvc   Start to expand of pvc cnfs-nas-pvc from 20Gi to 40Gi, usedCapacityPercentage:99%, freeSize:204MB.
    12s   Normal   ExternalExpanding      persistentvolumeclaim/cnfs-nas-pvc   waiting for an external controller to expand this PVC
    12s   Normal   Resizing               persistentvolumeclaim/cnfs-nas-pvc   External resizer is resizing volume nas-462db2b2-717d-44fe-b0b6-fb4db03a****
    12s   Normal   VolumeResizeSuccessful persistentvolumeclaim/cnfs-nas-pvc   Resize volume succeeded

    Confirmez la capacité mise à jour :

    kubectl get pvc cnfs-nas-pvc
  5. (Facultatif) Consultez la tendance d'utilisation sur le tableau de bord de surveillance CSI NAS. Dans cet exemple, la mise à l'échelle a été déclenchée à 10:23:30 et la capacité après extension est de 100 GiB.

    Requiert Alibaba Cloud Prometheus Monitoring .
    1. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, choisissez Operations > Prometheus Monitoring.

    2. Cliquez sur l'onglet Storage Monitoring, puis cliquez sur CSI NAS.

    3. Définissez Namespace sur default et PVC Name sur cnfs-nas-pvc pour afficher la capacité dans la zone Total Capacity.

    NAS存储卷容量

Bonnes pratiques

Appliquez ces recommandations lors de l'utilisation de la mise à l'échelle automatique des volumes NAS en production.

Dimension Conseils
Contrôle des coûts Définissez limits dans votre politique de mise à l'échelle pour plafonner la capacité totale. Pour les volumes très volumineux, utilisez une valeur scale statique (par exemple, 200Gi) plutôt qu'un pourcentage pour un contrôle des coûts plus prévisible.
Ajustement des seuils Définissez le seuil de déclenchement entre 75 % et 80 %. Un seuil égal ou supérieur à 95 % ne laisse pas suffisamment de temps pour terminer l'extension avant que le volume ne soit saturé.
Surveillance Activez la surveillance du stockage des conteneurs et configurez Alibaba Cloud Prometheus Monitoring pour recevoir des alertes sur les métriques de stockage.
Politiques granulaires Créez des objets StorageAutoScalerPolicy distincts par application ou environnement pour gérer la capacité de manière indépendante.
Performances La mise à l'échelle automatique répond aux contraintes de capacité, pas aux goulots d'étranglement de performance. Si votre application est lente en raison de limites d'IOPS ou d'opérations sur de nombreux petits fichiers, choisissez un niveau NAS plus performant.