Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Use NAS dynamic volumes

Última atualização: Jul 09, 2026

Com o provisionamento dinâmico do File Storage NAS, você provisiona armazenamento para workloads sob demanda automaticamente, eliminando a necessidade de criar PVs antecipadamente. Esse recurso oferece persistência e compartilhamento de dados, permitindo que vários Pods leiam e escrevam simultaneamente, além de simplificar o gerenciamento de armazenamento em casos de uso como aplicações web e retenção de logs.

Como funciona

Com volumes dinâmicos, quando uma aplicação cria um PVC, o sistema cria automaticamente um novo volume de armazenamento e um PV correspondente sob demanda. A StorageClass especificada no PVC determina esse provisionamento. Esse modo oferece maior flexibilidade e suporta expansão automática de volumes de armazenamento.

Modo de montagem

Especifique o modo de montagem com o parâmetro volumeAs em uma StorageClass. Esse parâmetro define a relação entre um PV e o sistema de arquivos NAS.

Modo de montagem

Descrição

Cenário

subpath

No modo subpath, cada PV é mapeado para um subdiretório exclusivo dentro de um sistema de arquivos NAS. Esse modo facilita o isolamento de dados.

  • Vários Pods montam o mesmo subdiretório de um sistema de arquivos NAS.

  • Vários Pods montam subdiretórios diferentes do mesmo sistema de arquivos NAS para isolamento de dados.

sharepath

No modo sharepath, todos os PVs são mapeados para o mesmo diretório NAS definido na StorageClass. Portanto, todos os PVCs que usam essa StorageClass acessam o mesmo diretório compartilhado.

Vários Pods em namespaces diferentes precisam montar o mesmo subdiretório NAS.

filesystem (Não recomendado)

No modo filesystem, uma nova instância dedicada de sistema de arquivos NAS é criada dinamicamente para cada PV.

Indicado para aplicações que exigem isolamento rigoroso de desempenho e segurança. Permite a criação e exclusão dinâmica de sistemas de arquivos NAS e destinos de montagem independentes para cada aplicação, mas gera custos mais elevados.

Fluxo de trabalho

O fluxo de trabalho para montar um volume dinâmico do NAS é o seguinte.

  1. Crie uma StorageClass: Defina um modelo de armazenamento, declare o destino de montagem do NAS e selecione um modo de montagem (como subpath ou sharepath) conforme seus requisitos de negócio.

  2. Crie um PVC: Uma aplicação usa um PVC para solicitar recursos de armazenamento. O sistema cria automaticamente um PV e o vincula ao PVC com base na StorageClass especificada.

  3. Monte o volume na sua aplicação: Monte o PVC vinculado em um Pod da aplicação. O volume fica então disponível como um diretório persistente dentro do contêiner.

Pré-requisitos

  • Os componentes csi-plugin e csi-provisioner estão instalados.

    Os componentes CSI são instalados por padrão. Verifique se eles permanecem instalados. Você pode verificar o status da instalação na página Add-ons . Recomendamos atualizar os componentes CSI para a versão mais recente.
  • Para usar subpath e sharepath, é necessário ter um sistema de arquivos Apsara File Storage NAS que atenda aos seguintes requisitos. Caso contrário, crie um sistema de arquivos.

    O NAS possui limitações quanto à conectividade de montagem, quantidade de sistemas de arquivos e tipos de protocolo.
    • Protocol: Apenas NFS é suportado.

    • VPC: O sistema de arquivos Apsara File Storage NAS deve estar na mesma VPC do seu cluster. O Apsara File Storage NAS suporta montagem entre zonas, mas não entre VPCs.

    • Mount Target: Adicione um destino de montagem que esteja na mesma VPC do seu cluster e esteja ativo. Para mais informações, consulte Gerenciar destinos de montagem. Anote o endereço do destino de montagem.

    • (Opcional) Encryption Type: Para criptografar dados em um volume, configure o tipo de criptografia ao criar o sistema de arquivos Apsara File Storage NAS.

Observações de uso

  • Não exclua destinos de montagem: Para evitar erros de E/S nos nós, não exclua um destino de montagem no console do NAS enquanto o volume correspondente estiver em uso.

  • Escritas simultâneas: O NAS fornece armazenamento compartilhado. Quando vários Pods montam o mesmo volume, sua aplicação deve lidar com possíveis problemas de consistência de dados decorrentes de escritas concorrentes.

    Para mais informações sobre limitações de escritas simultâneas no NAS, consulte Vários processos escrevendo no mesmo arquivo de log e Latência na leitura de conteúdo de arquivo atualizado entre instâncias ECS .
  • Desempenho de montagem: Se você configurar o parâmetro securityContext.fsgroup na sua aplicação, o kubelet executa recursivamente chmod ou chown após a montagem do volume, aumentando significativamente o tempo de inicialização do Pod.

    Para otimizar o desempenho de montagem, consulte Perguntas frequentes sobre volumes NAS .

Método 1: Montar um volume usando subpath

Neste método, o provisionador CSI cria automaticamente um subpath dedicado no sistema de arquivos NAS para cada PersistentVolumeClaim (PVC). Esse subpath funciona como o PersistentVolume (PV).

1. Criar uma StorageClass

Uma StorageClass atua como um modelo para provisionamento de volumes dinâmicos e define a origem e o comportamento dos recursos de armazenamento.

