Para aplicações que exigem dados compartilhados e alto desempenho de I/O, utilize o Apsara File Storage NAS como volumes persistentes (PVs). Este tópico demonstra como montar um volume NAS em uma aplicação e verificar seu acesso compartilhado e a persistência de dados.
Contexto
O NAS é um sistema de arquivos distribuído que oferece acesso compartilhado, escalabilidade elástica, alta confiabilidade e alto desempenho. Essa solução é ideal para aplicações que necessitam de dados compartilhados e alto desempenho de I/O. Para mais informações, consulte Storage overview.
Para detalhes sobre especificações de armazenamento, desempenho, faturamento, regiões e zonas compatíveis, consulte General-purpose NAS e Extreme NAS.
O NAS de uso geral e o NAS Extreme possuem limitações diferentes quanto à conectividade de montagem, quantidade de sistemas de arquivos e tipos de protocolo. Para mais informações, consulte Limitations.
Você pode montar e usar volumes NAS das seguintes formas:
Se você já possui um sistema de arquivos NAS, monte-o e compartilhe-o diretamente. Para mais informações, consulte Use an existing NAS file system as a volume.
Caso não tenha um sistema de arquivos NAS, crie e monte um automaticamente por meio de uma StorageClass. Para mais informações, consulte Create a new NAS file system as a volume.
Pré-requisitos
O componente managed-csiprovisioner deve estar instalado no cluster ACS.
Acesse a página de gerenciamento de clusters ACS no console ACS. No painel de navegação à esquerda, escolha . Na aba Storage, verifique se o managed-csiprovisioner está instalado.
Limitações
Não é possível montar sistemas de arquivos NAS com o protocolo SMB.
-
Sistemas de arquivos NAS só podem ser montados em pods na mesma VPC.
NotaÉ possível montar sistemas de arquivos NAS entre zonas dentro da mesma VPC.
A montagem de sistemas de arquivos NAS é suportada exclusivamente pelo protocolo NFSv3.
Considerações
O NAS fornece armazenamento compartilhado. Um único volume NAS pode ser montado em vários pods. Se múltiplos pods modificarem os mesmos dados simultaneamente, sua aplicação deverá gerenciar a sincronização de dados.
-
Ao montar um volume NAS, não configure
securityContext.fsgroupno arquivo YAML da aplicação. Caso contrário, a montagem do volume poderá falhar.NotaNão é permitido modificar as permissões, o proprietário ou o grupo do diretório raiz
/de um sistema de arquivos NAS. Após montar um volume NAS, não exclua seu destino de montagem. Essa ação pode fazer com que o sistema operacional pare de responder.
Utilizar um sistema de arquivos NAS existente
Etapa 1: Obter informações do sistema de arquivos NAS
-
Obtenha o ID da VPC e o ID do vSwitch utilizados pelos pods do ACS.
NotaEssas informações estão disponíveis no console. Alternativamente, execute o comando
kubectl get cm -n kube-system acs-profile -o yamlpara visualizar o arquivo YAML do ConfigMap acs-profile. O ID da VPC e o ID do vSwitch encontram-se nos camposvpcIdevSwitchIds.Faça login no console ACS.
Em Clusters, clique em nome do cluster para acessar a página de gerenciamento do cluster.
No painel de navegação à esquerda, escolha .
No topo da página ConfigMap, altere o namespace para kube-system. Em seguida, localize acs-profile e clique em Edit YAML.
Extraia o ID da VPC e o ID do vSwitch dos campos
vpcIdevSwitchIds.
-
Verifique se o sistema de arquivos NAS existente atende aos requisitos e obtenha o endereço do destino de montagem.
Faça login no console NAS. No painel de navegação à esquerda, clique em File System List.
-
Localize o sistema de arquivos NAS desejado e confirme se sua região, zona e tipo de protocolo atendem aos requisitos.
Como o NAS não suporta montagem entre VPCs diferentes, ele não pode ser usado entre regiões. Certifique-se de que o sistema de arquivos NAS esteja na mesma região do seu cluster ACS.
Dentro da mesma VPC, é possível montar um sistema de arquivos NAS entre zonas. Contudo, para obter o melhor desempenho, recomenda-se que o sistema de arquivos NAS e os pods do cluster ACS estejam na mesma zona.
Confirme se o tipo de protocolo do sistema de arquivos NAS é NFS. Sistemas de arquivos NAS que utilizam o protocolo SMB não podem ser montados.
-
Valide se o destino de montagem atende aos requisitos e obtenha seu endereço.
Clique em ID do sistema de arquivos.
Na página de detalhes do sistema de arquivos, clique em Mount Targets no painel de navegação à esquerda.
-
Na área Mount Target, verifique se existe um destino de montagem que atenda aos requisitos e obtenha o endereço correspondente.
NotaUm destino de montagem é criado automaticamente ao criar um sistema de arquivos NAS de uso geral. Para sistemas de arquivos NAS Extreme, a criação do destino de montagem deve ser manual.
Se nenhum destino de montagem existente atender aos requisitos, crie um novo. Para mais informações, consulte Manage mount targets.
A VPC do destino de montagem deve ser idêntica à VPC do cluster ACS. Caso contrário, a montagem falhará.
Para otimizar o desempenho, recomenda-se que o destino de montagem e os pods do cluster ACS utilizem o mesmo vSwitch.
O status do destino de montagem deve ser Available.
Etapa 2: Criar uma StorageClass
-
Ajuste o conteúdo YAML abaixo conforme as descrições dos parâmetros e salve-o como nas-sc.yaml.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas-subpath mountOptions: - nolock,tcp,noresvport - vers=3 parameters: volumeAs: subpath server: "*******-mw***.cn-shanghai.nas.aliyuncs.com:/csi" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: RetainDescrição dos parâmetros:
Parâmetro
Descrição
volumeAsModo de provisionamento. Defina como
subpathpara criar cada volume persistente (PV) como um subdiretório. Cada PV corresponde a um subdiretório do sistema de arquivos NAS.serverEndereço do destino de montagem do sistema de arquivos NAS, no formato
mount-target-address:path, ondepathrepresenta o subdiretório do NAS que você deseja montar.-
Se nenhum caminho for especificado, o diretório raiz será montado por padrão.
-
Caso o diretório não exista no sistema de arquivos NAS, ele será criado automaticamente antes da montagem.
O diretório raiz é
/para sistemas de arquivos NAS de uso geral e/sharepara sistemas de arquivos NAS Extreme.provisionerDefine o tipo de provisionador. Deve ser definido como
nasplugin.csi.alibabacloud.compara utilizar o plug-in CSI do Alibaba Cloud NAS.reclaimPolicyPolítica de recuperação do PV. Apenas
Retainé suportado, o que significa que o sistema de arquivos NAS e o destino de montagem correspondentes são mantidos quando o PV é excluído. -
Etapa 3: Criar um PVC
kubectl
-
Salve o conteúdo abaixo como nas-pvc.yaml.
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-pvc annotations: spec: accessModes: - ReadWriteMany resources: requests: storage: 20Gi storageClassName: alicloud-nas-subpathDescrição dos parâmetros:
Parâmetro
Descrição
accessModesModo de acesso.
storageCapacidade do volume persistente a ser criado.
storageClassNameNome da StorageClass a ser utilizada.
-
Crie o PVC.
kubectl create -f nas-pvc.yaml -
Visualize o PV.
kubectl get pvA saída indica que o plug-in CSI criou automaticamente um PV com base na StorageClass e o vinculou ao PVC.
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE nas-ea7a0b6a-bec2-4e56-b767-47222d3a**** 20Gi RWX Retain Bound default/nas-pvc alicloud-nas-subpath 1m58s
Console
Faça login no console ACS.
Em Clusters, clique em 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 .
Na página Persistent Volume Claims, clique em Create.
-
Na caixa de diálogo, defina os parâmetros e clique em Create.
Parâmetro
Descrição
Exemplo
PVC Type
Selecione NAS.
NAS
Volume Name:
Nome do PVC. Insira um nome personalizado. Consulte as instruções na tela para requisitos de formatação.
nas-pvc
Allocation Mode
Selecione Use StorageClass.
Provisionamento dinâmico via StorageClass
Capacity
Capacidade do volume persistente a ser criado.
20Gi
Access Mode
Suporta ReadWriteMany e ReadWriteOnce.
ReadWriteMany
Após a criação, o PVC aparecerá listado na página Persistent Volume Claims. O PVC estará vinculado a um PV criado automaticamente, que corresponde a um volume persistente NAS. É possível visualizar os detalhes do PV na página Persistent Volumes.
Etapa 4: Criar uma aplicação e montar o volume
kubectl
-
Crie um arquivo chamado nas-test.yaml com o conteúdo a seguir.
O arquivo YAML abaixo cria um Deployment com dois pods. Ambos os pods utilizam o PVC chamado
nas-pvce montam o volume no caminho/data.apiVersion: apps/v1 kind: Deployment metadata: name: nas-test labels: app: nginx spec: replicas: 2 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-nas mountPath: /data volumes: - name: pvc-nas persistentVolumeClaim: claimName: nas-pvc -
Crie o Deployment e monte o volume persistente NAS.
kubectl create -f nas-test.yaml -
Verifique o status de implantação dos pods no Deployment.
kubectl get pod | grep nas-testA saída abaixo mostra que dois pods foram criados.
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40s -
Verifique o caminho de montagem.
kubectl exec nas-test-****-***a -- df -h /dataSaída esperada:
Filesystem Size Used Avail Use% Mounted on 350514*****-mw***.cn-shanghai.nas.aliyuncs.com:/ 1.0P 0 1.0P 0% /dataEssa saída confirma que o sistema de arquivos foi montado com sucesso.
Console
No painel de navegação à esquerda da página de gerenciamento do cluster, escolha .
Na página Deployments, clique em Create from Image.
-
Defina os parâmetros do Deployment e clique em Create.
A tabela a seguir descreve os principais parâmetros. Mantenha os valores padrão para os demais parâmetros. Para mais informações, consulte Create a stateless Deployment.
Página de configuração
Parâmetro
Descrição
Exemplo
Basic Information
Application Name
Nome do Deployment. Insira um nome personalizado. Consulte as instruções na tela para requisitos de formatação.
nas-test
Replicas:
Número de réplicas para o Deployment.
2
Container
Image Name
Insira o endereço da imagem usada para implantar a aplicação.
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
Required Resources
Defina os recursos necessários de vCPU e memória.
0,25 vCPU, 0,5 GiB
Volume
Clique em Add PVC e defina os parâmetros.
-
Mount Source: Selecione o PVC criado anteriormente.
-
Container Path: Insira o caminho no contêiner onde o sistema de arquivos NAS será montado.
-
Mount Source: nas-pvc
-
Container Path: /data
-
-
Verifique o status da implantação da aplicação.
Na página Deployments, clique em nome da aplicação.
Na aba Pods, confirme se os pods estão no estado Running.
Criar um sistema de arquivos NAS como volume
Etapa 1: Criar uma StorageClass
-
Ajuste o conteúdo YAML abaixo conforme as descrições dos parâmetros e salve o arquivo como nas-sc.yaml.
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-shanghai zoneId: cn-shanghai-e vpcId: "vpc-2ze2fxn6popm8c2mzm****" vSwitchId: "vsw-2zwdg25a2b4y5juy****" accessGroupName: DEFAULT_VPC_GROUP_NAME deleteVolume: "false" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: RetainA tabela a seguir descreve os parâmetros.
ImportanteO suporte a tipos de sistemas de arquivos NAS e classes de armazenamento varia conforme a região e a zona de disponibilidade. Certifique-se de que a região, zona de disponibilidade, VPC e vSwitch selecionados para o sistema de arquivos NAS e seu destino de montagem sejam compatíveis com seu cluster ACS, bem como com a VPC e o vSwitch utilizados pelos seus pods. Para mais informações, consulte os tópicos a seguir:
Para informações sobre classes de armazenamento, desempenho, faturamento e regiões e zonas de disponibilidade suportadas para diferentes tipos de sistemas de arquivos NAS, consulte General-purpose NAS e Extreme NAS.
O NAS de uso geral e o NAS Extreme possuem limitações diferentes quanto à conectividade de montagem, quantidade de sistemas de arquivos e tipos de protocolo. Para mais informações, consulte Limitations.
Execute o comando
kubectl get cm -n kube-system acs-profile -o yamlpara visualizar o YAML doacs-profilee obter os IDs da VPC e dos vSwitches usados pelos pods nos camposvpcIdevSwitchIds.
Parâmetro
Descrição
volumeAsDefine como o volume é provisionado. Configure como
filesystempara criar automaticamente um novo sistema de arquivos NAS para cada volume.fileSystemTypeTipo do sistema de arquivos NAS.
-
standard(padrão): NAS de uso geral. Para mais informações, consulte General-purpose NAS. -
extreme: NAS Extreme. Para mais informações, consulte Extreme NAS.
storageTypeClasse de armazenamento do sistema de arquivos NAS.
-
Para NAS de uso geral, os valores válidos são:
-
Performance(padrão): Performance -
Capacity: Capacity
-
-
Para NAS Extreme, os valores válidos são:
-
standard(padrão): Standard -
advanced: Advanced
-
regionIdRegião onde o sistema de arquivos NAS está localizado. Deve ser a mesma região do seu cluster ACS.
zoneIdZona de disponibilidade onde o sistema de arquivos NAS está localizado. Escolha uma zona de disponibilidade com base no vSwitch utilizado pelos pods do seu cluster ACS.
NotaDentro da mesma VPC, é possível montar um sistema de arquivos NAS entre zonas de disponibilidade. Para obter o melhor desempenho, recomenda-se selecionar a mesma zona de disponibilidade.
vpcId,vSwitchIdIDs da VPC e do vSwitch para o destino de montagem do sistema de arquivos NAS. Devem corresponder aos IDs da VPC e do vSwitch utilizados pelos pods do seu cluster ACS.
accessGroupNameGrupo de permissões do destino de montagem para o sistema de arquivos NAS. O valor padrão é
DEFAULT_VPC_GROUP_NAME.provisionerProvisionador. Deve ser definido como
nasplugin.csi.alibabacloud.com, indicando o uso do plug-in CSI do Alibaba Cloud NAS.reclaimPolicyPolítica de recuperação do PV. A única política suportada é
Retain, o que significa que o sistema de arquivos NAS e o destino de montagem correspondentes são mantidos quando o PV é excluído. -
Crie a StorageClass.
kubectl create -f nas-sc.yaml -
Verifique a StorageClass.
kubectl get scSaída esperada:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE alicloud-nas-fs nasplugin.csi.alibabacloud.com Retain Immediate false 13m ......
Etapa 2: Criar um PersistentVolumeClaim
-
Salve o conteúdo abaixo em um arquivo chamado nas-pvc-fs.yaml.
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-pvc-fs spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-fs resources: requests: storage: 20GiA tabela a seguir descreve os parâmetros.
Parâmetro
Descrição
accessModesModo de acesso.
storageCapacidade do volume NAS a ser criado.
NotaO NAS Extreme possui capacidade mínima de 100 GiB. Se o tipo de sistema de arquivos NAS definido na StorageClass for NAS Extreme, o valor de
storagedeve ser igual ou superior a 100 GiB. Caso contrário, o PersistentVolume correspondente não poderá ser criado.storageClassNameNome da StorageClass a ser utilizada.
-
Crie o PersistentVolumeClaim.
kubectl create -f nas-pvc-fs.yaml -
Verifique o PersistentVolumeClaim.
kubectl get pvcA saída mostra que o PersistentVolumeClaim está vinculado ao PersistentVolume criado automaticamente. Também é possível visualizar o sistema de arquivos NAS correspondente no console NAS.
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE nas-pvc-fs Bound nas-04a730ba-010d-4fb1-9043-476d8c38**** 20Gi RWX alicloud-nas-fs <unset> 14s
Etapa 3: Criar uma aplicação e montar o volume NAS
-
Crie um arquivo chamado nas-test-fs.yaml com o conteúdo a seguir.
O YAML abaixo cria um Deployment com dois pods. Ambos os pods solicitam armazenamento do PersistentVolumeClaim chamado
nas-pvc-fse montam o volume no caminho de montagem/data.apiVersion: apps/v1 kind: Deployment metadata: name: nas-test labels: app: nginx spec: replicas: 2 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-nas mountPath: /data volumes: - name: pvc-nas persistentVolumeClaim: claimName: nas-pvc-fs -
Crie o Deployment e monte o volume NAS.
kubectl create -f nas-test-fs.yaml -
Verifique o status de implantação dos pods no Deployment.
kubectl get pod | grep nas-testA saída abaixo mostra que dois pods foram criados.
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40s -
Verifique o caminho de montagem.
kubectl exec nas-test-****-***a -- df -h /dataSaída esperada:
Filesystem Size Used Avail Use% Mounted on 350514*****-mw***.cn-shanghai.nas.aliyuncs.com:/ 1.0P 0 1.0P 0% /dataEssa saída confirma que o sistema de arquivos foi montado com sucesso.
Montar um sistema de arquivos NAS existente via volume NFS
Etapa 1: Obter informações do sistema de arquivos NAS
Para mais informações sobre como obter o endereço do destino de montagem do NAS, consulte Obtain NAS file system information.
Etapa 2: Criar uma aplicação e montar o NAS
-
Crie um arquivo chamado
nas-test-nfs.yamlcom o conteúdo a seguir.Este YAML define um Deployment com dois pods. Cada pod monta o sistema de arquivos NAS no caminho
/datautilizando um volume chamadonfs-nas.apiVersion: apps/v1 kind: Deployment metadata: name: nas-test labels: app: nginx spec: replicas: 2 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: nfs-nas mountPath: /data volumes: - name: nfs-nas nfs: server: file-system-id.region.nas.aliyuncs.com # The mount target address of the Alibaba Cloud NAS file system. Replace this with your actual value. Example: 7bexxxxxx-xxxx.ap-southeast-1.nas.aliyuncs.com. path: / # The directory path in the NAS file system. The directory must be an existing directory or the root directory. The root directory of a General-purpose NAS file system is "/", and the root directory of an Extreme NAS file system is "/share". -
Crie o Deployment e monte o volume NAS.
kubectl create -f nas-test-nfs.yaml -
Verifique o status de implantação dos pods no Deployment.
kubectl get pod | grep nas-testA saída abaixo mostra que dois pods foram criados.
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40s -
Verifique o caminho de montagem.
kubectl exec nas-test-****-***a -- df -h /dataSaída esperada:
Filesystem Size Used Avail Use% Mounted on 350514*****-mw***.cn-shanghai.nas.aliyuncs.com:/ 1.0P 0 1.0P 0% /dataEssa saída confirma que o sistema de arquivos foi montado com sucesso.
Verificar armazenamento compartilhado e persistente
O Deployment criado no exemplo anterior contém dois pods que montam o mesmo sistema de arquivos NAS. Valide essa configuração da seguinte forma:
Crie um arquivo em um pod e visualize-o no outro pod para confirmar o armazenamento compartilhado.
Reinicie o Deployment e verifique se os dados persistem em um novo pod para validar o armazenamento persistente.
-
Verifique as informações dos pods.
kubectl get pod | grep nas-testSaída de exemplo:
nas-test-****-***a 1/1 Running 0 40s nas-test-****-***b 1/1 Running 0 40s -
Valide o armazenamento compartilhado.
-
Crie um arquivo em um dos pods.
Este exemplo utiliza o pod chamado
nas-test-****-***a:kubectl exec nas-test-****-***a -- touch /data/test.txt -
Visualize o arquivo no outro pod.
Este exemplo utiliza o pod chamado
nas-test-****-***b:kubectl exec nas-test-****-***b -- ls /dataA saída esperada mostra o novo arquivo
test.txt, confirmando que o arquivo é compartilhado entre os pods.test.txt
-
-
Valide o armazenamento persistente.
-
Reinicie o Deployment.
kubectl rollout restart deploy nas-test -
Verifique os pods e aguarde o início dos novos pods.
kubectl get pod | grep nas-testSaída de exemplo:
nas-test-****-***c 1/1 Running 0 67s nas-test-****-***d 1/1 Running 0 49s -
Em um dos novos pods, confirme se os dados persistiram no sistema de arquivos.
Este exemplo utiliza o pod chamado
nas-test-****-***c:kubectl exec nas-test-****-***c -- ls /dataA saída confirma que os dados no sistema de arquivos NAS persistiram e estão acessíveis no diretório de montagem do novo pod.
test.txt
-