Monte um volume de disco dinâmico em uma aplicação e verifique a persistência dos dados.
Contexto
Discos são produtos de armazenamento em nível de bloco que utilizam mecanismo distribuído de múltiplas réplicas para oferecer baixa latência, alto desempenho, durabilidade e confiabilidade. São ideais para dados não compartilhados com requisitos exigentes de I/O e latência. Para mais informações, consulte Storage overview.
O ACS suporta apenas montagem dinâmica de volumes de disco; a montagem estática não é suportada.
Pré-requisitos
O componente managed-csiprovisioner deve estar instalado no cluster ACS.
Acesse a página de gerenciamento do cluster ACS no console ACS. No painel de navegação à esquerda, escolha . Na aba Storage, verifique se o managed-csiprovisioner está instalado.
Limitações
O disco é um armazenamento não compartilhado e pode ser montado em apenas um Pod.
A montagem do disco só é possível em Pods na mesma zona de disponibilidade.
Observações de uso
-
Recomendamos montar o disco em um StatefulSet ou em um Pod independente, evitando seu uso em Deployments.
NotaComo um disco pode ser montado em apenas um Pod, não é possível configurar volumes independentes para cada Pod em um Deployment. Além disso, a estratégia de atualização do Deployment pode impedir que um novo Pod monte o disco durante uma reinicialização.
-
Discos criados dinamicamente são cobrados com base no modelo de pagamento conforme o uso.
Para entender o faturamento de discos, consulte Block storage billing.
Para preços de discos, consulte Block Storage Pricing.
-
Se você configurar
securityContext.fsgroupno arquivo YAML da aplicação, o ACS executará operaçõeschmodechownapós a conclusão da montagem, aumentando o tempo total.NotaQuando
securityContext.fsgroupestá configurado, a propriedade dos arquivos no volume é ajustada durante a montagem. Dependendo da quantidade de arquivos, isso pode aumentar significativamente o tempo de inicialização. DefinafsGroupChangePolicycomoOnRootMismatchpara alterar a propriedade apenas na primeira inicialização do contêiner; atualizações ou reconstruções subsequentes do Pod não serão afetadas. Se isso não atender às suas necessidades, use um initContainer para implementar lógica de permissões personalizada.
Montar um volume de disco
kubectl
Etapa 1: Criar uma StorageClass
O ACS fornece uma StorageClass padrão chamada alicloud-disk-topology-alltype que cria um volume persistente (PV) tentando os seguintes tipos de disco nesta ordem: cloud_essd (ESSD), cloud_ssd (SSD padrão) e cloud_efficiency (disco ultra). Se esse padrão não atender aos seus requisitos, crie uma nova StorageClass conforme descrito abaixo.
Conecte-se ao cluster ACS. Para mais informações, consulte Obtain the kubeconfig file of a cluster and use kubectl to connect to the cluster e Use kubectl on Cloud Shell to manage ACS clusters.
-
Salve o conteúdo YAML a seguir como disk-sc.yaml. Modifique os parâmetros conforme descrito na tabela abaixo.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-disk-essd provisioner: diskplugin.csi.alibabacloud.com parameters: type: cloud_essd fstype: ext4 performanceLevel: PL1 reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: trueA tabela a seguir descreve os parâmetros.
Parâmetro
Descrição
parameters.typeTipo de disco. Valores válidos:
cloud_essd_entry: disco ESSD Entrycloud_auto: disco ESSD AutoPLcloud_essd(padrão): ESSDcloud_ssd: SSD padrãocloud_efficiency: disco ultra
É possível combinar esses tipos. Por exemplo:
type: cloud_efficiency, cloud_ssd, cloud_essd. O sistema tenta cada tipo em ordem até criar um disco com sucesso.NotaEscolha o tipo de disco com base nas necessidades de faturamento e desempenho. Para mais informações, consulte Block Storage Pricing e Block storage performance.
parameters.fstypeTipo de sistema de arquivos. Padrão: ext4. Valores válidos:
ext3,ext4exfs.parameters.performanceLevelNível de desempenho do ESSD. Padrão:
PL1. Valores válidos:PL0,PL1,PL2ePL3. Para mais informações, consulte ESSDs.provisionerDriver de armazenamento. Defina como
diskplugin.csi.alibabacloud.compara usar o plugin CSI de disco do Alibaba Cloud.reclaimPolicyPolítica de recuperação do disco. Apenas
Deleteé suportado, o que significa que o PV e o disco subjacente são excluídos quando a solicitação de volume persistente (PVC) é excluída.volumeBindingModeModo de vinculação do volume. Recomendamos
WaitForFirstConsumerpara clusters multizona.WaitForFirstConsumer: Atrasa a vinculação do volume. O Pod é agendado primeiro e, em seguida, o disco é criado na zona de disponibilidade do Pod.Immediate: Cria o disco antes do agendamento do Pod.
ImportanteSe você utilizar poder computacional do ACS em um cluster ACK e o Pod do ACS precisar montar um disco, use nodeSelector ou ResourcePolicy para agendar o Pod em um nó virtual. Caso agende o Pod adicionando o rótulo (
alibabacloud.com/acs: "true"), StorageClasses com o tipoWaitForFirstConsumernão são suportadas.allowVolumeExpansionIndica se a expansão automática do disco é permitida.
-
Crie a StorageClass.
kubectl create -f disk-sc.yaml -
Visualize a StorageClass.
kubectl get scSaída esperada:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE alicloud-disk-essd diskplugin.csi.alibabacloud.com Delete WaitForFirstConsumer true 78s alicloud-disk-topology-alltype diskplugin.csi.alibabacloud.com Delete WaitForFirstConsumer true 23d ......
Etapa 2: Criar uma PVC
-
Salve o conteúdo YAML a seguir como disk-pvc.yaml.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc spec: accessModes: - ReadWriteOncePod volumeMode: Filesystem resources: requests: storage: 20Gi storageClassName: alicloud-disk-essdA tabela a seguir descreve os parâmetros.
Parâmetro
Descrição
accessModesModo de acesso. Apenas ReadWriteOncePod é suportado.
volumeModeModo do volume. Valores válidos:
Filesystem(padrão): sistema de arquivosBlock: dispositivo de bloco
storageCapacidade de armazenamento alocada ao Pod, que determina o tamanho do disco a ser criado.
storageClassNameNome da StorageClass a ser utilizada.
-
Crie a PVC.
kubectl create -f disk-pvc.yaml -
Visualize a PVC.
kubectl get pvcA saída esperada mostra que a PVC ainda não está vinculada a um PV porque
volumeBindingModeestá definido comoWaitForFirstConsumer:NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE disk-pvc Pending alicloud-disk-essd <unset> 7s
Etapa 3: Criar uma aplicação e montar o disco
-
Salve o conteúdo YAML a seguir como disk-test.yaml.
O YAML abaixo cria um StatefulSet com um Pod. O Pod solicita armazenamento por meio de uma PVC chamada
disk-pvce monta o volume 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: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest ports: - containerPort: 80 volumeMounts: - name: pvc-disk mountPath: /data volumes: - name: pvc-disk persistentVolumeClaim: claimName: disk-pvc -
Crie o StatefulSet e monte o disco.
kubectl create -f disk-test.yamlImportanteO sistema provisiona automaticamente um disco no modelo de pagamento conforme o uso e um PV correspondente com base nas configurações da PVC e da StorageClass.
-
Verifique o status de implantação do Pod no StatefulSet.
kubectl get pod | grep disk-testA saída esperada exibe um Pod, pois a contagem de réplicas do StatefulSet é 1.
disk-test-0 1/1 Running 0 52s -
Visualize a PVC.
kubectl get pvcA saída esperada indica que a PVC agora está vinculada ao PV criado automaticamente.
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE disk-pvc Bound d-uf698s3h14isyj6b**** 20Gi RWOP alicloud-disk-essd <unset> 111s -
Verifique o caminho de montagem para confirmar que o disco foi montado.
kubectl exec disk-test-0 -- df | grep dataSaída esperada:
/dev/vdb 20466256 24 20449848 1% /data
Console
Etapa 1: Criar StorageClass
O ACS fornece uma StorageClass padrão chamada alicloud-disk-topology-alltype que cria um volume persistente (PV) tentando os seguintes tipos de disco nesta ordem: cloud_essd (ESSD), cloud_ssd (SSD padrão) e cloud_efficiency (disco ultra). Se esse padrão não atender aos seus requisitos, crie uma nova StorageClass conforme descrito abaixo.
Faça login no console ACS.
Na página Clusters, clique em no nome do cluster para acessar a página de gerenciamento do cluster.
No painel de navegação à esquerda da página de gerenciamento do cluster, escolha .
-
Crie uma StorageClass.
Na página StorageClasses, clique em Create.
-
Na caixa de diálogo exibida, configure os parâmetros e clique em Create.
Parâmetro
Descrição
Exemplo
Name
Nome da StorageClass. Siga os requisitos de formato exibidos na tela.
alicloud-disk-essd
PV Type
Selecione Disk.
Disk
Parameter
O parâmetro padrão é
type, que especifica o tipo de disco. Valores válidos:cloud_essd_entry: disco ESSD Entrycloud_auto: disco ESSD AutoPLcloud_essd(padrão): ESSDcloud_ssd: SSD padrãocloud_efficiency: disco ultra
É possível combinar esses tipos. Por exemplo:
type: cloud_efficiency, cloud_ssd, cloud_essd. O sistema tenta cada tipo em ordem até criar um disco com sucesso.NotaEscolha o tipo de disco com base nas necessidades de faturamento e desempenho. Para mais informações, consulte Block Storage Pricing e Block storage performance.
Você pode adicionar os seguintes parâmetros:
fstypeTipo de sistema de arquivos. Padrão: ext4. Valores válidos:
ext3,ext4exfs.performanceLevelNível de desempenho do ESSD. Padrão:
PL1. Valores válidos:PL0,PL1,PL2ePL3. Para mais informações, consulte ESSDs.
type: cloud_essd
Reclaim Policy
Política de recuperação do disco. Apenas
Deleteé suportado, o que significa que o PV e o disco subjacente são excluídos quando a solicitação de volume persistente (PVC) é excluída.Delete
Binding Mode
Modo de vinculação do volume. Recomendamos
WaitForFirstConsumerpara clusters multizona.WaitForFirstConsumer: Atrasa a vinculação do volume. O Pod é agendado primeiro e, em seguida, o disco é criado na zona de disponibilidade do Pod.Immediate: Cria o disco antes do agendamento do Pod.
ImportanteSe você utilizar poder computacional do ACS em um cluster ACK e o Pod do ACS precisar montar um disco, use nodeSelector ou ResourcePolicy para agendar o Pod em um nó virtual. Caso agende o Pod adicionando o rótulo (
alibabacloud.com/acs: "true"), StorageClasses com o tipoWaitForFirstConsumernão são suportadas.WaitForFirstConsumer
Etapa 2: Criar uma PVC
No painel de navegação à esquerda da página de gerenciamento do cluster, escolha .
Na página Persistent Volume Claims, clique em Create.
-
Na caixa de diálogo exibida, configure os parâmetros e clique em Create.
Parâmetro
Descrição
Exemplo
PVC Type
Selecione Disk.
Disk
Name
Nome da PVC. Siga os requisitos de formato exibidos na tela.
disk-pvc
Allocation Mode
Por padrão, Use StorageClass vem selecionado.
Use StorageClass
Existing Storage Class
Selecione a StorageClass a ser utilizada.
alicloud-disk-essd
Capacity
Capacidade de armazenamento alocada ao Pod, que determina o tamanho do disco a ser criado.
20Gi
Access Mode
Apenas ReadWriteOncePod é suportado, o que significa que o volume pode ser montado como leitura e escrita por um único Pod.
ReadWriteOncePod
Após a criação, a PVC aparece na página Persistent Volume Claims. Como o modo de vinculação na StorageClass é
WaitForFirstConsumer, a PVC ainda não está vinculada a um PV e seu status é Pending.
Etapa 3: Criar uma aplicação e montar o disco
No painel de navegação à esquerda da página de gerenciamento do cluster, escolha .
Na página StatefulSets, clique em Create from Image.
-
Configure os parâmetros do StatefulSet e clique em Create.
Defina os parâmetros abaixo e mantenha os padrões para os demais. Para mais informações, consulte Create a StatefulSet workload.
Seção de configuração
Parâmetro
Descrição
Exemplo
Basic Information
Application Name
Nome do StatefulSet. Siga os requisitos de formato exibidos na tela.
disk-test
Replicas:
Número de réplicas para o StatefulSet.
1
Container
Image Name
Endereço da imagem do contêiner para a aplicação.
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
Required Resources
Recursos de vCPU e memória solicitados.
0,25 vCPU, 0,5 GiB
Volume
Clique em Add PVC e configure os parâmetros.
Mount Source: Selecione a PVC criada.
Container Path: Insira o caminho no contêiner onde o disco será montado.
Mount Source: disk-pvc
Container Path: /data
-
Verifique o status de implantação da aplicação.
Na página StatefulSets, clique em no nome da aplicação.
Na aba Pods, confirme se o Pod está em execução normal (status Running).
-
Verifique o volume e a solicitação.
Na página Persistent Volumes, localize o PV criado automaticamente. O nome do PV corresponde ao ID do disco.
Na página Persistent Volume Claims, confirme que a PVC está vinculada ao PV e com status Bound.
Verificar a persistência de dados do disco
O StatefulSet criado acima contém um Pod com um disco montado. Quando o Pod é excluído, um novo Pod é criado automaticamente e remonta o mesmo disco, preservando os dados. Siga estas etapas para verificar a persistência dos dados.
-
Visualize os dados no disco no caminho de montagem.
kubectl exec disk-test-0 -- ls /dataSaída esperada:
lost+found -
Grave um arquivo de teste no disco.
kubectl exec disk-test-0 -- touch /data/test -
Exclua o Pod.
kubectl delete pod disk-test-0NotaApós excluir um Pod em um StatefulSet, o sistema cria automaticamente um novo Pod.
-
Visualize o Pod recém-criado.
kubectl get podA saída mostra que o novo Pod tem o mesmo nome do Pod excluído, comportamento padrão de um StatefulSet.
NAME READY STATUS RESTARTS AGE disk-test-0 1/1 Running 0 27s -
Verifique se o novo Pod remontou o disco e se os dados persistiram.
kubectl exec disk-test-0 -- ls /dataA saída indica que o arquivo
testgravado anteriormente ainda está presente no disco.lost+found test