kubectl

  1. Crie um arquivo chamado alicloud-nas-subpath.yaml com o seguinte conteúdo:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      # The name of the StorageClass, which must be unique within the cluster.
      name: alicloud-nas-subpath  
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    parameters:
      # Set to subpath.
      volumeAs: subpath
      # The format of the server field is <nas-server-address>:/<path>.
      server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s"
      archiveOnDelete: "true"
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain
    allowVolumeExpansion: true

    Parâmetro

    Descrição

    mountOptions

    As opções de montagem para o NAS, incluindo a versão do protocolo NFS. Por padrão, os volumes são montados usando NFSv3. Você pode especificar uma versão diferente com uma opção como vers=4.0. Para informações sobre os protocolos NFS suportados por diferentes tipos de NAS, consulte Protocolos NFS.

    parameters.volumeAs

    O modo de provisionamento do volume. Defina como subpath.

    parameters.server

    O destino de montagem do NAS e o subpath a ser montado, no formato <nas-server-address>:/<path>.

    • <nas-server-address>: O destino de montagem do sistema de arquivos NAS. Para mais informações, consulte Gerenciar destinos de montagem.

    • :/<path>: O subpath do NAS a ser montado. Se este parâmetro não for definido ou se o subpath especificado não existir, o diretório raiz será montado por padrão.

      • NAS de uso geral: O diretório raiz é /.

      • Extreme NAS: O diretório raiz é /share. Ao montar um subpath, o path deve começar com /share, como /share/data.

    parameters.archiveOnDelete

    Especifica se os dados no armazenamento de backend devem ser excluídos quando um PVC é excluído e seu reclaimPolicy está definido como Delete.

    Esta opção atua como uma salvaguarda para evitar perda acidental de dados no armazenamento NAS compartilhado.
    • true (padrão): O diretório e seus arquivos não são excluídos. Em vez disso, eles são arquivados e renomeados no formato archived-{pvName}.{timestamp}.

    • false: O diretório correspondente e seus dados são excluídos permanentemente.

      Esta operação exclui o subpath do NAS e seus arquivos, não o sistema de arquivos NAS em si.

      Para excluir um sistema de arquivos NAS, consulte Excluir um sistema de arquivos.

    Em cenários onde PVs são criados e excluídos frequentemente, definir este parâmetro como false pode causar o bloqueio da fila de tarefas do controlador CSI, impedindo a criação de novos PVs. Para mais informações, consulte A fila de tarefas do controlador está cheia e novos PVs não podem ser criados ao usar um volume NAS dinâmico.

    provisioner

    O driver. Defina este parâmetro como nasplugin.csi.alibabacloud.com ao usar o plug-in CSI do Alibaba Cloud NAS.

    reclaimPolicy

    A política de recuperação do PV.

    • Delete (padrão): Quando o PVC é excluído, os dados do armazenamento de backend são processados com base na configuração archiveOnDelete.

    • Retain: Quando o PVC é excluído, o PV e os dados no sistema de arquivos NAS não são excluídos e devem ser removidos manualmente. Esta política é recomendada para cenários que exigem alta segurança de dados para evitar perda acidental.

    allowVolumeExpansion

    Suportado apenas pelo NAS de uso geral.

    Permite a expansão dinâmica de PVs criados por esta StorageClass modificando a capacidade do PVC.

    Esta StorageClass usa o recurso de cota de diretório do NAS para gerenciar a capacidade do PV, permitindo controle preciso de tamanho. Você pode expandir o volume online editando o campo spec.resources.requests.storage do PVC. Para mais informações, consulte Definir cotas de diretório para volumes NAS dinâmicos.

    As cotas de diretório do NAS entram em vigor de forma assíncrona. Se você realizar escritas de dados em grande volume e alta velocidade imediatamente após a criação ou expansão de um PV, poderá exceder a capacidade especificada porque a cota ainda não foi totalmente aplicada. Para mais informações, consulte Limites de uso.
  2. Crie a StorageClass.

    kubectl create -f alicloud-nas-subpath.yaml

Console

  1. Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Volumes > StorageClasses.

  3. Clique em Create, especifique um nome exclusivo para a StorageClass dentro do cluster, selecione NAS como o PV Type e siga as instruções na tela para criar a StorageClass.

    Os principais parâmetros estão descritos na tabela a seguir.

    Parâmetro

    Descrição

    Select Mount Target

    O destino de montagem do sistema de arquivos NAS.

    Volume Mode

    O modo de provisionamento do volume. Selecione Subdirectory. Um subpath é criado automaticamente sob o caminho de montagem especificado. Os dados são armazenados em <NAS mount target>:<mount path>/<pv-name>/.

    Mount Path

    O subdiretório do NAS a ser montado. Se este parâmetro não for especificado, o diretório raiz será montado por padrão.

    Se o diretório não existir no sistema de arquivos NAS, ele será criado automaticamente e depois montado.
    • NAS de uso geral: O diretório raiz é /.

    • Extreme NAS: O diretório raiz é /share. Ao montar um subdiretório, o path deve começar com /share, como /share/data.

    Reclaim Policy

    A política de recuperação do PV.

    • Delete (padrão): Quando o PVC é excluído, os dados do armazenamento de backend são processados com base na configuração archiveOnDelete.

    • Retain: Quando o PVC é excluído, o PV e os dados no sistema de arquivos NAS não são excluídos e devem ser removidos manualmente. Esta política é recomendada para cenários que exigem alta segurança de dados para evitar perda acidental.

    Mount Options

    As opções de montagem para o NAS, incluindo a versão do protocolo NFS. Por padrão, os volumes são montados usando NFSv3. Você pode especificar uma versão diferente com uma opção como vers=4.0. Para informações sobre os protocolos NFS suportados por diferentes tipos de NAS, consulte Protocolos NFS.

    Após a criação da StorageClass, você pode visualizá-la na lista StorageClasses.

2. Criar um PVC

Um PersistentVolumeClaim (PVC) é uma solicitação de armazenamento de uma aplicação que aciona uma StorageClass associada para provisionar e vincular dinamicamente um PersistentVolume (PV) correspondente.

