O Cloud Parallel File System (CPFS) for Lingjun oferece alto throughput e alta performance de IOPS com aceleração de rede RDMA (Remote Direct Memory Access) ponta a ponta. Essa solução é ideal para cenários de IA e computação intensiva, como Geração de Conteúdo por IA (AIGC) e direção autônoma. O ACK permite montar sistemas de arquivos CPFS for Lingjun como volumes persistentes (PVs) provisionados estaticamente.
O CPFS for Lingjun está em preview fechado e disponível apenas em regiões e zonas selecionadas. Entre em contato com seu gerente de conta para solicitar acesso.
Escolha um método de montagem
Com base na Container Storage Interface (CSI), o ACK suporta a montagem de sistemas de arquivos CPFS for Lingjun como PVs e persistent volume claims (PVCs) provisionados estaticamente. O add-on CSI seleciona automaticamente o melhor método de montagem conforme o tipo de nó do pod:
|
Método de montagem |
Nós suportados |
Requisitos |
|
Canal de armazenamento virtual (VSC) |
Apenas nós Lingjun |
Você deve enviar um ticket para as equipes de produto do CPFS e do Lingjun a fim de obter acesso à lista de permissões. |
|
VPC |
Nós não-Lingjun |
Crie um ponto de montagem VPC na mesma VPC dos nós do cluster. |
Antes de começar, identifique qual caminho se aplica ao seu cluster:
Pods executam em nós Lingjun: montagem VSC por padrão. Ignore a criação do ponto de montagem VPC.
Pods executam em nós não-Lingjun: montagem VPC obrigatória. Crie um ponto de montagem VPC na Etapa 1.
Pods executam em ambos os tipos de nó: defina
vpcMountTargetemountpointAutoSwitch: "true"no PV. O add-on CSI alterna automaticamente entre os métodos.
Pré-requisitos
Antes de iniciar, certifique-se de ter:
Revisado os limites do CPFS for Lingjun
Um cluster ACK rodando Kubernetes 1.26 ou superior. Atualize se necessário.
Nós rodando Alibaba Cloud Linux 3
-
Os seguintes add-ons de armazenamento nas versões exigidas (verifique e atualize na página Add-ons):
Add-on CSI (csi-plugin e csi-provisioner): v1.33.1 ou superior (gerenciar add-ons CSI).
-
cnfs-nas-daemon: 0.1.2 ou superior
bmcpfs-csi: incluibmcpfs-csi-controller(add-on do plano de controle gerenciado pelo ACK) ebmcpfs-csi-node(DaemonSet no lado do nó)
Observações de uso
Zona de montagem VSC: O nó que executa o pod deve estar na mesma
hpn-zoneda instância do sistema de arquivos CPFS for Lingjun.Inicialização do nó: Associe um nó Lingjun a um sistema de arquivos CPFS for Lingjun durante a inicialização. Caso contrário, a montagem via CSI falhará.
Drenagem de nós: Antes de descomissionar um nó Lingjun com falha, drene todos os pods dele. Ignorar esta etapa causa inconsistência nos metadados do cluster e deixa recursos de pods órfãos impossíveis de limpar.
Um PV por instância CPFS: Não há suporte para montar vários subdiretórios do mesmo sistema de arquivos CPFS como PVs separados em um único pod. Devido a limitações do driver, isso causa falha na inicialização do pod. Crie um único PV/PVC e use
volumeMounts.subPathpara montar subdiretórios. OsubPathutiliza umbind mountleve, sem sobrecarga de performance.
Etapa 1: Criar um sistema de arquivos CPFS
Crie um sistema de arquivos CPFS for Lingjun e anote o ID do sistema de arquivos.
-
(Opcional) Para nós não-Lingjun, crie um ponto de montagem VPC na mesma VPC dos nós do seu cluster e anote o nome de domínio do ponto de montagem. Formato: cpfs--vpc-.<Região>.cpfs.aliyuncs.com.
Não necessário se os pods executarem em nós Lingjun (montagens VSC por padrão).
Etapa 2: Criar um PV e PVC
-
Salve o modelo a seguir como
bmcpfs-pv-pvc.yaml, substituindo os placeholders 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
accessModesModo de acesso para o PV.
Sim
capacity.storageCapacidade de armazenamento declarada. Não afeta a capacidade real.
Sim
csi.driverTipo de driver. Para CPFS for Lingjun, use
bmcpfsplugin.csi.alibabacloud.com.Sim
csi.volumeHandleID do sistema de arquivos CPFS for Lingjun.
Sim
csi.volumeAttributes.vpcMountTargetNome de domínio do ponto de montagem VPC. Obrigatório para nós não-Lingjun; omita se os pods forem agendados apenas em nós Lingjun.
Condicional
csi.volumeAttributes.mountpointAutoSwitchHabilita a troca automática entre pontos de montagem VSC e VPC. Use junto com
vpcMountTarget.Não
mountOptionsOpções de montagem.
Não
Parâmetros do PVC
Parâmetro
Descrição
Obrigatório
accessModesModo de acesso solicitado pelo PVC. Deve corresponder ao do PV.
Sim
resources.requests.storageCapacidade de armazenamento alocada ao pod. Não deve exceder a capacidade do PV.
Sim
volumeModeModo de montagem. Defina como
Filesystem.Sim
volumeNameNome 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 -
Aplique a configuração.
kubectl apply -f bmcpfs-pv-pvc.yaml -
Confirme se o PVC está vinculado ao PV.
kubectl get pvc bmcpfsSaída esperada:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE bmcpfs Bound bmcpfs 10Ti RWX <unset> 51sO
STATUScomoBoundconfirma que o PVC está vinculado ao PV.
Etapa 3: Implantar uma carga de trabalho
Cenário 1: Montar todo o sistema de arquivos CPFS
Utilize esta abordagem quando todos os containers precisarem de acesso completo ao sistema de arquivos CPFS.
-
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 -
Crie o Deployment.
kubectl create -f cpfs-test.yaml -
Verifique se ambos os pods estão em execução.
kubectl get pod -l app=cpfs-testSaí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 -
Verifique a montagem do volume CPFS dentro de um pod.
kubectl exec -it <pod-name> -- mount | grep /dataSaí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-efcem/dataconfirma 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 containers podem compartilhar um volume CPFS enquanto isolam dados em diretórios separados. Use volumeMounts.subPath para montar subdiretórios diferentes em containers diferentes a partir do mesmo PVC.
Se um diretóriosubPath(por exemplo,workspace/alpha) não existir, ele será criado automaticamente.
-
Salve o seguinte modelo YAML como
pod.yaml. Este pod executa dois containers, 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 -
Implante o pod.
kubectl apply -f pod.yaml -
Verifique a montagem e as permissões de escrita do
task-alpha-container.-
Conecte-se ao container.
kubectl exec -it cpfs-subpath-demo-pod -c task-alpha-container -- /bin/sh -
Confirme se o volume CPFS está montado.
df -hSaí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/workspaceconfirma que o subdiretório CPFS está montado. -
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 -
Escreva um arquivo de teste e saia.
echo "hello from alpha" > /data/workspace/alpha.log exit
-
-
Verifique a montagem e o isolamento de dados do
task-beta-container.-
Conecte-se ao container.
kubectl exec -it cpfs-subpath-demo-pod -c task-beta-container -- /bin/sh -
Escreva um arquivo de teste.
echo "hello from beta" > /data/workspace/beta.log -
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.logO arquivo
beta.logestá presente, mas oalpha.logestá ausente, confirmando o isolamento de dados entre os containers.
-
<