Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Use a statically provisioned disk volume

Última atualização: Jun 27, 2026

Monte um disco em nuvem existente em um pod como um PersistentVolume (PV) para obter armazenamento persistente de alto throughput e baixa latência no cluster ACK.

No provisionamento estático, você cria o PV e o PersistentVolumeClaim (PVC) manualmente antes de implantar a carga de trabalho. Isso oferece controle total sobre o disco utilizado e mantém o disco independente do ciclo de vida do pod.

Casos de uso

Os volumes de disco estáticos são adequados quando:

  • A aplicação exige alta E/S de disco — por exemplo, ao executar MySQL ou Redis.

  • É necessário gravar logs em alta velocidade.

  • Você tem um disco existente e deseja reutilizá-lo entre reinicializações de pods.

Para mais informações sobre volumes de armazenamento em bloco, consulte Volumes de armazenamento em bloco.

Pré-requisitos

Antes de começar, certifique-se de ter:

  • O plugin Container Storage Interface (CSI) instalado no cluster. Verifique o status dos componentes csi-plugin e csi-provisioner na página Add-ons, na aba Storage. Para atualizar o plugin CSI e usar recursos específicos, consulte Atualizar o plugin CSI. Se o cluster ainda usa FlexVolume, migre para o plugin CSI primeiro — o FlexVolume foi descontinuado.

  • Um disco em nuvem existente que atenda aos seguintes requisitos:

    • Método de faturamento: pagamento conforme o uso

    • Status: Available

    • Mesma zona do nó ECS onde o pod será executado

    • Tipo de disco compatível com o tipo de instância ECS — consulte Famílias de instâncias para detalhes de compatibilidade

Importante

Não é possível montar discos entre zonas diferentes. Se o tipo de disco for incompatível com o tipo de instância do nó, a montagem falhará.

Observações de uso

  • Um disco por pod simultaneamente. Discos são armazenamentos não compartilhados. A menos que o multi-attach esteja ativado, um único disco só pode ser montado em um pod por vez. Consulte Usar os recursos de multi-attach e reserva de discos NVMe.

  • Restrição de zona. Um disco só pode ser montado em um pod na mesma zona. A montagem entre zonas não é suportada.

  • Comportamento de reconstrução de pod. Quando um pod é reconstruído, o disco original é remontado. Caso o pod não possa ser agendado na zona original devido a outras restrições, ele permanecerá no estado Pending.

  • Use StatefulSets ou pods individuais, não Deployments. Com o multi-attach desativado, um disco pode ser montado em apenas um pod. Se for indispensável montar um disco em um Deployment, defina o número de réplicas como 1. Mesmo assim, não há garantia quanto à prioridade de montagem e desmontagem, e a estratégia de atualização contínua pode impedir que o novo pod monte o disco durante reinicializações. Portanto, não recomendamos a montagem de discos em Deployments.

  • securityContext.fsgroup aumenta o tempo de montagem. Ao configurar securityContext.fsgroup, o kubelet executa chmod e chown após a montagem, o que adiciona sobrecarga proporcional ao número de arquivos. Para Kubernetes 1.20 e versões posteriores, defina fsGroupChangePolicy: OnRootMismatch para aplicar alterações de propriedade apenas na primeira inicialização do contêiner. Para um controle mais refinado, use um contêiner de inicialização para gerenciar permissões.

Montar um volume de disco provisionado estaticamente usando kubectl

Etapa 1: Criar um PV