kubectl

  1. Crie um arquivo chamado nas-pvc.yaml com o seguinte conteúdo:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata: 
      name: nas-csi-pvc
    spec:
      accessModes:
      - ReadWriteMany 
      # Specify the StorageClass to use.
      storageClassName: alicloud-nas-subpath  
      resources: 
        requests:
          # Declare the required capacity of the storage volume.
          storage: 20Gi  

    Parâmetro

    Descrição

    accessModes

    O modo de acesso. Valores válidos:

    • ReadWriteMany (padrão): O volume pode ser montado como leitura e escrita por vários nós.

    • ReadWriteOnce: O volume pode ser montado como leitura e escrita por um único nó.

    • ReadOnlyMany: O volume pode ser montado como somente leitura por vários nós.

    storageClassName

    O nome da StorageClass a ser usada.

    storage

    A capacidade necessária do volume de armazenamento. Por padrão, esta declaração atua como uma solicitação de recurso e não limita o espaço de armazenamento real disponível para o pod.

    O limite de capacidade de um sistema de arquivos NAS é determinado por suas especificações. Para mais informações, consulte NAS de uso geral e Extreme NAS.

    No entanto, quando allowVolumeExpansion na StorageClass está definido como true, este valor torna-se um limite rígido estritamente aplicado. O plug-in CSI define a cota de diretório do NAS com base nesta configuração para limitar a capacidade disponível do PV.

  2. Crie o PVC.

    kubectl create -f nas-pvc.yaml
  3. Verifique o PV.

    kubectl get pv

    A saída esperada é semelhante à seguinte, mostrando que a StorageClass provisionou automaticamente um PersistentVolume (PV) e o vinculou ao PVC.

    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS             VOLUMEATTRIBUTESCLASS   REASON   AGE
    nas-a7540d97-0f53-4e05-b7d9-557309******   20Gi       RWX            Retain           Bound    default/nas-csi-pvc   alicloud-nas-subpath     <unset>                          5m

Console

  1. No painel de navegação à esquerda da página de gerenciamento do cluster, escolha Storage > PVCs.

  2. Na página Persistent Volume Claims, clique em Create, configure os parâmetros do PVC e clique em Create.

    Parâmetro

    Descrição

    PVC Type

    Selecione NAS.

    Name

    O nome do PVC. O nome deve ser exclusivo dentro do namespace.

    Allocation Mode

    Selecione Use StorageClass.

    Existing Storage Class

    Clique em Select Storage Class e escolha a StorageClass que você criou.

    Total Capacity

    A capacidade necessária do volume de armazenamento. Por padrão, esta declaração atua como uma solicitação de recurso e não limita o espaço de armazenamento real disponível para o pod.

    O limite de capacidade de um sistema de arquivos NAS é determinado por suas especificações. Para mais informações, consulte NAS de uso geral e Extreme NAS.

    No entanto, quando allowVolumeExpansion na StorageClass está definido como true, este valor torna-se um limite rígido estritamente aplicado. O plug-in CSI define a cota de diretório do NAS com base nesta configuração para limitar a capacidade disponível do PV.

    Access Mode

    O modo de acesso. Valores válidos:

    • ReadWriteMany (padrão): O volume pode ser montado como leitura e escrita por vários nós.

    • ReadWriteOnce: O volume pode ser montado como leitura e escrita por um único nó.

    • ReadOnlyMany: O volume pode ser montado como somente leitura por vários nós.

3. Criar uma aplicação e montar o NAS

Após a criação do PVC, você pode montar o volume em uma aplicação. Esta seção mostra como criar dois Deployments que referenciam o mesmo PVC, permitindo que vários pods compartilhem o mesmo subpath do NAS.

kubectl

Crie dois Deployments que referenciem o mesmo PVC para permitir que eles compartilhem o mesmo subpath do sistema de arquivos NAS.

Para montar subpaths diferentes do mesmo sistema de arquivos NAS em pods diferentes, você deve criar uma StorageClass exclusiva e um PVC correspondente para cada subpath.
  1. Crie dois arquivos chamados nginx-1.yaml e nginx-2.yaml com o seguinte conteúdo.

    As configurações para ambas as aplicações são quase idênticas. Ambas referenciam o mesmo PVC.
    • nginx-1.yaml

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nas-test-1     
        labels:
          app: nginx
      spec:
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              ports:
              - containerPort: 80
              volumeMounts:
                - name: nas-pvc
                  # The mount path for the NAS volume inside the container.
                  mountPath: "/data"          
            volumes:
              - name: nas-pvc                 
                persistentVolumeClaim:
                  # Reference the previously created PVC.
                  claimName: nas-csi-pvc      
    • nginx-2.yaml

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nas-test-2     
        labels:
          app: nginx
      spec:
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              ports:
              - containerPort: 80
              volumeMounts:
                - name: nas-pvc
                  # The mount path for the NAS volume inside the container.
                  mountPath: "/data"           
            volumes:
              - name: nas-pvc                 
                persistentVolumeClaim:
                  # Reference the previously created PVC.
                  claimName: nas-csi-pvc       
  2. Crie os dois Deployments.

    kubectl create -f nginx-1.yaml -f nginx-2.yaml
  3. Verifique o status dos pods.

    kubectl get pod -l app=nginx

    Saída esperada:

    NAME                         READY   STATUS    RESTARTS   AGE
    nas-test-1-b75d5b6bc-*****   1/1     Running   0          51s
    nas-test-2-b75d5b6bc-*****   1/1     Running   0          44s
  4. Inspecione cada pod para verificar se ele usa o PersistentVolumeClaim (PVC) correto.

    Substitua <podName> pelo nome real de cada pod.
    kubectl describe pod <podName> | grep "ClaimName:"

    Na saída esperada, ambos os pods usam o mesmo PVC, o que confirma que eles compartilham o mesmo subpath do sistema de arquivos NAS.

