Todos os produtos
Search
Central de documentação

Cloud Parallel File Storage:Montar sistemas de arquivos CPFS AI Edition no ACK

Última atualização: Jul 30, 2026

O CPFS AI Edition permite que vários pods montem o mesmo sistema de arquivos simultaneamente no modo ReadWriteMany, possibilitando o acesso compartilhado a dados de treinamento e modelos. Este tópico descreve como montar um sistema de arquivos CPFS AI Edition como um volume de armazenamento estático em contêineres usando o plug-in CSI do ACK.

Antes de começar

  • Um cluster gerenciado ACK Lingjun foi criado. O cluster executa Kubernetes 1.26 ou posterior e utiliza Alibaba Cloud Linux 3 como sistema operacional dos nós.

  • Um sistema de arquivos CPFS AI Edition foi criado. Anote o ID do sistema de arquivos. Para mais informações, consulte {{XREF_0}}.

  • Os seguintes componentes de armazenamento estão instalados no cluster ACK. Verifique as versões na página Component Management do cluster ou em {{XREF_1}}:

    Componente

    Versão necessária

    csi-plugin / csi-provisioner

    ≥ v1.33.1

    cnfs-nas-daemon

    ≥ 0.1.2

    bmcpfs-csi-controller / bmcpfs-csi-node

    Gerenciado pelo ACK. Não é necessária instalação manual.

  • Caso um pod seja agendado para um nó não-Lingjun ou para um nó Lingjun em uma zona de afinidade computação-armazenamento diferente, crie previamente um ponto de montagem VPC e anote o nome de domínio do ponto de montagem (no formato cpfs-***-vpc-***.<Region>.cpfs.aliyuncs.com). A VPC à qual o ponto de montagem VPC pertence deve ser a mesma VPC do cluster ACK. Para mais informações, consulte {{XREF_2}}.

Considerações

  • Ao montar um sistema de arquivos CPFS usando VSC, o nó onde o pod é executado deve estar na mesma zona de afinidade computação-armazenamento da instância do sistema de arquivos CPFS AI Edition.

  • Se você utilizar a montagem baseada em contêiner CSI para CPFS, selecione a opção de suporte a acesso de armazenamento de arquivos de alta performance ao criar um grupo de nós Lingjun.

  • Antes de retirar um nó Lingjun de serviço devido a falha, drene os pods desse nó. Caso contrário, os metadados do cluster ficarão inconsistentes, fazendo com que os recursos dos pods permaneçam e não sejam recuperados adequadamente.

  • Não há suporte para montar subdiretórios diferentes da mesma instância CPFS por meio de múltiplos PVs em um único pod. Devido a limitações do driver subjacente, essa configuração impede que o pod inicie.

    Recomendamos criar apenas um PV/PVC para a instância CPFS e usar o campo subPath na configuração volumeMounts do pod para montar separadamente os subdiretórios necessários.

    O subPath é implementado com base em um mecanismo leve de bind mount e não introduz sobrecarga adicional de performance.

Canais de acesso e agendamento

Em um cluster ACK Lingjun, o canal de rede pelo qual um pod acessa o CPFS AI Edition depende do local de agendamento do pod. O plug-in CSI seleciona automaticamente o canal ideal:

Local de agendamento do pod

Canal de acesso

Cenário típico

Nó GPU Lingjun na mesma zona de afinidade computação-armazenamento

VSC + RDMA (performance ideal)

Tarefas de treinamento com GPU

Nó Lingjun em zona de afinidade computação-armazenamento diferente

Alterna automaticamente para ponto de montagem VPC (TCP)

Tarefas de treinamento ou inferência entre zonas

Nó não-Lingjun (pool de nós CPU)

Ponto de montagem VPC (TCP)

Pods CPU: pré-processamento de dados, services de inferência, gerenciamento de agendamento, etc.

Para ativar a alternância automática de canal, configure mountpointAutoSwitch: "true" e vpcMountTarget (nome de domínio do ponto de montagem VPC) nos volumeAttributes do PV. Para detalhes de configuração, consulte {{XREF_3}} abaixo.