Função: administrador do cluster

  1. Conecte-se ao cluster. Use o kubectl ou o CloudShell e Workbench para estabelecer a conexão.

  2. Crie um arquivo chamado disk-pv.yaml com o conteúdo abaixo e substitua os espaços reservados pelos detalhes do seu disco.

    Espaço reservado

    Descrição

    Exemplo

    <YOUR-DISK-ID>

    ID do disco existente

    d-uf628m33r5rsbi******

    <YOUR-DISK-SIZE>

    Capacidade do disco

    20Gi

    <YOUR-DISK-ZONE-ID>

    Zona onde o disco está localizado

    cn-shanghai-f

    <YOUR-DISK-CATEGORY>

    Valor do tipo de disco (veja tabela abaixo)

    cloud_essd

    Valores de tipo de disco para &lt;YOUR-DISK-CATEGORY&gt;:

    Tipo de disco

    Valor

    Disco ESSD Entry

    cloud_essd_entry

    Disco ESSD AutoPL

    cloud_auto

    ESSD

    cloud_essd

    SSD padrão

    cloud_ssd

    Disco Ultra

    cloud_efficiency

    Disco com redundância de zona

    cloud_regional_disk_auto (requer nodeAffinity diferente — veja a tabela de parâmetros abaixo)

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: "<YOUR-DISK-ID>"
      annotations:
        csi.alibabacloud.com/volume-topology: '{"nodeSelectorTerms":[{"matchExpressions":[{"key":"node.csi.alibabacloud.com/disktype.<YOUR-DISK-CATEGORY>","operator":"In","values":["available"]}]}]}'
    spec:
      capacity:
        storage: "<YOUR-DISK-SIZE>"
      claimRef:
        apiVersion: v1
        kind: PersistentVolumeClaim
        namespace: default
        name: disk-pvc
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: diskplugin.csi.alibabacloud.com
        volumeHandle: "<YOUR-DISK-ID>"
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: topology.diskplugin.csi.alibabacloud.com/zone
              operator: In
              values:
              - "<YOUR-DISK-ZONE-ID>"
      storageClassName: alicloud-disk-topology-alltype
      volumeMode: Filesystem

    Parâmetros principais:

    Parâmetro

    Obrigatório

    Padrão

    Descrição

    csi.alibabacloud.com/volume-topology

    Recomendado

    Nenhum

    Restringe o agendamento de pods a nós que suportam o tipo de disco especificado. Defina <YOUR-DISK-CATEGORY> para evitar falhas de agendamento causadas por incompatibilidade entre disco e tipo de instância.

    claimRef

    Opcional

    Nenhum

    Vincula este PV a um PVC específico. Remova este bloco para permitir que qualquer PVC compatível se vincule a este PV.

    accessModes

    Obrigatório

    —

    Deve ser ReadWriteOnce — o volume pode ser montado como leitura e escrita por um único pod.

    persistentVolumeReclaimPolicy

    Obrigatório

    Retain

    Retain: o PV e o disco são mantidos quando o PVC é excluído; limpe-os manualmente. Delete: o PV e o disco são excluídos quando o PVC é excluído.

    driver

    Obrigatório

    —

    Sempre diskplugin.csi.alibabacloud.com para volumes de disco da Alibaba Cloud.

    nodeAffinity

    Obrigatório

    —

    Restringe o agendamento do pod à mesma zona do disco. Para discos com redundância de zona, substitua este bloco por uma afinidade no nível de região, permitindo que o disco seja montado em qualquer zona dentro da região: topology.kubernetes.io/region: <YOUR-DISK-REGION-ID> (por exemplo, cn-shanghai).

    storageClassName

    Obrigatório

    —

    Deve corresponder exatamente ao storageClassName no PVC. O valor alicloud-disk-topology-alltype é usado aqui — não é necessário criar esta StorageClass antecipadamente para provisionamento estático.

    Importante

    O storageClassName deve ser idêntico tanto no PV quanto no PVC. Uma divergência faz com que o PVC permaneça não vinculado ou se vincule a um PV diferente. Se o cluster tiver uma StorageClass padrão, defina storageClassName explicitamente no PV e no PVC para evitar que o PVC se vincule a um volume provisionado dinamicamente em vez do PV desejado.

  3. Crie o PV.

    kubectl create -f disk-pv.yaml
  4. Verifique se o PV está no estado 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   disk           <unset>                          1m36s

Etapa 2: Criar um PVC

Função: desenvolvedor

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

    Parâmetro

    Obrigatório

    Padrão

    Descrição

    accessModes

    Obrigatório

    —

    Deve corresponder ao accessModes do PV. Apenas ReadWriteOnce é suportado.

    storage

    Obrigatório

    —

    Capacidade de armazenamento a ser solicitada. Não pode exceder a capacidade real do disco.

    storageClassName

    Obrigatório

    —

    Deve corresponder exatamente ao storageClassName do PV — alicloud-disk-topology-alltype neste exemplo.

    volumeName

    Recomendado

    Nenhum

    Vincula este PVC a um PV específico pelo nome. Remova este campo para permitir que o PVC se vincule a qualquer PV compatível.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: disk-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: "<YOUR-DISK-SIZE>"
      storageClassName: alicloud-disk-topology-alltype
      volumeName: "<YOUR-DISK-ID>"
  2. Crie o PVC.

    kubectl create -f disk-pvc.yaml
  3. Verifique se o PVC está vinculado ao PV.

    kubectl get pvc

    Saída esperada mostrando o status Bound:

    NAME       STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    disk-pvc   Bound    d-uf628m33r5rsbi******   20Gi       RWO            disk           <unset>                 64s

Etapa 3: Implantar um StatefulSet e montar o disco