Console

Repita as etapas a seguir para criar dois Deployments que usam o mesmo PVC, o que permite que eles compartilhem o mesmo subpath do sistema de arquivos NAS.

  1. Na página Clusters do ACK, clique no nome do seu cluster. No painel de navegação à esquerda, clique em > Deployments.

  2. Clique em Create from Image e siga as instruções na tela para configurar e criar a aplicação.

    Os principais parâmetros estão descritos abaixo. Você pode manter os valores padrão para outros parâmetros. Para mais informações, consulte Criar uma aplicação stateless (Deployment).

    Seção

    Parâmetro

    Descrição

    Basic Information

    Replicas:

    O número de réplicas para o Deployment.

    Container

    Image

    O endereço da imagem usada para implantar a aplicação.

    Required Resources

    Os recursos de vCPU e memória necessários pelo contêiner.

    Volumes

    Clique em Add PVC e configure os parâmetros.

    • Mount Source: Selecione o PVC que você criou.

    • Container Path: Insira o caminho dentro do contêiner onde o sistema de arquivos NAS será montado.

    Após a conclusão da implantação, você pode clicar no nome da aplicação na página Deployments e verificar a aba Pods para confirmar que os pods estão executando normalmente (seu status é Running).

Para verificar se o armazenamento é compartilhado e persistente, consulte Verificar armazenamento compartilhado e persistente.

Método 2: Montar usando o modo sharepath

Neste modo, quando PVs são criados para PVCs que usam esta StorageClass, o provisionador não cria novos diretórios. Em vez disso, todos os PVs usam o caminho definido na StorageClass, mapeando cada PV para o mesmo diretório NAS.

1. Criar uma StorageClass

Uma StorageClass atua como um modelo para provisionamento de volumes dinâmicos e define a origem e o comportamento dos recursos de armazenamento.

kubectl

  1. Crie um arquivo chamado alicloud-nas-sharepath.yaml com o seguinte conteúdo.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas-sharepath
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    parameters:
      volumeAs: sharepath
      # The format of the server field is <nas-server-address>:/<path>
      server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s"
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain

    Parâmetro

    Descrição

    mountOptions

    As opções de montagem para o NAS, incluindo a versão do protocolo NFS. Por padrão, os volumes são montados usando NFSv3. Você pode especificar uma versão diferente com uma opção como vers=4.0. Para informações sobre os protocolos NFS suportados por diferentes tipos de NAS, consulte Protocolos NFS.

    parameters.volumeAs

    O modo de provisionamento do volume. Defina como sharepath.

    parameters.server

    O destino de montagem do NAS e o subpath a ser montado, no formato <nas-server-address>:/<path>.

    • <nas-server-address>: O destino de montagem do sistema de arquivos NAS. Para mais informações, consulte Gerenciar destinos de montagem.

    • :/<path>: O subpath do NAS a ser montado. Se este parâmetro não for definido ou se o subpath especificado não existir, o diretório raiz será montado por padrão.

      • NAS de uso geral: O diretório raiz é /.

      • Extreme NAS: O diretório raiz é /share. Ao montar um subpath, o path deve começar com /share, como /share/data.

    provisioner

    O driver. Defina este parâmetro como nasplugin.csi.alibabacloud.com ao usar o plug-in CSI do Alibaba Cloud NAS.

    reclaimPolicy

    A política de recuperação para o PV. Para o modo sharepath, deve ser Retain.

  2. Crie a StorageClass.

    kubectl create -f alicloud-nas-sharepath.yaml

Console

  1. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Volumes > StorageClasses.

  2. Clique em Create, especifique um nome exclusivo para a StorageClass e selecione NAS como o PV Type.

    Parâmetro

    Descrição

    Select Mount Target

    O destino de montagem do sistema de arquivos NAS.

    Volume Mode

    O modo de provisionamento do volume. Neste exemplo, selecione Shared Directory, que habilita o modo sharepath.

    Mount Path

    O subdiretório do NAS a ser montado. Se este parâmetro não for especificado, o diretório raiz será montado por padrão.

    Se o diretório não existir no sistema de arquivos NAS, ele será criado automaticamente e depois montado.
    • NAS de uso geral: O diretório raiz é /.

    • Extreme NAS: O diretório raiz é /share. Ao montar um subdiretório, o path deve começar com /share, como /share/data.

    Reclaim policy

    Para o modo sharepath, deve ser Retain.

    Mount options

    As opções de montagem para o NAS, incluindo a versão do protocolo NFS. Por padrão, os volumes são montados usando NFSv3. Você pode especificar uma versão diferente com uma opção como vers=4.0. Para informações sobre os protocolos NFS suportados por diferentes tipos de NAS, consulte Protocolos NFS.

2. Criar um PVC

Um PersistentVolumeClaim (PVC) é uma solicitação de armazenamento de uma aplicação que aciona uma StorageClass associada para provisionar e vincular dinamicamente um PersistentVolume (PV) correspondente.

Para habilitar o compartilhamento de dados entre namespaces, você criará um PVC com o mesmo nome em dois namespaces diferentes. Embora os PVCs compartilhem um nome, eles são recursos distintos porque estão em namespaces diferentes. A StorageClass provisiona um PV separado para cada PVC, e ambos os PVs apontam para o mesmo diretório compartilhado no sistema de arquivos NAS.