Para determinar se um nó Lingjun e um sistema de arquivos CPFS estão na mesma zona de afinidade computação-armazenamento, consulte {{XREF_4}}.

Etapa 1: Criar um PV e PVC

  1. Salve o modelo a seguir como bmcpfs-pv-pvc.yaml, substituindo os espaços reservados pelo ID do seu sistema de arquivos e (se necessário) pelo ponto de montagem VPC.

    Parâmetros do PV

    Parâmetro

    Descrição

    Obrigatório

    accessModes

    Modo de acesso para o PV.

    Sim

    capacity.storage

    Capacidade de armazenamento declarada. Não afeta a capacidade real.

    Sim

    csi.driver

    Tipo de driver. Para CPFS for Lingjun, use bmcpfsplugin.csi.alibabacloud.com.

    Sim

    csi.volumeHandle

    ID do sistema de arquivos CPFS for Lingjun.

    Sim

    csi.volumeAttributes.vpcMountTarget

    Nome de domínio do ponto de montagem VPC. Necessário para nós não-Lingjun; omita se os pods forem agendados apenas para nós Lingjun.

    Condicional

    csi.volumeAttributes.mountpointAutoSwitch

    Ativa a alternância automática entre pontos de montagem VSC e VPC. Use em conjunto com vpcMountTarget.

    Não

    mountOptions

    Opções de montagem.

    Não

    Parâmetros do PVC

    Parâmetro

    Descrição

    Obrigatório

    accessModes

    Modo de acesso solicitado pelo PVC. Deve corresponder ao do PV.

    Sim

    resources.requests.storage

    Capacidade de armazenamento alocada ao pod. Não deve exceder a capacidade do PV.

    Sim

    volumeMode

    Modo de montagem. Defina como Filesystem.

    Sim

    volumeName

    Nome do PV a ser vinculado a este PVC.

    Sim

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: bmcpfs
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 10Ti
      claimRef:
        name: bmcpfs
        namespace: default
      csi:
        driver: bmcpfsplugin.csi.alibabacloud.com
        volumeAttributes:
          # Required if pods schedule to non-Lingjun nodes or cross-zone automatic VPC switching is enabled.
          # Omit if pods schedule only to Lingjun nodes.
          vpcMountTarget: cpfs-***-vpc-***.<Region>.cpfs.aliyuncs.com
          # Enables automatic switching between VSC and VPC mount points.
          # Use together with vpcMountTarget.
          mountpointAutoSwitch: "true"
        # Replace with your CPFS for Lingjun file system ID.
        volumeHandle: bmcpfs-*****
      mountOptions: []
    
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: bmcpfs
      namespace: default
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 10Ti
      volumeMode: Filesystem
      volumeName: bmcpfs
  2. Aplique a configuração.

    kubectl apply -f bmcpfs-pv-pvc.yaml
  3. Confirme se o PVC está vinculado ao PV.

    kubectl get pvc bmcpfs

    Saída esperada:

    NAME     STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    bmcpfs   Bound    bmcpfs   10Ti       RWX                           <unset>                 51s

    O STATUS é Bound, confirmando que o PVC está vinculado ao PV.

Etapa 2: Criar uma aplicação e montar o CPFS

Cenário 1: Montar todo o sistema de arquivos CPFS

Utilize esta abordagem quando todos os contêineres precisarem de acesso total ao sistema de arquivos CPFS.

  1. Salve o seguinte modelo YAML como cpfs-test.yaml.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cpfs-test
      labels:
        app: cpfs-test
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: cpfs-test
      template:
        metadata:
          labels:
            app: cpfs-test
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
            volumeMounts:
              - name: pvc-cpfs
                mountPath: /data
          volumes:
            - name: pvc-cpfs
              persistentVolumeClaim:
                claimName: bmcpfs
  2. Crie o Deployment.

    kubectl create -f cpfs-test.yaml
  3. Verifique se ambos os pods estão em execução.

    kubectl get pod -l app=cpfs-test

    Saída esperada:

    NAME                         READY   STATUS    RESTARTS   AGE
    cpfs-test-76b77d64b5-2hw96   1/1     Running   0          42s
    cpfs-test-76b77d64b5-dnwdx   1/1     Running   0          42s
  4. Verifique a montagem do volume CPFS dentro de um pod.

    kubectl exec -it <pod-name> -- mount | grep /data

    Saída esperada:

    bindroot-f0a5c-******:cpfs-*******-vpc-****.cn-shanghai.cpfs.aliyuncs.com:/ on /data type fuse.aliyun-alinas-efc (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=1048576)

    O tipo de montagem fuse.aliyun-alinas-efc em /data confirma que o volume CPFS está montado.

