Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Use a statically provisioned cloud disk volume

Última atualização: Jun 27, 2026

Ao criar manualmente um PV e um PVC, você monta um disco em nuvem em um Pod como um volume com provisionamento estático. Esse método oferece armazenamento persistente, sendo ideal para cargas de trabalho que exigem alta performance de I/O de disco e baixa latência, sem compartilhamento de dados.

Os discos são adequados para os seguintes cenários:

  • Aplicações que demandam alto throughput de I/O de disco sem compartilhamento de dados, como MySQL e Redis.

  • Escrita de logs em alta velocidade.

  • Persistência de dados independente do ciclo de vida do pod.

Fluxo de trabalho

image
  1. Crie um PV
    Registre um disco em nuvem existente no cluster especificando seu ID, capacidade, modo de acesso e afinidade de zona. Isso garante que o Pod seja agendado no nó correto.

  2. Crie um PVC
    Sua aplicação solicita recursos de armazenamento por meio de um PVC, que se vincula a um PV compatível.

  3. Montar o PVC na aplicação
    Monte o PVC vinculado no Pod da aplicação, tornando-o disponível como um diretório persistente dentro do contêiner.

Pré-requisitos

  • Requisitos dos componentes CSI: Os componentes csi-plugin e csi-provisioner devem estar instalados.

    Os componentes CSI são instalados por padrão. Verifique a página Add-ons para garantir que eles ainda estejam instalados. Recomendamos atualizar os componentes CSI para a versão mais recente.
  • O disco em nuvem deve estar no estado Available e atender aos seguintes requisitos:

    • Limitações de zona de disponibilidade: Exceto pelos discos em nuvem ESSD com redundância de zona, outros tipos de disco só podem ser anexados a pods na mesma zona de disponibilidade.

    • Limitações de família de tipos de instância: Alguns tipos de disco em nuvem só podem ser anexados a famílias de tipos de instância específicas.

  • Limitações de nó virtual: Para usar um disco em nuvem em um nó virtual, seu cluster e o kube-scheduler devem atender aos seguintes requisitos de versão.

    Requisitos de versão

    Versão do cluster

    Versão do kube-scheduler

    1,28 ou posterior

    6.9.3 ou posterior

    1,26

    6.8.7

    1,24

    6.4.7

    1,22

    6.4.5

  • Limitações de nó Lingjun: Para usar discos em nuvem em nós Lingjun, os seguintes requisitos devem ser atendidos.

    Detalhes

Etapa 1: Crie um PV

Crie um PV para declarar um disco em nuvem existente como um recurso de armazenamento disponível no cluster.

