Todos os produtos
Search
Central de documentação

File Storage NAS:Enable the distributed caching feature of the CNFS client

Última atualização: Jun 27, 2026

O cliente Container Network File System (CNFS) permite acessar dados por meio de múltiplas conexões, armazenar metadados em cache e fazer cache de dados de forma distribuída para aumentar a velocidade de leitura. O cliente CNFS também oferece suporte a monitoramento de desempenho e qualidade de serviço (QoS). Este tópico descreve como ativar o recurso de cache distribuído do cliente CNFS e como utilizá-lo para melhorar a velocidade de leitura.

Pré-requisitos

  • Utilize o Alibaba Cloud Linux 2 com versão de kernel entre 4.19.91-23 e 4.19.91-26. O recurso de cache distribuído é compatível com o Alibaba Cloud Linux 2.

  • Crie um cluster do Container Service for Kubernetes (ACK) executando Kubernetes 1.20 ou posterior. Utilize o plug-in Container Storage Interface (CSI) como plug-in de volume. Para mais informações, consulte Criar um cluster gerenciado do ACK.

  • Verifique se as versões do csi-plugin e do csi-provisioner são v1.22.11-abbb810e-aliyun ou posteriores. Para mais informações sobre como atualizar o csi-plugin e o csi-provisioner, consulte Instalar e atualizar o plug-in CSI.

  • Verifique se a versão do storage-operator é v1.22.86-041b094-aliyun ou posterior. Para mais informações sobre como atualizar o storage-operator, consulte Gerenciar componentes.

  • Conecte um cliente kubectl ao cluster. Para mais informações, consulte Conectar-se a um cluster ACK usando kubectl.

Principais indicadores de desempenho do recurso de cache distribuído

Indicador

Cenário de benchmark

Cache distribuído desativado

Cache distribuído ativado

Desempenho de leitura e gravação de metadados

Tempo para percorrer um milhão de diretórios

18 minutos

< 60 segundos

Tempo para criar um arquivo de 4 KB

3.000 microssegundos

< 200 microssegundos

Tempo para ler um arquivo de 4 KB pela segunda vez

400 microssegundos

< 100 microssegundos

Throughput de leitura e gravação

Throughput de leitura e gravação de um único nó

200 a 500 MB/s

> 800 MB/s

Desempenho geral em cenários abrangentes

Tempo para extrair 5.000 imagens de 150 KB cada

52 segundos

Cerca de 15 segundos

Tempo para criar um projeto Redis

27 segundos

Cerca de 21 segundos

Importante

Os valores apresentados na tabela anterior são apenas teóricos (valores de referência). Os valores reais dependem do seu ambiente operacional.

  • Nota ①: O tipo de instância do Elastic Compute Service (ECS) utilizada para executar o teste de benchmark é ecs.hfg6.4xlarge. Os dados do benchmark podem variar conforme o ambiente.

  • Nota ②: A largura de banda da instância ECS e o tipo de sistema de arquivos do File Storage NAS (NAS) afetam o throughput de leitura e gravação do nó.