kubectl

  1. Crie dois namespaces, ns1 e ns2.

    kubectl create ns ns1
    kubectl create ns ns2
  2. Crie um arquivo chamado pvc.yaml com o seguinte conteúdo para criar um PVC com o mesmo nome nos namespaces ns1 e ns2.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata: 
      name: nas-csi-pvc
      namespace: ns1
    spec:
      accessModes:
      - ReadWriteMany 
      storageClassName: alicloud-nas-sharepath
      resources: 
        requests:
          storage: 20Gi
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata: 
      name: nas-csi-pvc
      namespace: ns2
    spec:
      accessModes:
      - ReadWriteMany 
      storageClassName: alicloud-nas-sharepath
      resources: 
        requests:
          storage: 20Gi

    Parâmetro

    Descrição

    accessModes

    O modo de acesso. Valores válidos:

    • ReadWriteMany (padrão): O volume pode ser montado como leitura e escrita por vários nós.

    • ReadWriteOnce: O volume pode ser montado como leitura e escrita por um único nó.

    • ReadOnlyMany: O volume pode ser montado como somente leitura por vários nós.

    storageClassName

    O nome da StorageClass a ser usada.

    storage

    A capacidade necessária do volume de armazenamento. Por padrão, esta declaração atua como uma solicitação de recurso e não limita o espaço de armazenamento real disponível para o pod.

    O limite de capacidade de um sistema de arquivos NAS é determinado por suas especificações. Para mais informações, consulte NAS de uso geral e Extreme NAS.

    No entanto, quando allowVolumeExpansion na StorageClass está definido como true, este valor torna-se um limite rígido estritamente aplicado. O plug-in CSI define a cota de diretório do NAS com base nesta configuração para limitar a capacidade disponível do PV.

  3. Crie os PVCs.

    kubectl create -f pvc.yaml
  4. Verifique o status do PV para confirmar que os PVs foram criados automaticamente e vinculados aos PVCs.

    kubectl get pv

    A saída esperada é semelhante à seguinte. O status de ambos os PVs é Bound, e a coluna CLAIM mostra que cada PV está vinculado a um PVC em um namespace diferente (ns1/nas-csi-pvc e ns2/nas-csi-pvc).

    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS             VOLUMEATTRIBUTESCLASS   REASON   AGE
    nas-0b448885-6226-4d22-8a5b-d0768c******   20Gi       RWX            Retain           Bound    ns1/nas-csi-pvc       alicloud-nas-sharepath   <unset>                          74s
    nas-bcd21c93-8219-4a11-986b-fd934a******   20Gi       RWX            Retain           Bound    ns2/nas-csi-pvc       alicloud-nas-sharepath   <unset>                          74s

Console

  1. Crie namespaces.

    • Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Namespaces and Quotas.

    • Clique em Launch e siga as instruções na tela para criar os namespaces ns1 e ns2.

  2. No painel de navegação à esquerda da página de gerenciamento do cluster, escolha Storage > PVCs.

  3. No namespace ns1, crie uma solicitação de armazenamento.

    Na página Persistent Volume Claims, selecione ns1 na lista suspensa Namespace e siga as instruções na tela para criar o PVC.

    Parâmetro

    Descrição

    PVC Type

    Selecione NAS.

    Name

    O nome do PVC. O nome deve ser exclusivo dentro do namespace.

    Allocation Mode

    Selecione Use StorageClass.

    Existing Storage Class

    Clique em Select Storage Class e escolha a StorageClass que você criou.

    Capacity

    A capacidade necessária do volume de armazenamento. Por padrão, esta declaração atua como uma solicitação de recurso e não limita o espaço de armazenamento real disponível para o pod.

    O limite de capacidade de um sistema de arquivos NAS é determinado por suas especificações. Para mais informações, consulte NAS de uso geral e Extreme NAS.

    No entanto, quando allowVolumeExpansion na StorageClass está definido como true, este valor torna-se um limite rígido estritamente aplicado. O plug-in CSI define a cota de diretório do NAS com base nesta configuração para limitar a capacidade disponível do PV.

    Access Mode

    O modo de acesso. Valores válidos:

    • ReadWriteMany (padrão): O volume pode ser montado como leitura e escrita por vários nós.

    • ReadWriteOnce: O volume pode ser montado como leitura e escrita por um único nó.

    • ReadOnlyMany: O volume pode ser montado como somente leitura por vários nós.

  4. Siga a etapa anterior para criar outro PVC no namespace ns2.

    Após a criação, retorne à página Persistent Volume Claims. Nos namespaces ns1 e ns2, confirme que ambos os PVCs estão vinculados aos seus PVs criados automaticamente.

3. Criar uma aplicação e montar o NAS

Após a criação dos PVCs, você pode montar seus PVs vinculados nas suas aplicações. Nesta seção, você criará uma aplicação em cada um dos dois namespaces e montará o PVC correspondente. Essa configuração permite que ambas as aplicações compartilhem o subdiretório NAS definido na StorageClass.

kubectl

  1. Crie dois arquivos chamados nginx-ns1.yaml e nginx-ns2.yaml com o seguinte conteúdo.

    As configurações para ambas as aplicações são quase idênticas. Cada uma se vincula ao PVC em seu respectivo namespace.
    • nginx-ns1.yaml

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nas-test
        namespace: ns1   
      spec:
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              ports:
              - containerPort: 80
              volumeMounts:
                - name: nas-pvc
                  mountPath: "/data"
            volumes:
              - name: nas-pvc
                persistentVolumeClaim:
                  claimName: nas-csi-pvc
    • nginx-ns2.yaml

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nas-test
        namespace: ns2   
      spec:
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              ports:
              - containerPort: 80
              volumeMounts:
                - name: nas-pvc
                  mountPath: "/data"
            volumes:
              - name: nas-pvc
                persistentVolumeClaim:
                  claimName: nas-csi-pvc
  2. Crie os dois Deployments.

    kubectl create -f nginx-ns1.yaml -f nginx-ns2.yaml
  3. Verifique o status do Pod.

    kubectl get pod -A -l app=nginx

    Saída esperada:

    NAMESPACE   NAME                         READY   STATUS    RESTARTS   AGE
    ns1         nas-test-b75d5b6bc-*****     1/1     Running   0          2m19s
    ns2         nas-test-b75d5b6bc-*****     1/1     Running   0          2m11s
  4. Verifique a configuração detalhada de um Pod para confirmar a montagem do PVC.

    Substitua <namespace-name> e <pod-name> pelo namespace e nome do Pod reais.
    kubectl describe pod -n <namespace-name> <pod-name> | grep "ClaimName:"

    Na saída esperada, os dois Pods montam ns1/nas-csi-pvc e ns2/nas-csi-pvc respectivamente.

