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.
-
Définissez une politique. Créez une ressource
StorageAutoScalerPolicyqui 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. Surveillez en continu. Le composant storage-operator surveille l'utilisation du stockage en temps réel de la PVC cible.
Déclenchez la mise à l'échelle. Lorsque les conditions sont remplies, le composant storage-operator envoie une demande de mise à l'échelle à la PVC.
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.
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.
-
Confirmez que le Pod est en cours d'exécution.
kubectl get pods -l app=nginxSortie attendue :
NAME READY STATUS RESTARTS AGE cnfs-nas-deployment-56dbcc7fb7-wh79z 1/1 Running 0 20m -
Enregistrez la capacité initiale de la PVC avant d'écrire des données.
kubectl get pvc cnfs-nas-pvcSortie attendue (état initial, 20 GiB) :
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE cnfs-nas-pvc Bound ... 20Gi RWX alibabacloud-cnfs-nas 2m -
É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 -
Vérifiez les événements générés par la mise à l'échelle.
kubectl get events | grep cnfs-nas-pvcLes événements
StartExpandetVolumeResizeSuccessfulconfirment 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 succeededConfirmez la capacité mise à jour :
kubectl get pvc cnfs-nas-pvc -
(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 .
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, choisissez Operations > Prometheus Monitoring.
Cliquez sur l'onglet Storage Monitoring, puis cliquez sur CSI NAS.
Définissez Namespace sur default et PVC Name sur cnfs-nas-pvc pour afficher la capacité dans la zone Total Capacity.

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. |