Função: desenvolvedor

  1. Crie um arquivo chamado disk-test.yaml com o conteúdo a seguir. Este comando cria um StatefulSet com um pod que monta o PVC disk-pvc em /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
  2. Crie o StatefulSet.

    kubectl create -f disk-test.yaml
  3. Confirme se o pod está em execução.

    kubectl get pod -l app=nginx

    Saída esperada:

    NAME          READY   STATUS    RESTARTS   AGE
    disk-test-0   1/1     Running   0          14s
  4. Verifique se o disco está montado em /data.

    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

Montar um volume de disco provisionado estaticamente no console

Etapa 1: Criar um PV

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

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

  3. Na página Persistent Volumes, clique em Create.

  4. Defina os parâmetros e clique em Create. Após a criação, o PV aparece na página Persistent Volumes.

    Parâmetro

    Obrigatório

    Descrição

    Exemplo

    PV type

    Obrigatório

    Selecione Cloud Disk.

    Cloud Disk

    Access mode

    Obrigatório

    Apenas ReadWriteOnce é suportado.

    ReadWriteOnce

    Disk ID

    Obrigatório

    Clique em Select Disk e selecione o disco a ser montado. O disco deve estar na mesma região e zona do nó.

    d-uf628m33r5rsbi******

    File system type

    Opcional

    Sistema de arquivos usado para formatar o disco. Suportados: ext4, ext3, xfs, vfat.

    ext4 (padrão)

Etapa 2: Criar um PVC

  1. No painel de navegação à esquerda, escolha Volumes > Persistent Volume Claims.

  2. Na página Persistent Volume Claims, clique em Create.

  3. Defina os parâmetros e clique em OK. Após a criação, o PVC aparece na página Persistent Volume Claims com o status Bound.

    Parâmetro

    Obrigatório

    Descrição

    Exemplo

    PVC type

    Obrigatório

    Selecione Cloud Disk.

    Cloud Disk

    Name

    Obrigatório

    Nome do PVC. Siga os requisitos de formato exibidos no console.

    disk-pvc

    Allocation mode

    Obrigatório

    Selecione Existing Volumes.

    Existing Volumes

    Existing volumes

    Obrigatório

    Selecione o PV criado na etapa 1.

    d-uf690053kttkprgx****, 20Gi

    Capacity

    Obrigatório

    Armazenamento a ser alocado. Não pode exceder a capacidade do disco.

    20Gi

Etapa 3: Implantar um StatefulSet e montar o disco

  1. No painel de navegação à esquerda, escolha Workloads > StatefulSets.

  2. No canto superior direito, clique em Create from Image.

  3. Defina os parâmetros principais listados abaixo e clique em Create from Image. Para todos os outros parâmetros, consulte Criar um StatefulSet.

    Página de configuração

    Parâmetro

    Obrigatório

    Descrição

    Exemplo

    Basic information

    Name

    Obrigatório

    Nome do StatefulSet. Siga os requisitos de formato exibidos no console.

    disk-test

    Basic information

    Replicas

    Obrigatório

    Número de pods. Defina como 1 para volumes de disco sem multi-attach.

    1

    Container

    Image name

    Obrigatório

    Endereço da imagem do contêiner.

    anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

    Container

    Required resources

    Opcional

    vCPU, memória e armazenamento efêmero para o contêiner.

    CPU: 0,25 Core; Memória: 512 MiB

    Volume

    Add PVC

    Obrigatório

    Clique em Add PVC, defina Mount Source como o PVC da etapa 2 e configure Container Path para o diretório de montagem.

    Mount Source: disk-pvc; Container Path: /data

  4. Após a implantação, clique em o nome do StatefulSet e acesse a aba Pods para confirmar se o pod está no estado Running.

Verificar a persistência de dados

Quando um pod no StatefulSet é excluído, o Kubernetes cria um pod substituto e remonta o disco original. Os dados no disco são preservados.

  1. Verifique o conteúdo do diretório montado.

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

    Saída esperada:

    lost+found
  2. Grave um arquivo de teste no disco.

    kubectl exec disk-test-0 -- touch /data/test
  3. Exclua o pod. O controlador do StatefulSet cria automaticamente um substituto.

    kubectl delete pod disk-test-0
  4. Aguarde o início do pod substituto e verifique seu status.

    kubectl get pod -l app=nginx

    Saída esperada — o novo pod tem o mesmo nome porque os StatefulSets preservam a identidade do pod:

    NAME          READY   STATUS    RESTARTS   AGE
    disk-test-0   1/1     Running   0          27s
  5. Confirme se os dados sobreviveram à exclusão do pod.

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

    Saída esperada — o arquivo test ainda está presente:

    lost+found
    test

Próximos passos