Console

  1. Na página Clusters do ACK, clique no nome do seu cluster. No painel de navegação à esquerda, clique em > Deployments.

  2. No namespace ns1, crie um Deployment e monte o PVC correspondente.

    1. Selecione Namespace na lista suspensa Namespace e clique em Create from Image.

    2. Siga as instruções na tela para criar a aplicação.

      Os principais parâmetros estão descritos abaixo. Mantenha os outros parâmetros com seus valores padrão. Para mais informações, consulte Criar um workload stateless (Deployment).

      Seção

      Parâmetro

      Descrição

      Basic Information

      Replicas:

      A contagem de réplicas do Deployment.

      Container

      Image

      O endereço da imagem usada para implantar a aplicação.

      Required Resources

      Os recursos de vCPU e memória necessários.

      Volumes

      Clique em Add PVC e configure os parâmetros.

      • Mount Source: Selecione o PVC que você criou.

      • Container Path: Insira o caminho dentro do contêiner onde o sistema de arquivos NAS será montado, como /data.

  3. Siga a etapa anterior para criar outro Deployment no namespace ns2 e montar o PVC correspondente.

    Retorne à página Deployments . Nos namespaces ns1 e ns2 , verifique o status de cada Deployment para confirmar que os Pods estão em execução e montaram os PVCs corretos.

Para verificar os resultados, consulte Verificar armazenamento compartilhado e persistente.

Método 3: Montar um volume no modo filesystem

O modo filesystem permite criar e gerenciar dinamicamente um sistema de arquivos NAS e um destino de montagem dedicados para uma aplicação. Ao contrário do modo sharepath, cada PV criado no modo filesystem corresponde a uma instância separada de sistema de arquivos NAS.

Cada PV do tipo filesystem corresponde a um sistema de arquivos NAS dedicado e um destino de montagem.
  • Por padrão, quando você exclui um PV do tipo filesystem, o sistema de arquivos NAS e o destino de montagem correspondentes são retidos. Para excluir automaticamente o sistema de arquivos NAS e o destino de montagem quando o PV for excluído, adicione os seguintes parâmetros à StorageClass:

    • reclaimPolicy: Delete

    • parameters.deleteVolume: "true"

  • Ao usar um cluster dedicado ACK, conceda as permissões necessárias ao csi-provisioner.

    Processo de autorização

    O uso de volumes NAS do tipo filesystem envolve a criação e exclusão dinâmica de sistemas de arquivos NAS e destinos de montagem. Portanto, o componente csi-provisioner no seu cluster dedicado ACK requer as permissões correspondentes.

    A seguir está o conjunto mínimo de permissões necessárias para a política do RAM.

    {
        "Action": [
            "nas:DescribeMountTargets",
            "nas:CreateMountTarget",
            "nas:DeleteFileSystem",
            "nas:DeleteMountTarget",
            "nas:CreateFileSystem"
        ],
        "Resource": [
            "*"
        ],
        "Effect": "Allow"
    }

    Você pode conceder as permissões usando um dos seguintes métodos:

    • Adicione as permissões NAS anteriores à política personalizada da função RAM mestre do seu cluster dedicado ACK. Para mais informações, consulte Modificar o conteúdo e a descrição de uma política personalizada. Na página de detalhes do cluster, clique na aba Cluster Resources, localize a Master RAM Role (como KubernetesMasterRole-xxx) e anexe a política a essa função.

    • Crie um usuário RAM, anexe a política RAM anterior e gere uma chave de acesso. Em seguida, configure a chave de acesso nas variáveis env para o csi-provisioner.

      env:
      - name: CSI_ENDPOINT
        value: unix://socketDir/csi.sock
      - name: ACCESS_KEY_ID
        value: ""
      - name: ACCESS_KEY_SECRET
        value: ""

1. Criar uma StorageClass

