Provisionnez à la demande le stockage CPFS for Intelligent Computing LINGJUN (LINGJUN) via des volumes dynamiques, 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'analytique Big Data nécessitant le partage de code, de fichiers de configuration et de résultats de calcul intermédiaires.
Limites
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 for LINGJUN.
Initialisation du nœud : Associez un nœud LINGJUN à un système de fichiers CPFS for 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 for 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 des sous-répertoires différents.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 :
Une version de cluster 1.26 ou ultérieure (guide de mise à niveau).
Des nœuds exécutant Alibaba Cloud Linux 3.
-
Les modules complémentaires de stockage suivants, dans leurs versions minimales. Installez-les ou mettez-les à 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 du 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 for LINGJUN utilise FUSE, donc la mise en cache des données et les métadonnées de fichier 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 prise en charge de la 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 prise en charge de la 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 for 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 de CPFS for 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éclamation.
-
Créez
sc.yaml:Paramètre
Obligatoire
Description
bmcpfsIdOui
ID du système de fichiers CPFS for 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 :/{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.yamlRésultat attendu :
storageclass.storage.k8s.io/alicloud-bmcpfs-test created
Étape 3 : Créer un PVC
Un PVC fait référence à la StorageClass pour demander un stockage provisionné dynamiquement.
-
Créez
pvc.yaml:Paramètre
Description
accessModesReadWriteManyuniquement. Permet un accès simultané par plusieurs pods.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 defaultRésultat attendu :
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 automatiquement créé. Confirmez le provisionnement :kubectl describe pvc bmcpfs-vsc -n defaultVérifiez dans
Eventsla présence d'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 for 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.yamlRésultat attendu :
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.
-
Supprimez les charges de travail — Arrêtez toutes les applications utilisant les PVC. Cela démonte les volumes.
kubectl delete deployment <your-deployment-name> -
Supprimez les PVC — Le résultat dépend de la
reclaimPolicyde la StorageClass :Retain(recommandé) : Le fileset CPFS for 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> -
Supprimez 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) Supprimez la StorageClass — Supprimez-la si elle n'est plus nécessaire. Les volumes existants ne sont pas affectés.
kubectl delete sc <your-sc-name> Supprimez le système de fichiers CPFS for LINGJUN — Supprime définitivement toutes les données, y compris celles conservées par la politique
Retain. Vérifiez qu'il ne reste aucune dépendance, puis supprimez le système de fichiers.
Dépannage
Le PVC reste au statut Pending
Un PVC bloqué au 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 dans Events la présence d'avertissements. Causes courantes :
StorageClass not found: LestorageClassNameest 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 :
Le
provisionercorrespond àbmcpfsplugin.csi.alibabacloud.com.Le
bmcpfsIdest correct et le système de fichiers existe.Si
get csidriverne renvoie aucun résultat, 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 au statut 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 dans
Eventsla présence de messagesWarningtels queFailedMountouMountVolume.Setup failed. -
Confirmez que le PVC est lié.
kubectl get pvc <your-pvc-name>Le
STATUSdoit êtreBound. S'il estPending, consultez la section Le PVC reste au statut Pending. -
S'il est 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.