kubectl

  1. Crie um arquivo chamado disk-pv.yaml com o seguinte conteúdo.

    Obtenha o ID do disco, o tamanho do disco, o ID da zona e a categoria do disco, e substitua as variáveis no arquivo YAML pelos valores reais.
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      # The ID of your existing cloud disk, such as d-uf628m33r5rsbi******
      name: "<YOUR-DISK-ID>"
      annotations:
        # Recommended. Ensures the Pod is scheduled to a node that supports this disk type.
        # <YOUR-DISK-CATEGORY> is the category of your existing cloud disk. Supported values include cloud_essd_entry, cloud_auto, cloud_essd, cloud_ssd, cloud_efficiency, and cloud_regional_disk_auto.
        csi.alibabacloud.com/volume-topology: '{"nodeSelectorTerms":[{"matchExpressions":[{"key":"node.csi.alibabacloud.com/disktype.<YOUR-DISK-CATEGORY>","operator":"In","values":["available"]}]}]}'
    spec:
      capacity:
        # The size of your existing cloud disk, such as 20Gi.
        storage: "<YOUR-DISK-SIZE>"
      claimRef:
        apiVersion: v1
        kind: PersistentVolumeClaim
        namespace: default
        name: disk-pvc
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: diskplugin.csi.alibabacloud.com
        # The ID of your existing cloud disk, such as d-uf628m33r5rsbi******
        volumeHandle: "<YOUR-DISK-ID>"
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: topology.diskplugin.csi.alibabacloud.com/zone
              operator: In
              values:
              # The zone where the cloud disk is located, such as cn-shanghai-f.
              - "<YOUR-DISK-ZONE-ID>"
      storageClassName: alicloud-disk-topology-alltype
      volumeMode: Filesystem

    A tabela a seguir descreve os principais parâmetros.

    Parâmetro

    Descrição

    csi.alibabacloud.com/volume-topology

    Esta anotação define a afinidade de nó para o disco em nuvem, garantindo que os Pods que utilizam este disco sejam agendados em nós compatíveis com o tipo de disco correspondente. Isso evita falhas de montagem devido à incompatibilidade de nós.

    Para garantir um agendamento preciso, recomendamos especificar a categoria do disco. Os tipos suportados são:

    • Disco ESSD Entry: cloud_essd_entry

    • Disco ESSD AutoPL: cloud_auto

    • Disco ESSD: cloud_essd

    • SSD Padrão: cloud_ssd

    • Disco Ultra: cloud_efficiency

    • Disco com redundância de zona: cloud_regional_disk_auto (requer ajustes no parâmetro nodeAffinity)

    claimRef

    Especifica o PVC que pode se vincular a este PV. Para permitir que qualquer PVC se vincule a este PV, remova este parâmetro.

    accessModes

    O modo de acesso. O modo suportado depende se o recurso multi-attach para discos em nuvem está ativado.

    • Multi-attach desativado: Apenas ReadWriteOnce (RWO) é suportado. O disco em nuvem pode ser montado em um único nó no modo leitura/escrita.

    • Multi-attach ativado:

      • Como sistema de arquivos padrão (formatado): Suporta ReadWriteOnce (RWO) e ReadOnlyMany (ROX).

        Para evitar corrupção de dados devido a escritas simultâneas em sistemas de arquivos como ext4 em vários nós, o modo ReadWriteMany (RWX) não é suportado.
      • Como dispositivo de bloco bruto (não formatado): Suporta ReadWriteOnce (RWO), ReadOnlyMany (ROX) e ReadWriteMany (RWX).

    persistentVolumeReclaimPolicy

    A política de recuperação do PV, que determina o que acontece com o PV e o disco em nuvem subjacente quando o PVC vinculado é excluído.

    • Delete: Quando o PVC é excluído, tanto o PV quanto o disco em nuvem são excluídos. Use esta configuração com cautela.

      Para evitar perda acidental de dados, você pode criar uma política de snapshot automático para fazer backup do disco em nuvem antes da exclusão.
    • Retain: Quando o PVC é excluído, o PV e o disco em nuvem não são excluídos. Você deve liberá-los manualmente.

    driver

    Defina como diskplugin.csi.alibabacloud.com ao usar discos da Alibaba Cloud.

    nodeAffinity

    Configurações de afinidade de nó. Exceto pelos discos ESSD com redundância de zona, outros tipos de disco em nuvem só podem ser anexados a Pods dentro da mesma zona. Esta configuração garante que os Pods sejam agendados em nós ECS na mesma zona do disco em nuvem.

    Para discos com redundância de zona, altere a configuração para o seguinte para permitir que o disco seja montado em qualquer zona dentro da região.

    Nesta configuração, <YOUR-DISK-REGION-ID> é a região onde o disco em nuvem está localizado, como cn-shanghai.
    nodeAffinity:
          required:
            nodeSelectorTerms:
            - matchExpressions:
              - key: topology.kubernetes.io/region
                operator: In
                values:
                - "<YOUR-DISK-REGION-ID>"

    storageClassName

    Esta configuração não tem efeito em volumes com provisionamento estático, e você não precisa criar uma StorageClass correspondente. No entanto, você deve garantir que o valor desta configuração seja o mesmo tanto no PV quanto no PVC.

  2. Crie o PV.

    kubectl create -f disk-pv.yaml
  3. Verifique o status do PV e certifique-se de que ele esteja Available.

    kubectl get pv

    Saída esperada:

    NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM              STORAGECLASS                             VOLUMEATTRIBUTESCLASS   REASON   AGE
    d-uf628m33r5rsbi******   20Gi       RWO            Retain           Available   default/disk-pvc   alicloud-disk-topology-alltype           <unset>                          1m36s

Console

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

  2. Na página Persistent Volumes, clique em Create, defina PV Type como Cloud Disk e configure os parâmetros do PV conforme solicitado.

    Parâmetro

    Descrição

    Access Mode

    Apenas ReadWriteOnce é suportado.

    Disk ID:

    Clique em Select Disk e selecione um disco em nuvem não montado na mesma região e zona do nó.

    File System Type:

    Selecione o tipo de sistema de arquivos para armazenar dados no disco em nuvem. Os tipos de File System Type: suportados incluem ext4, ext3, xfs e vfat.

Etapa 2: Crie um PVC

Crie um PVC para vincular ao PV criado na etapa anterior.