Uma StorageClass é o modelo de provisionamento para um volume dinâmico. Ela define a origem e o comportamento dos recursos de armazenamento.

  1. Crie um arquivo chamado alicloud-nas-fs.yaml com o seguinte conteúdo para definir uma StorageClass no modo filesystem:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas-fs
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    parameters:
      volumeAs: filesystem
      fileSystemType: standard
      storageType: Performance
      regionId: cn-beijing
      zoneId: cn-beijing-e
      vpcId: "vpc-2ze2fxn6popm8c2mzm****"
      vSwitchId: "vsw-2zwdg25a2b4y5juy****"
      accessGroupName: DEFAULT_VPC_GROUP_NAME
      deleteVolume: "false"
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain

    Parâmetro

    Descrição

    mountOptions

    As opções de montagem para o NAS, incluindo a versão do protocolo NFS. Por padrão, os volumes são montados usando NFSv3. Você pode especificar uma versão diferente com uma opção como vers=4.0. Para informações sobre os protocolos NFS suportados por diferentes tipos de NAS, consulte Protocolos NFS.

    parameters.volumeAs

    Defina o tipo de montagem como filesystem.

    parameters.fileSystemType

    O tipo do sistema de arquivos NAS. Valores válidos:

    • standard (padrão): NAS de uso geral.

    • extreme: Extreme NAS.

    parameters.storageType

    A classe de armazenamento do sistema de arquivos NAS.

    • Valores válidos para NAS de uso geral:

      • Performance (padrão): Performance

      • Capacity: Capacity

    • Valores válidos para Extreme NAS:

      • standard (padrão): Standard

      • advance: Advanced

    parameters.regionId

    A região do sistema de arquivos NAS. Deve ser a mesma região do cluster.

    parameters.zoneId

    A zona de disponibilidade do sistema de arquivos NAS. Na mesma VPC, o NAS suporta montagens entre zonas.

    parameters.vpcId

    A VPC para o destino de montagem do sistema de arquivos. Deve ser a mesma VPC do cluster.

    parameters.vSwitchId

    O ID do vSwitch para o destino de montagem do sistema de arquivos.

    parameters.accessGroupName

    O grupo de acesso do destino de montagem do sistema de arquivos NAS. O valor padrão é DEFAULT_VPC_GROUP_NAME.

    parameters.deleteVolume

    Especifica se o PV e seu sistema de arquivos NAS e destino de montagem correspondentes devem ser excluídos quando o PVC for excluído. Como o NAS é um sistema de arquivos compartilhado, você deve configurar tanto deleteVolume quanto reclaimPolicy para fins de segurança.

    provisioner

    O driver. Defina este parâmetro como nasplugin.csi.alibabacloud.com ao usar o plug-in CSI do Alibaba Cloud NAS.

    reclaimPolicy

    O PV, o sistema de arquivos NAS correspondente e o destino de montagem são excluídos junto com o PVC apenas se a política de recuperação do PV estiver definida como Delete e o parâmetro deleteVolume estiver definido como true.

  2. Execute o seguinte comando para criar a StorageClass.

    kubectl create -f alicloud-nas-fs.yaml

2. Criar um PVC

  1. Crie um arquivo chamado nas-pvc-fs.yaml com o seguinte conteúdo para solicitar recursos de armazenamento:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: nas-csi-pvc-fs
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: alicloud-nas-fs
      resources:
        requests:
          storage: 20Gi

    Os parâmetros são descritos a seguir:

    Parâmetro

    Descrição

    accessModes

    O modo de acesso. Valores válidos:

    • ReadWriteMany (padrão): O volume pode ser montado como leitura e escrita por vários nós.

    • ReadWriteOnce: O volume pode ser montado como leitura e escrita por um único nó.

    • ReadOnlyMany: O volume pode ser montado como somente leitura por vários nós.

    storage

    A capacidade do volume NAS a ser criado.

    A capacidade mínima para Extreme NAS é 100 GiB. Se Extreme NAS estiver definido na StorageClass, o valor de storage deve ser ≥ 100 GiB.

    storageClassName

    O nome da StorageClass que esta solicitação requer.

  2. Crie o PVC.

    kubectl create -f nas-pvc-fs.yaml

3. Criar aplicação e montar NAS

  1. Consulte o seguinte para criar nas-fs.yaml.

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

    kubectl create -f nas-fs.yaml
  3. Verifique o status do PVC.

    kubectl get pvc nas-csi-pvc-fs

    A seguinte saída mostra que o PVC foi vinculado com sucesso ao PV:

    NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      VOLUMEATTRIBUTESCLASS   AGE
    nas-csi-pvc-fs   Bound    nas-8338540d-34a1-4796-89cf-be2a7*******   20Gi       RWX            alicloud-nas-fs   <unset>                 13m
  4. Verifique o ID do sistema de arquivos NAS recém-criado nos detalhes do PV.

    Substitua nas-8338540d-34a1-4796-89cf-be2a7******* pelo nome real do PV.
    kubectl describe pv nas-8338540d-34a1-4796-89cf-be2a7******* | grep "fileSystemId"

    A saída mostra o ID do sistema de arquivos NAS recém-criado. Você pode visualizar este sistema de arquivos na página File System List no console do NAS.

Verificar armazenamento compartilhado e persistente

Após implantar a aplicação com sucesso, você pode verificar se o volume de armazenamento funciona conforme esperado. Esta seção usa o modo subpath para criar nas-test-1 e nas-test-2 como exemplo para verificação.

Armazenamento compartilhado

Armazenamento persistente

Para verificar o armazenamento compartilhado, crie um arquivo em um Pod e visualize-o em outro.

  1. Liste os Pods para obter seus nomes.

    kubectl get pod | grep nas-test

    Saída esperada:

    nas-test-1-b75d5b6bc-*****           1/1     Running   0          50s
    nas-test-2-b75d5b6bc-*****           1/1     Running   0          60s
  2. Crie um arquivo em um dos Pods.

    Tome o Pod chamado nas-test-1-b75d5b6bc-* como exemplo:

    kubectl exec nas-test-1-b75d5b6bc-***** -- touch /data/test.txt
  3. Verifique se o arquivo existe no outro Pod.

    Tome o Pod chamado nas-test-2-b75d5b6bc-* como exemplo.

    kubectl exec nas-test-2-b75d5b6bc-***** -- ls /data

    Saída esperada:

    test.txt

    A saída mostra o novo arquivo, confirmando que os dados podem ser compartilhados entre Pods.

Para verificar o armazenamento persistente, reinicie o Deployment e verifique se os dados ainda existem no sistema de arquivos do novo Pod.

  1. Reinicie o Deployment para acionar a recriação do Pod.

    kubectl rollout restart deploy nas-test-1
  2. Verifique os Pods e aguarde até que o status do novo Pod se torne Running.

    kubectl get pod | grep nas-test

    Saída esperada:

    nas-test-1-5bb845b795-*****           1/1     Running   0          115m
    nas-test-2-5b6bccb75d-*****           1/1     Running   0          103m
  3. Verifique se o arquivo criado anteriormente existe no novo Pod.

    Tome o Pod chamado nas-test-1-5bb845b795-* como exemplo.

    kubectl exec nas-test-1-5bb845b795-***** -- ls /data

    Saída esperada:

    test.txt

    A saída mostra o arquivo gravado anteriormente, confirmando que os dados são persistentes.