Etapa 1: Monte um sistema de arquivos NAS com cache distribuído ativado

  1. Execute o comando a seguir para criar e implantar o ConfigMap do csi-plugin no cluster e instale o cliente CNFS:

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: csi-plugin
      namespace: kube-system
    data:
      cnfs-client-properties: |
        nas-efc=true
      nas-efc-cache: |
        enable=true
        container-number=3
        volume-type=memory
        volume-size=15Gi
      node-selector: |
        cache=true
    EOF

    Parâmetro

    Descrição

    cnfs-client-properties

    Define se o cache distribuído deve ser ativado. Se você especificar nas-efc=true, o recurso de cache distribuído será ativado para aumentar a velocidade de leitura.

    nfs-efc-cache.

    container-number

    Este parâmetro é obrigatório ao ativar o cache distribuído.

    Ele define o número de contêineres que o DaemonSet cria para o recurso de cache. Caso o recurso de cache atinja um gargalo de desempenho, aumente o valor deste parâmetro.

    nfs-efc-cache.

    volume-type

    Este parâmetro é obrigatório ao ativar o cache distribuído.

    Meio utilizado pelo volume emptyDir do pod criado pelo DaemonSet. Valores válidos:

    • disk

    • memory

    nfs-efc-cache.

    volume-size

    Este parâmetro é obrigatório ao ativar o cache distribuído. Tamanho do volume a ser armazenado em cache. Unidade: GiB.

    node-selector

    O pod criado pelo DaemonSet para o recurso de cache distribuído é agendado com base em rótulos. Se este parâmetro não for especificado, o DaemonSet será agendado em todos os nós do cluster.

    Importante
    • Ao definir o meio como disco ou memória, os recursos de disco de dados ou memória do nó serão consumidos. Certifique-se de que isso não afete negativamente suas cargas de trabalho.

    • Neste exemplo, o DaemonSet do recurso de cache distribuído cria três contêineres, cada um montado com um volume tmpfs de 5 GiB. Os contêineres só podem ser agendados em um nó que possua o rótulo cache=true.

    Após a configuração do ConfigMap, o sistema implanta automaticamente o DaemonSet e o Service com base nessa configuração.

  2. Execute o comando a seguir para reiniciar o CSI-Plugin e instale as dependências:

    kubectl get pod -nkube-system -owide | grep csi-plugin | awk '{print $1}' | xargs kubectl -nkube-system delete pod
  3. Execute o comando a seguir para ativar o recurso de cache distribuído do cliente CNFS:

    Crie um sistema de arquivos NAS gerenciado pelo CNFS. O StatefulSet monta o volume NAS acelerado pelo CNFS como um volume provisionado dinamicamente. A imagem busybox é utilizada neste exemplo. Após o início do pod, o sistema executa o comando dd para gravar um arquivo de 1 GB no caminho /data. Esse arquivo serve para verificar se o recurso de cache distribuído entrou em vigor.

    Show YAML content:

    cat << EOF | kubectl apply -f -
    apiVersion: storage.alibabacloud.com/v1beta1
    kind: ContainerNetworkFileSystem
    metadata:
      name: cnfs-nas-filesystem
    spec:
      description: "cnfs"
      type: nas
      reclaimPolicy: Retain
      parameters:
        filesystemType: standard
        storageType: Capacity
        protocolType: NFS
        encryptType: None
        enableTrashCan: "true"
        trashCanReservedDays: "5"
        useClient: "EFCClient" # Use the EFC client to mount a NAS file system that has distributed caching enabled. 
    ---
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alibabacloud-cnfs-nas-sc
    mountOptions:
      - g_tier_EnableClusterCache=true              # Configure caching settings when mounting the volume. 
      - g_tier_EnableClusterCachePrefetch=true      # Configure prefetching when mounting the volume. 
    parameters:
      volumeAs: subpath
      containerNetworkFileSystem: cnfs-nas-filesystem
      path: "/"
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain
    allowVolumeExpansion: true
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: cnfs-nas-sts
      labels:
        app: busybox
    spec:
      serviceName: "busybox"
      replicas: 1
      selector:
        matchLabels:
          app: busybox
      template:
        metadata:
          labels:
            app: busybox
        spec:
          containers:
          - name: busybox
            image: busybox
            command: ["/bin/sh"]
            args: ["-c", "dd if=/dev/zero of=/data/1G.tmpfile bs=1G count=1;sleep 3600;"]
            volumeMounts:
            - mountPath: "/data"
              name: www
      volumeClaimTemplates:
      - metadata:
          name: www
        spec:
          accessModes: [ "ReadWriteOnce" ]
          storageClassName: "alibabacloud-cnfs-nas-sc"
          resources:
            requests:
              storage: 50Gi
    EOF
  4. Execute o comando a seguir para verificar se o volume NAS com cache distribuído ativado foi montado:

    kubectl exec cnfs-nas-sts-0   -- mount | grep /data

    Saída esperada:

    xxx.cn-xxx.nas.aliyuncs.com:/nas-6b9d1397-6542-4410-816b-4dfd0633****:2fMaQdxU on /data type alifuse.aliyun-alinas-eac (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)

    Um destino de montagem aparece na saída, indicando que o volume NAS com cache distribuído ativado foi montado com sucesso.

  5. Execute o comando a seguir para verificar se o DaemonSet do recurso de cache distribuído foi iniciado:

    kubectl get ds/cnfs-cache-ds -n kube-system -owide

    Saída esperada:

    NAME             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE   CONTAINERS              IMAGES                                                         SELECTOR
    cnfs-cache-ds   3         3         3       3            3           <none>          19d   alinas-dadi-container   registry-vpc.cn-shenzhen.aliyuncs.com/acs/nas-cache:20220420   app=cnfs-cache-ds

    Neste exemplo, o cluster possui três nós. Os três pods criados pelo DaemonSet estão prontos, o que indica que o DaemonSet do recurso de cache distribuído foi iniciado corretamente.

  6. Execute o comando a seguir para verificar se o Service de cache distribuído consegue descobrir os pods de backend:

    kubectl get ep cnfs-cache-ds-service  -n kube-system -owide

    Saída esperada:

    NAME                     ENDPOINTS                                          AGE
    cnfs-cache-ds-service   10.19.1.130:6500,10.19.1.40:6500,10.19.1.66:6500   19d

    A saída mostra que o Service descobriu os pods de backend. Os endpoints dos pods são 10.19.1.130, 10.19.1.40 e 10.19.1.66, utilizando a porta 6500.

Etapa 2: Verifique o recurso de cache

  1. Execute o comando a seguir para copiar o arquivo tmpfile do diretório /data para o diretório / e verifique o tempo consumido. O tamanho do arquivo é de 1 GB.

    kubectl exec cnfs-nas-sts-0 -- time cp /data/1G.tmpfile /

    Saída esperada:

    real    0m 5.66s
    user    0m 0.00s
    sys     0m 0.75s

    A saída indica que o tempo necessário para copiar o arquivo é de cerca de cinco segundos quando o recurso de cache distribuído está desativado.

  2. Execute o comando a seguir várias vezes para verificar o tempo necessário para copiar o arquivo:

    kubectl exec cnfs-nas-sts-0 -- time cp /data/1G.tmpfile /

    Saída esperada:

    real    0m 0.79s
    user    0m 0.00s
    sys     0m 0.58s

    A saída demonstra que o tempo necessário para copiar o arquivo é reduzido de seis a sete vezes quando o arquivo é acessado mais de uma vez.