kubectl

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

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: disk-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          # The requested storage capacity, which must match the PV capacity.
          storage: "<YOUR-DISK-SIZE>"
      # Must match the storageClassName defined in the PV.
      storageClassName: alicloud-disk-topology-alltype
      # Specify the PV to bind to.
      volumeName: "<YOUR-DISK-ID>"

    A tabela a seguir descreve os principais parâmetros.

    Parâmetro

    Descrição

    accessModes

    O modo de acesso. Deve ser consistente com a configuração do PV.

    storage

    A capacidade de armazenamento alocada ao Pod. Deve ser consistente com a capacidade do PV.

    storageClassName

    Esta configuração não tem efeito em volumes com provisionamento estático, e você não precisa criar uma StorageClass correspondente. No entanto, você deve garantir que o valor desta configuração seja o mesmo tanto no PV quanto no PVC.

    volumeName

    Especifica o PV ao qual se vincular. Para permitir que o PVC se vincule a qualquer PV correspondente, remova este parâmetro.

  2. Crie o PVC.

    kubectl create -f disk-pvc.yaml
  3. Verifique o status do PVC e certifique-se de que ele esteja Bound.

    kubectl get pvc

    Saída esperada, indicando que o PVC está vinculado ao PV do disco em nuvem:

    NAME                       STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                     VOLUMEATTRIBUTESCLASS   AGE
    disk-pvc                   Bound    d-bp1ff1mn65jk8s******                     20Gi       RWO            alicloud-disk-topology-alltype   <unset>                 6s

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, defina PVC Type como Disk e crie um PVC conforme solicitado.

    Parâmetro

    Descrição

    Allocation Mode

    Selecione Existing Volumes.

    Existing Volumes

    Selecione o PV criado anteriormente.

    Capacity

    A capacidade de armazenamento alocada ao Pod, que não pode exceder a capacidade do disco em nuvem.

Etapa 3: Crie uma aplicação e monte o disco em nuvem

Crie uma carga de trabalho e utilize o disco em nuvem montando o PVC.

Importante

Um Disco em Nuvem fornece armazenamento não compartilhado e, a menos que o multi-attach esteja ativado, pode ser montado em apenas um Pod por vez. Compartilhar um PVC em um Deployment com múltiplas réplicas pode impedir que novos Pods iniciem se o Disco em Nuvem já estiver em uso por outro Pod.

Se você ainda precisar usar um Disco em Nuvem com um Deployment, considere usar um Disco em Nuvem como volume efêmero. Para ativar o multi-attach, consulte Usar Discos em Nuvem baseados em NVMe com multi-attach e reserva.

kubectl

  1. Crie um arquivo chamado disk-test.yaml com o seguinte conteúdo.

    O exemplo a seguir cria um StatefulSet com uma réplica. O Pod solicita recursos de armazenamento através de um PVC chamado disk-pvc e monta o volume no caminho /data .
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: disk-test
    spec:
      replicas: 1
      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: pvc-disk
              mountPath: /data
          volumes:
            - name: pvc-disk
              persistentVolumeClaim:
                claimName: disk-pvc
    Importante
    • Ao configurar securityContext.fsgroup, o kubelet altera recursivamente as permissões de arquivo (chmod/chown) ao montar um volume. Isso pode aumentar significativamente o tempo de montagem para volumes com muitos arquivos.

      Para clusters da versão 1,20 ou posterior, recomendamos definir fsGroupChangePolicy como OnRootMismatch. Isso otimiza o desempenho da montagem realizando a alteração recursiva de permissões apenas quando o volume é montado pela primeira vez e as permissões do diretório raiz não correspondem. Se o desempenho continuar sendo um problema ou se você precisar de um controle de permissão mais granular, use um initContainer para gerenciar permissões antes que o contêiner da aplicação inicie.

    • Quando um Pod é recriado, ele remonta o disco em nuvem original. Se outras restrições impedirem que o Pod seja agendado na zona original, ele permanecerá no estado Pending porque não conseguirá montar o disco em nuvem.

  2. Crie o StatefulSet e monte o disco em nuvem.

    kubectl create -f disk-test.yaml
  3. Verifique o status do Pod e certifique-se de que ele esteja Running.

    kubectl get pod -l app=nginx

    Saída esperada:

    NAME          READY   STATUS    RESTARTS   AGE
    disk-test-0   1/1     Running   0          14s
  4. Verifique o caminho de montagem para confirmar que o disco em nuvem está montado.

    kubectl exec disk-test-0 -- df -h /data

    Saída esperada:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vdb         20G   24K   20G   1% /data

Console

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

  2. Na página StatefulSets, clique em Create from Image.

  3. Na página StatefulSets, clique em Create from Image e siga as instruções na página para configurar os parâmetros do StatefulSet.

    A tabela a seguir descreve os principais itens de configuração. Para instruções detalhadas de configuração, consulte Criar um StatefulSet.

    Página de configuração

    Parâmetro

    Descrição

    Basic Information

    Replicas:

    Configure o número de réplicas para o StatefulSet.

    Container

    Image Name

    Insira o endereço da imagem usada para implantar a aplicação, como anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6.

    Required Resources

    Defina os recursos necessários de vCPU, memória e armazenamento efêmero.

    Neste exemplo, a CPU está definida como 0,25 Core e a memória como 512 MiB.

    Volume

    Clique em Add PVC e configure os parâmetros.

    • Mount Source: Selecione o PVC criado anteriormente.

    • Container Path: Insira o caminho no contêiner onde o disco em nuvem será montado, como /data.

  4. Verifique o status da implantação da aplicação.

    1. Na página StatefulSets, clique em no nome da aplicação.

    2. Na aba Pods, certifique-se de que o Pod esteja no estado Running.