Para ambientes de produção

  • Segurança e proteção de dados

    • Use a política de recuperação Retain: Defina o reclaimPolicy da sua StorageClass como Retain. Isso evita perda de dados se um PVC for excluído acidentalmente.

    • Use grupos de permissões para controle de acesso: O NAS usa grupos de permissões para gerenciar o acesso à rede. Siga o princípio do menor privilégio: adicione apenas os endereços IP privados dos nós do cluster ou seus blocos CIDR de vSwitch ao grupo de permissões. Evite permissões excessivamente amplas, como 0.0.0.0/0.

  • Otimização de desempenho e custo

    • Selecione um tipo de NAS apropriado: Consulte Seleção de sistema de arquivos para escolher um tipo de NAS que atenda aos requisitos de IOPS e throughput da sua aplicação.

    • Otimize as opções de montagem (mountOptions): Ajuste os parâmetros de montagem NFS com base nas características da sua carga de trabalho. Por exemplo, usar versões de protocolo como vers=4.0 ou vers=4.1 pode melhorar o desempenho e os recursos de bloqueio de arquivos em alguns cenários. Para cargas de trabalho com E/S de arquivos em grande escala, teste diferentes valores de rsize e wsize para otimizar o throughput de leitura e escrita.

  • Operações e confiabilidade

    • Configure verificações de integridade: Configure uma sonda de atividade (liveness probe) para os pods da sua aplicação para verificar se o ponto de montagem está íntegro. Se um ponto de montagem deixar de responder, o ACK reinicia automaticamente o pod, acionando uma remontagem do volume de armazenamento.

    • Configure monitoramento e alertas: Use o monitoramento de armazenamento de contêineres para configurar alertas e detectar prontamente problemas de volume de armazenamento ou gargalos de desempenho.

Liberação de recursos

Para evitar cobranças inesperadas, libere os recursos associados na seguinte ordem quando o volume de armazenamento NAS não for mais necessário.

  1. Exclua o workload

    • Ação: Exclua todos os workloads (como Deployments e StatefulSets) que usam o volume de armazenamento NAS. Isso impede que os Pods da aplicação montem, leiam ou escrevam no volume.

    • Comando de exemplo: kubectl delete deployment <your-deployment-name>

  2. Exclua o PVC

    • Ação: Exclua o PVC associado ao workload. Após a exclusão do PVC, o comportamento do PV vinculado e do NAS de backend depende do reclaimPolicy definido na StorageClass correspondente.

      • Modo Subpath

        • Se reclaimPolicy for Retain: Após a exclusão do PVC, seu PV vinculado entra no estado Released. O objeto PV e o subdiretório e dados correspondentes no NAS de backend são retidos e devem ser excluídos manualmente.

        • Se reclaimPolicy for Delete: Após a exclusão do PVC, seu PV vinculado é excluído automaticamente. O tratamento do subdiretório NAS de backend depende do parâmetro archiveOnDelete:

          • Se archiveOnDelete for "true": Os dados de backend não são excluídos, mas são renomeados e arquivados como archived-{pvName}.{timestamp}.

          • Se archiveOnDelete for "false": O subdiretório correspondente do PV no NAS de backend e todos os seus dados são excluídos permanentemente. Proceda com cautela.

          Em um cluster ACK Serverless, devido a restrições de permissão, mesmo se reclaimPolicy: Delete estiver configurado, o diretório e os dados do NAS de backend não são excluídos ou arquivados. Apenas o objeto PV é excluído.
      • Modo Sharepath

        Este modo suporta apenas um reclaimPolicy de Retain. Após a exclusão do PVC, seu PV vinculado entra no estado Released. O objeto PV, o diretório compartilhado de backend e todos os dados são retidos.

      • Modo Filesystem

        • Se reclaimPolicy for Retain: Após a exclusão do PVC, seu PV vinculado entra no estado Released. O objeto PV, o sistema de arquivos NAS de backend criado dinamicamente e o ponto de montagem são todos retidos.

        • Se reclaimPolicy for Delete: Após a exclusão do PVC, seu PV vinculado é excluído automaticamente. O tratamento do sistema de arquivos NAS de backend depende do parâmetro deleteVolume:

          • Se deleteVolume for "false": O sistema de arquivos NAS de backend e o ponto de montagem são retidos e devem ser excluídos manualmente.

          • Se deleteVolume for "true": O sistema de arquivos NAS de backend e o ponto de montagem são excluídos automaticamente. Proceda com cautela.

    • Comando de exemplo: kubectl delete pvc <your-pvc-name>

  3. Exclua o PV

    • Ação: Você pode excluir um PV quando ele estiver no estado Available ou Released. Esta ação remove apenas a definição do PV do cluster Kubernetes, mas não exclui nenhum dado do sistema de arquivos NAS de backend.

    • Comando de exemplo: kubectl delete pv <your-pv-name>

  4. Exclua o sistema de arquivos NAS de backend (opcional)

    • Modos subpath e sharepath: Consulte Excluir um sistema de arquivos. Esta operação exclui permanentemente todos os dados no NAS, e os dados não podem ser recuperados. Proceda com cautela. Antes de executar esta operação, você deve confirmar que o NAS não possui dependências de negócios.

    • Modo filesystem: Se o sistema de arquivos NAS de backend não for excluído automaticamente quando você excluir um PVC, consulte Excluir um sistema de arquivos para localizar e excluir manualmente o sistema de arquivos correspondente.

Documentos relacionados