Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Use CPFS for Lingjun dynamic volumes

Dernière mise à jour :Aug 11, 2026

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

    Module complémentaire cnfs-nas-daemon

    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 = 51 cœ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.

Important

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

  1. Créer un système de fichiers CPFS for LINGJUN et notez l'ID du système de fichiers.

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

  1. Créez sc.yaml :

    Paramètre

    Obligatoire

    Description

    bmcpfsId

    Oui

    ID du système de fichiers CPFS for LINGJUN. Format : bmcpfs-xxxxxxxxx ou cpfs-xxxxxxxxx.

    path

    Non

    Sous-répertoire au sein du système de fichiers. Le volume est monté sur {path}/{volumeName}/. Par défaut : /{volumeName}/.

    allowVolumeExpansion

    Non

    Paramètre réservé. La version actuelle ne prend pas en charge l'extension dynamique.

    reclaimPolicy

    Non

    Delete (par défaut) : supprime le fileset backend lorsque le PVC est supprimé. Retain : conserve le fileset ; nécessite un nettoyage manuel. Utilisez Retain en 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
  2. Appliquez la StorageClass :

    kubectl apply -f sc.yaml

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

  1. Créez pvc.yaml :

    Paramètre

    Description

    accessModes

    ReadWriteMany uniquement. Permet un accès simultané par plusieurs pods.

    storage

    Capacité de stockage demandée. Prend en charge des unités telles que Gi et Ti.

    volumeMode

    Seul Filesystem est pris en charge.

    storageClassName

    Nom 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
  2. Appliquez le PVC :

    kubectl apply -f pvc.yaml
  3. Vérifiez que le PVC est lié :

    kubectl get pvc bmcpfs-vsc -n default

    Résultat attendu :

    NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS           AGE
    bmcpfs-vsc   Bound    pvc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   10Ti       RWX            alicloud-bmcpfs-test   30s

    Lorsque STATUS est Bound, le PV est automatiquement créé. Confirmez le provisionnement :

    kubectl describe pvc bmcpfs-vsc -n default

    Vérifiez dans Events la présence d'un message Provisioning 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.

  1. 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
  2. Appliquez le Deployment :

    kubectl apply -f deploy.yaml

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

  1. Supprimez les charges de travail — Arrêtez toutes les applications utilisant les PVC. Cela démonte les volumes.

    kubectl delete deployment <your-deployment-name>
  2. Supprimez les PVC — Le résultat dépend de la reclaimPolicy de 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>
  3. Supprimez les PV (uniquement lorsque reclaimPolicy est Retain) — Après la suppression du PVC, le PV passe au statut Released. Supprimez-le pour retirer la ressource Kubernetes. Les données backend ne sont pas affectées.

    kubectl delete pv <your-pv-name>
  4. (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>
  5. 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 : Le storageClassName est incorrect ou la StorageClass n'existe pas.

  • provisioning failed ou failed 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 provisioner correspond à bmcpfsplugin.csi.alibabacloud.com.

  • Le bmcpfsId est correct et le système de fichiers existe.

  • Si get csidriver ne 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.

  1. Vérifiez les événements du pod :

    kubectl describe pod <pod-name> -n <your-namespace>

    Vérifiez dans Events la présence de messages Warning tels que FailedMount ou MountVolume.Setup failed.

  2. Confirmez que le PVC est lié.

    kubectl get pvc <your-pvc-name>

    Le STATUS doit être Bound. S'il est Pending, consultez la section Le PVC reste au statut Pending.

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

    Ces logs affichent la connectivité réseau, les autorisations de la cible de montage et les erreurs d'E/S.