Cenário 2: Montar subdiretórios para isolamento de dados

Em cenários de armazenamento compartilhado, como configurações multilocatário ou multitarefa, vários contêineres podem compartilhar um volume CPFS enquanto isolam dados em diretórios separados. Use volumeMounts.subPath para montar subdiretórios diferentes em contêineres distintos a partir do mesmo PVC.

Se um diretório subPath (por exemplo, workspace/alpha ) não existir, ele será criado automaticamente.
  1. Salve o seguinte modelo YAML como pod.yaml. Este pod executa dois contêineres, cada um montando um subdiretório diferente do mesmo PVC (bmcpfs).

    apiVersion: v1
    kind: Pod
    metadata:
      name: cpfs-subpath-demo-pod
    spec:
      containers:
        - name: task-alpha-container
          image: busybox:1.35
          command: ["/bin/sh", "-c", "sleep 3600"]
          volumeMounts:
            - name: cpfs-storage
              mountPath: /data/workspace        # Mount path inside the container
              subPath: workspace/alpha          # Mount the workspace/alpha subdirectory only
    
        - name: task-beta-container
          image: busybox:1.35
          command: ["/bin/sh", "-c", "sleep 3600"]
          volumeMounts:
            - name: cpfs-storage
              mountPath: /data/workspace        # Mount paths can be identical across containers
              subPath: workspace/beta           # Mount the workspace/beta subdirectory only
      volumes:
        - name: cpfs-storage
          persistentVolumeClaim:
            claimName: bmcpfs                  # Reference the PVC created earlier
  2. Implante o pod.

    kubectl apply -f pod.yaml
  3. Verifique a montagem e as permissões de gravação do task-alpha-container.

    1. Conecte-se ao contêiner.

      kubectl exec -it cpfs-subpath-demo-pod -c task-alpha-container -- /bin/sh
    2. Confirme se o volume CPFS está montado.

      df -h

      Saída esperada (diretório compartilhado montado em /data/workspace):

      Filesystem                Size      Used Available Use% Mounted on
      ...
      192.XX.XX.0:/share          10.0T     1.0G     10.0T   0% /data/workspace
      ...

      A entrada do sistema de arquivos em /data/workspace confirma que o subdiretório CPFS está montado.

    3. Verifique a estrutura do diretório pai.

      ls -l /data/

      Saída esperada:

      total 4
      drwxr-xr-x    2 root     root          4096 Aug 15 10:00 workspace
    4. Grave um arquivo de teste e saia.

      echo "hello from alpha" > /data/workspace/alpha.log
      exit
  4. Verifique a montagem e o isolamento de dados do task-beta-container.

    1. Conecte-se ao contêiner.

      kubectl exec -it cpfs-subpath-demo-pod -c task-beta-container -- /bin/sh
    2. Grave um arquivo de teste.

      echo "hello from beta" > /data/workspace/beta.log
    3. Liste os arquivos no ponto de montagem.

      ls -l /data/workspace/

      Saída esperada:

      total 4
      -rw-r--r--    1 root     root            16 Aug 15 10:05 beta.log

      beta.log está presente, mas o alpha.log está ausente, confirmando o isolamento de dados entre os contêineres.

Etapa 3: Verificar a montagem

kubectl exec -it <pod-name> -- mount | grep /data
# Expected output contains fuse.aliyun-alinas-efc, indicating the EFC + FUSE protocol is in use