Verificar a persistência de dados

Siga o processo "gravar dados > excluir o Pod > verificar dados" para confirmar que os dados armazenados no disco em nuvem persistem após a recriação do Pod.

  1. Grave dados de teste no Pod.

    1. Verifique o caminho de montagem para visualizar os dados no disco em nuvem.

      kubectl exec disk-test-0 -- ls /data

      Saída esperada:

      lost+found
    2. Grave dados de teste no Pod.

      Tome o Pod disk-test-0 como exemplo. Crie um arquivo de teste no diretório /data, que é o caminho de montagem do disco em nuvem.

      kubectl exec disk-test-0 -- touch /data/test
  2. Simule uma falha de Pod excluindo o Pod.

    kubectl delete pod disk-test-0

    Execute o comando kubectl get pod -l app=nginx novamente. Um Pod com o mesmo nome é criado automaticamente.

  3. Verifique os dados no novo Pod.

    Verifique novamente o diretório /data no novo Pod disk-test-0.

    kubectl exec disk-test-0 -- ls /data

    Na saída esperada, o arquivo de teste criado anteriormente ainda existe, indicando que os dados persistem mesmo após o Pod ser excluído e recriado.

    lost+found  
    test

Considerações de produção

  • Alta disponibilidade

    • Política de agendamento de Pods

      Configure corretamente nodeAffinity e csi.alibabacloud.com/volume-topology no PV para garantir que o Pod possa ser agendado com sucesso e que o disco em nuvem possa ser remontado após a recriação do Pod.

    • Seleção de disco em nuvem

      Avalie fatores como desempenho, faturamento, zonas de disponibilidade e famílias de tipos de instância para garantir que seus pods sejam agendados em nós compatíveis.

      Ao selecionar um tipo de disco em nuvem, observe que os discos SSD e Ultra estão sendo descontinuados. Recomendamos usar discos ESSD PL0 ou ESSD Entry para substituir os discos Ultra, e discos ESSD AutoPL para substituir os discos SSD.

    • Recuperação de desastres entre zonas

      • Recuperação de desastres no nível da aplicação: Para cargas de trabalho críticas, como bancos de dados, implante instâncias da aplicação em várias zonas de disponibilidade e use o mecanismo nativo de sincronização de dados da aplicação para alta disponibilidade.

      • Recuperação de desastres no nível de armazenamento: Escolha um tipo de disco em nuvem que suporte recuperação de desastres multi-AZ. Este recurso grava dados sincronizadamente em diferentes zonas de disponibilidade dentro da mesma região, permitindo failover entre zonas. Para mais informações, consulte Usar Discos ESSD com Redundância Co-localizada.

  • Segurança de dados

  • Otimização de desempenho e custo

Limpar recursos

Para evitar cobranças inesperadas e garantir a segurança dos dados, siga este processo para liberar recursos não utilizados.

  1. Excluir a carga de trabalho

    • Ação: Exclua todas as aplicações que usam o PVC relevante, como Deployments e StatefulSets. Esta ação interrompe os Pods em execução e desmonta os volumes.

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

  2. Excluir o PVC

    • Ação: Exclua o PVC associado à aplicação. Após a exclusão, o que acontece com o PV vinculado depende de sua persistentVolumeReclaimPolicy.

    • Detalhes da política de recuperação:

      • Retain: Após a exclusão do PVC, o status do PV vinculado muda para Released, mas o objeto PV e o disco em nuvem de backend são retidos. Se você confirmar que o disco em nuvem e todos os seus dados não são mais necessários, consulte Liberar um disco em nuvem para excluí-lo. Esta ação é irreversível, portanto, proceda com cautela.

      • Delete: Após a exclusão do PVC, tanto o objeto PV quanto o disco em nuvem de backend são excluídos. Os dados no disco em nuvem serão perdidos permanentemente e não poderão ser recuperados. Use esta política com cautela.

        Para evitar perda acidental de dados, você pode criar uma política de snapshot automático para fazer backup do disco em nuvem antes da exclusão.
    • Comando de exemplo: kubectl delete pvc <your-pvc-name>

  3. Excluir o objeto PV: Esta ação remove apenas a definição do recurso do cluster e não exclui o disco em nuvem de backend.

    • Ação: Exclua manualmente o PV que está no estado Released.

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

Documentos relacionados