Utilisez des volumes dynamiques pour provisionner le stockage CPFS pour Intelligent Computing LINGJUN (LINGJUN) à la demande, sans gérer manuellement les PV. Plusieurs applications peuvent lire et écrire en parallèle, ce qui convient aux charges de travail d'entraînement IA et d'analyse de big data nécessitant le partage de code, de fichiers de configuration et de résultats de calcul intermédiaires.
Limitations
Le non-respect de ces contraintes entraîne des échecs de montage ou un état irrécupérable du cluster.
Même hpn-zone requise pour le montage VSC : Le nœud du pod doit se trouver dans la même hpn-zone que le système de fichiers CPFS pour LINGJUN.
Initialisation du nœud : Un nœud LINGJUN doit être associé à un système de fichiers CPFS pour LINGJUN lors de l'initialisation. Ignorer cette étape provoque des échecs de montage CSI.
Un seul système de fichiers par pod : Ne montez pas plusieurs volumes provenant du même système de fichiers CPFS pour LINGJUN dans un seul pod (par exemple, plusieurs PV avec le même
bmcpfsId). Le protocole natif ne prend pas en charge le montage multiple du même système de fichiers dans un pod, même vers différents sous-répertoires.Drainer avant de mettre un nœud hors ligne : Drainez tous les pods d'un nœud LINGJUN défaillant avant de le mettre hors ligne. Ignorer cette étape laisse des ressources de pod irrécupérables et des métadonnées de cluster incohérentes.
Prérequis
Assurez-vous de disposer des éléments suivants :
Version du cluster 1.26 ou ultérieure (guide de mise à niveau).
Nœuds exécutant Alibaba Cloud Linux 3.
-
Les modules complémentaires de stockage suivants dans leurs versions minimales. Installez ou mettez à jour sur la page Add-ons.
Composant
Version minimale
Module complémentaire CSI (csi-plugin et csi-provisioner)
v1.33.1
0.1.2
Module complémentaire bmcpfs-csi (bmcpfs-csi-controller sur le plan de contrôle géré par ACK et bmcpfs-csi-node déployé en tant que DaemonSet sur les nœuds du cluster)
1.35.1
Configurer les ressources cnfs-nas-daemon
cnfs-nas-daemon gère les processus Elastic File Client (EFC) et affecte directement les performances de stockage. Configurez ses ressources sur la page Add-ons :
CPU : 0,5 cœur par Gb/s de bande passante, plus 1 cœur pour la gestion des métadonnées. Exemple : NIC 100 Gb/s →
100 × 0.5 + 1 = 51cœurs.Mémoire : 15 % de la mémoire totale du nœud. CPFS pour LINGJUN utilise FUSE, donc la mise en cache des données et les métadonnées de fichiers consomment toutes deux de la mémoire.
Ajustez finement les limites de ressources en fonction de la charge de travail réelle.
cnfs-nas-daemon utilise la stratégie de mise à jour OnDelete. Après avoir modifié les paramètres sur la page Add-ons, supprimez manuellement le pod cnfs-nas-daemon sur chaque nœud pour appliquer les modifications. Effectuez cette opération pendant les heures creuses.
Nœuds sans support de mise à niveau à chaud : Provoque une interruption matérielle. Les pods d'application échouent et doivent être supprimés manuellement, puis redémarrés et récupérés automatiquement.
Nœuds avec support de mise à niveau à chaud : Les pods sont récupérés automatiquement. La mise à niveau à chaud nécessite : kernel 5.10.134-18+, bmcpfs-csi-controller et bmcpfs-csi-plugin 1.35.1+, et cnfs-nas-daemon 0.1.9-compatible.1+.
Étape 1 : Créer un système de fichiers CPFS
Créer un système de fichiers CPFS pour LINGJUN et notez l'ID du système de fichiers.
-
(Facultatif) Pour monter sur des nœuds non-LINGJUN, créez une cible de montage VPC dans le même VPC que les nœuds de votre cluster. Notez le nom de domaine de la cible de montage (format : cpfs--vpc-.<Region>.cpfs.aliyuncs.com).
Si tous les pods s'exécutent sur des nœuds LINGJUN, le montage VSC (Virtual Storage Controller) s'applique par défaut. Ignorez cette étape.
Consultez les limites CPFS pour LINGJUN avant de continuer.
Étape 2 : Créer une StorageClass
La StorageClass définit les paramètres de provisionnement tels que l'ID du système de fichiers et la politique de récupération.
-
Créez
sc.yaml:Paramètre
Requis
Description
bmcpfsIdOui
ID du système de fichiers CPFS pour LINGJUN. Format :
bmcpfs-xxxxxxxxxoucpfs-xxxxxxxxx.pathNon
Sous-répertoire au sein du système de fichiers. Le volume est monté sur
{path}/{volumeName}/. Par défaut sur/{volumeName}/.allowVolumeExpansionNon
Paramètre réservé. La version actuelle ne prend pas en charge l'extension dynamique.
reclaimPolicyNon
Delete(par défaut) : supprime le fileset backend lorsque le PVC est supprimé.Retain: conserve le fileset ; nécessite un nettoyage manuel. UtilisezRetainen production.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-bmcpfs-test parameters: bmcpfsId: bmcpfs-xxxxxx vpcMountTarget: cpfs-xxxxx-vpc-xxxxx.cn-hangzhou.cpfs.aliyuncs.com provisioner: bmcpfsplugin.csi.alibabacloud.com reclaimPolicy: Delete volumeBindingMode: Immediate allowVolumeExpansion: true -
Appliquez la StorageClass :
kubectl apply -f sc.yamlSortie attendue :
storageclass.storage.k8s.io/alicloud-bmcpfs-test created
Étape 3 : Créer un PVC
Un PVC référence la StorageClass pour demander un stockage provisionné dynamiquement.
-
Créez
pvc.yaml:Paramètre
Description
accessModesReadWriteManyuniquement. Permet un accès multi-pods concurrent.storageCapacité de stockage demandée. Prend en charge des unités telles que Gi et Ti.
volumeModeSeul
Filesystemest pris en charge.storageClassNameNom de la StorageClass. Déclenche la création dynamique du volume.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: bmcpfs-vsc namespace: default spec: accessModes: - ReadWriteMany # Supports concurrent reads and writes across multiple pods resources: requests: storage: 10Ti # Supports large-capacity storage (Ti level) volumeMode: Filesystem # Only Filesystem is supported storageClassName: alicloud-bmcpfs-test # Must match the StorageClass created in Step 2 -
Appliquez le PVC :
kubectl apply -f pvc.yaml -
Vérifiez que le PVC est lié :
kubectl get pvc bmcpfs-vsc -n defaultSortie attendue :
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE bmcpfs-vsc Bound pvc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 10Ti RWX alicloud-bmcpfs-test 30sLorsque
STATUSestBound, le PV est créé automatiquement. Confirmez le provisionnement :kubectl describe pvc bmcpfs-vsc -n defaultVérifiez
Eventspour un messageProvisioning succeeded.
Étape 4 : Déployer une charge de travail et monter le PVC
Le Deployment suivant exécute trois réplicas partageant un seul volume CPFS pour LINGJUN.
-
Créez
deploy.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: cpfs-shared-example spec: replicas: 3 # Three replicas verify that shared storage works across multiple pods selector: matchLabels: app: cpfs-shared-app template: metadata: labels: app: cpfs-shared-app spec: tolerations: - key: node-role.alibabacloud.com/lingjun operator: Exists effect: NoSchedule # Optional: to pin all pods to a specific node, uncomment and set the node name # nodeName: cn-hangzhou.10.XX.XX.226 containers: - name: app-container image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 volumeMounts: - name: pvc-cpfs mountPath: /data # Shared volume mounted at /data inside the container lifecycle: postStart: exec: command: - /bin/sh - -c - > echo "Data written by $(hostname)" > /data/$(hostname).txt && echo "Deployment is running, check shared data in /data." && sleep 3600 volumes: - name: pvc-cpfs persistentVolumeClaim: claimName: bmcpfs-vsc # References the PVC created in Step 3 -
Appliquez le Deployment :
kubectl apply -f deploy.yamlSortie attendue :
deployment.apps/cpfs-shared-example created
Nettoyer les ressources
Supprimez les ressources dans cet ordre pour éviter des coûts imprévus et préserver la sécurité des données.
-
Supprimer les charges de travail — Arrêtez toutes les applications utilisant les PVC. Cela démonte les volumes.
kubectl delete deployment <your-deployment-name> -
Supprimer les PVC — Le résultat dépend de la
reclaimPolicyde la StorageClass :Retain(recommandé) : Le fileset CPFS pour LINGJUN et les données restent intacts. Passez à l'étape 3 pour supprimer le PV.Delete: Supprime définitivement le PV lié et le fileset backend. Irréversible.
kubectl delete pvc <your-pvc-name> -
Supprimer les PV (uniquement lorsque
reclaimPolicyestRetain) — Après la suppression du PVC, le PV passe au statutReleased. Supprimez-le pour retirer la ressource Kubernetes. Les données backend ne sont pas affectées.kubectl delete pv <your-pv-name> -
(Facultatif) Supprimer la StorageClass — Supprimez si elle n'est plus nécessaire. Les volumes existants ne sont pas affectés.
kubectl delete sc <your-sc-name> Supprimer le système de fichiers CPFS pour LINGJUN — Supprime définitivement toutes les données, y compris les données conservées par la politique
Retain. Confirmez qu'il n'y a plus de dépendances, puis supprimez le système de fichiers.
Dépannage
Le PVC reste en statut Pending
Un PVC bloqué en statut Pending signifie que le provisionnement a échoué. Les événements du PVC identifient généralement la cause.
kubectl describe pvc <your-pvc-name> -n <your-namespace>
Vérifiez Events pour les avertissements. Causes courantes :
StorageClass not found:storageClassNameest incorrect ou la StorageClass n'existe pas.provisioning failedoufailed to create fileset: Problème de stockage backend. Continuez ci-dessous.
Si les événements indiquent un problème de configuration, inspectez la StorageClass et vérifiez l'enregistrement du pilote CSI :
# Check the StorageClass configuration
kubectl get storageclass <your-sc-name> -o yaml
# Verify the CSI driver is registered
kubectl get csidriver bmcpfsplugin.csi.alibabacloud.com
Confirmez que :
provisionercorrespond àbmcpfsplugin.csi.alibabacloud.com.bmcpfsIdest correct et le système de fichiers existe.Si
get csidriverne renvoie aucune sortie, le pilote n'est pas installé. Installez bmcpfs-csi-controller, bmcpfs-csi-node et cnfs-nas-daemon depuis la page Add-ons.
Le pod reste en ContainerCreating ou MountVolume.Setup failed
Le pod a atteint le nœud, mais le montage du volume a échoué. Suivez ces étapes pour identifier la cause.
-
Vérifiez les événements du pod :
kubectl describe pod <pod-name> -n <your-namespace>Vérifiez
Eventspour les messagesWarningtels queFailedMountouMountVolume.Setup failed. -
Confirmez que le PVC est lié.
kubectl get pvc <your-pvc-name>STATUSdoit êtreBound. SiPending, consultez Le PVC reste en statut Pending. -
Si lié, vérifiez les logs du plugin CSI côté nœud :
kubectl get pods -n kube-system -l app.kubernetes.io/name=bmcpfs-csi-driver \ --field-selector spec.nodeName=<nodeName> \ -o name | xargs kubectl logs -n kube-system -c csi-pluginCes logs affichent la connectivité réseau, les autorisations de la cible de montage et les erreurs d'E/S.