Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Use CPFS for Lingjun dynamic volumes

Dernière mise à jour :Sep 09, 2026

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

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

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

  1. Créer un système de fichiers CPFS pour 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 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.

  1. Créez sc.yaml :

    Paramètre

    Requis

    Description

    bmcpfsId

    Oui

    ID du système de fichiers CPFS pour 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 sur /{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

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

  1. Créez pvc.yaml :

    Paramètre

    Description

    accessModes

    ReadWriteMany uniquement. Permet un accès multi-pods concurrent.

    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

    Sortie attendue :

    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 créé automatiquement. Confirmez le provisionnement :

    kubectl describe pvc bmcpfs-vsc -n default

    Vérifiez Events pour 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 pour 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

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

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

    kubectl delete deployment <your-deployment-name>
  2. Supprimer les PVC — Le résultat dépend de la reclaimPolicy de 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>
  3. Supprimer 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) 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>
  5. 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 : 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 :

  • provisioner correspond à bmcpfsplugin.csi.alibabacloud.com.

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

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

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

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

    Vérifiez Events pour les messages Warning tels que FailedMount ou MountVolume.Setup failed.

  2. Confirmez que le PVC est lié.

    kubectl get pvc <your-pvc-name>

    STATUS doit être Bound. Si Pending, consultez Le PVC reste en statut Pending.

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

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