Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O Armazenamento de Contêineres do Azure é um serviço de gerenciamento, implantação e orquestração de volumes baseado em nuvem criado nativamente para contêineres. Este artigo mostra como configurar o Armazenamento de Contêiner do Azure para usar o disco NVMe local como armazenamento back-end para suas cargas de trabalho do Kubernetes. O NVMe foi projetado para transferência de dados de alta velocidade entre armazenamento e CPU, proporcionando alta IOPS e taxa de transferência.
Importante
Este artigo aplica-se ao Armazenamento de Contentores do Azure (versão 2.x.x), que atualmente apenas suporta o disco NVMe local para armazenamento de suporte. Para obter detalhes sobre versões anteriores, consulte a documentação do Armazenamento de Contêiner do Azure (versão 1.x.x).
O que é NVMe local?
Quando a sua aplicação precisa de latência de armazenamento sub-milissegundos e alto rendimento, pode usar discos NVMe locais com Azure Container Storage para satisfazer os seus requisitos de desempenho. Efémero significa que os discos são implantados na máquina virtual (VM) local que hospeda o cluster AKS e não salvos em um serviço de armazenamento do Azure. Os dados são perdidos nesses discos se você parar/desalocar sua VM. Os discos NVMe locais são oferecidos em famílias de VMs do Azure selecionadas, como VMs otimizadas para armazenamento .
Por padrão, o Armazenamento de Contêiner do Azure cria volumes efêmeros genéricos ao usar discos NVMe locais. Para casos de uso que exigem declarações de volume persistentes, você pode adicionar a anotação localdisk.csi.acstor.io/accept-ephemeral-storage: "true" em seu modelo de declaração de volume persistente.
Distribuição de dados
Para maximizar o desempenho, o Armazenamento de Contêiner do Azure distribui automaticamente os dados em todos os discos NVMe locais disponíveis por VM. O striping é uma técnica em que os dados são divididos em pequenos blocos e gravados uniformemente em vários discos simultaneamente, o que aumenta a taxa de transferência e melhora o desempenho geral de E/S. Esse comportamento é habilitado por padrão e não pode ser desabilitado.
Como o desempenho se agrega nesses dispositivos distribuídos, tamanhos de VM maiores que expõem mais unidades NVMe podem desbloquear IOPS e largura de banda substancialmente maiores. A seleção de uma família de VMs maior permite que suas cargas de trabalho se beneficiem da taxa de transferência agregada extra sem configuração adicional.
Por exemplo, a série Lsv3 pode ser dimensionada a partir de uma única unidade NVMe de 1,92 TB em Standard_L8s_v3 (cerca de 400.000 IOPS e 2.000 MB/s) até 10 unidades NVMe em Standard_L80s_v3 (cerca de 3,8 milhões de IOPS e 20.000 MB/s).
Pré-requisitos
Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Este artigo requer a versão mais recente (2.77.0 ou posterior) da CLI do Azure. Consulte Como instalar a CLI do Azure. Evita o Azure Cloud Shell, porque
az upgradenão está disponível no Cloud Shell. Certifique-se de executar os comandos neste artigo com privilégios administrativos.Consulte as instruções de instalação e certifique-se de que o Azure Container Storage está devidamente instalado.
Você precisa do cliente de linha de comando Kubernetes,
kubectl. Você pode instalá-lo localmente executando oaz aks install-clicomando.Verifique se a sua região de destino tem suporte nas regiões de Armazenamento de Contêiner do Azure.
Escolha um tipo de VM que suporte NVMe local
Os discos NVMe locais só estão disponíveis em determinados tipos de VMs, por exemplo, VMs otimizadas para armazenamento ou VMs aceleradas por GPU. Se você planeja usar a capacidade NVMe local, escolha um desses tamanhos de VM.
Execute o comando a seguir para obter o tipo de VM usado com seu pool de nós. Substitua <resource group> e <cluster name> com os seus próprios valores. Você não precisa fornecer valores para PoolName ou VmSize, portanto, mantenha a consulta como mostrado aqui.
az aks nodepool list --resource-group <resource group> --cluster-name <cluster name> --query "[].{PoolName:name, VmSize:vmSize}" -o table
A saída a seguir é um exemplo.
PoolName VmSize
---------- ---------------
nodepool1 standard_l8s_v3
Nota
No Armazenamento de Contêiner do Azure (versão 2.x.x), agora você pode usar clusters com menos de três nós.
Criar uma classe de armazenamento para NVMe local
Se ainda não o fizeste, instala o Azure Container Storage.
Azure Container Storage (versão 2.x.x) apresenta o NVMe local como uma classe de armazenamento Kubernetes padrão. Crie a local classe de armazenamento uma vez por cluster e reutilize-a tanto para volumes efémeros genéricos como para reivindicações de volumes persistentes.
Use o seu editor de texto favorito para criar um ficheiro de manifesto YAML, como
storageclass.yaml, e depois cole a seguinte especificação.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local provisioner: localdisk.csi.acstor.io reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: trueAplica o manifesto para criar a classe de armazenamento.
kubectl apply -f storageclass.yaml
Alternativamente, podes criar a classe de armazenamento usando o Terraform.
Use o Terraform para gerir a classe de armazenamento criando uma configuração como a seguinte
main.tf. Atualiza a versão do fornecedor ou o caminho do kubeconfig conforme necessário para o teu ambiente.terraform { required_version = ">= 1.5.0" required_providers { kubernetes = { source = "hashicorp/kubernetes" version = "~> 3.x" } } } provider "kubernetes" { config_path = "~/.kube/config" } resource "kubernetes_storage_class_v1" "local" { metadata { name = "local" } storage_provisioner = "localdisk.csi.acstor.io" reclaim_policy = "Delete" volume_binding_mode = "WaitForFirstConsumer" allow_volume_expansion = true }Inicializar, rever e aplicar a configuração para criar a classe de armazenamento.
terraform init terraform plan terraform apply
Verificar a classe de armazenamento
Execute o seguinte comando para verificar se a classe de armazenamento foi criada:
kubectl get storageclass local
Deverá ver um resultado semelhante a:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local localdisk.csi.acstor.io Delete WaitForFirstConsumer true 10s
Criar e anexar volumes efémeros genéricos
Siga estas etapas para criar e anexar um volume efêmero genérico usando o Armazenamento de Contêiner do Azure. Certifique-se de que o Azure Container Storage está instalado e que a local classe de armazenamento existe antes de continuar.
Desplegar um pod com volume efémero genérico
Crie um pod usando Fio (Flexible I/O Tester) para benchmarking e simulação de carga de trabalho que usa um volume efêmero genérico.
Use seu editor de texto favorito para criar um arquivo de manifesto YAML como
code fiopod.yaml.Cole o código a seguir e salve o arquivo.
kind: Pod apiVersion: v1 metadata: name: fiopod spec: nodeSelector: "kubernetes.io/os": linux containers: - name: fio image: mayadata/fio args: ["sleep", "1000000"] volumeMounts: - mountPath: "/volume" name: ephemeralvolume volumes: - name: ephemeralvolume ephemeral: volumeClaimTemplate: spec: volumeMode: Filesystem accessModes: ["ReadWriteOnce"] storageClassName: local resources: requests: storage: 10GiAplique o arquivo de manifesto YAML para implantar o pod.
kubectl apply -f fiopod.yaml
Verifique a implementação e execute testes de desempenho
Verifique se o pod está funcionando:
kubectl get pod fiopod
Você deve ver o pod no estado Em Execução. Uma vez executado, você pode executar um teste de benchmark Fio:
kubectl exec -it fiopod -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60
Criar e anexar volumes persistentes com anotação de armazenamento efêmera
Enquanto volumes efêmeros genéricos são recomendados para armazenamento efêmero, o Armazenamento de Contêiner do Azure também dá suporte a volumes persistentes com armazenamento efêmero quando necessário para compatibilidade com cargas de trabalho existentes.
Nota
O Armazenamento de Contêineres do Azure (versão 2.x.x) usa a nova anotação localdisk.csi.acstor.io/accept-ephemeral-storage: "true" em vez da anterior acstor.azure.com/accept-ephemeral-storage: "true".
Certifique-se de que o Azure Container Storage está instalado e que a local classe de armazenamento que criou anteriormente está disponível antes de implementar cargas de trabalho que a utilizem.
Implementar um StatefulSet com volumes persistentes
Se você precisar usar declarações de volume persistentes que não estejam vinculadas ao ciclo de vida do pod, deverá adicionar a localdisk.csi.acstor.io/accept-ephemeral-storage: "true" anotação. Os dados no volume são locais para o nó e são perdidos se o nó for excluído ou o pod for movido para outro nó.
Aqui está um exemplo de conjunto com estado usando volumes persistentes com a anotação de armazenamento efémero.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: statefulset-lcd-lvm-annotation
labels:
app: busybox
spec:
podManagementPolicy: Parallel
serviceName: statefulset-lcd
replicas: 10
template:
metadata:
labels:
app: busybox
spec:
nodeSelector:
"kubernetes.io/os": linux
containers:
- name: statefulset-lcd
image: mcr.microsoft.com/azurelinux/busybox:1.36
command:
- "/bin/sh"
- "-c"
- set -euo pipefail; trap exit TERM; while true; do date -u +"%Y-%m-%dT%H:%M:%SZ" >> /mnt/lcd/outfile; sleep 1; done
volumeMounts:
- name: persistent-storage
mountPath: /mnt/lcd
updateStrategy:
type: RollingUpdate
selector:
matchLabels:
app: busybox
volumeClaimTemplates:
- metadata:
name: persistent-storage
annotations:
localdisk.csi.acstor.io/accept-ephemeral-storage: "true"
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: local
resources:
requests:
storage: 10Gi
Salve e aplique este YAML para criar o Stateful Set com volumes persistentes.
kubectl apply -f statefulset-pvc.yaml
Gerenciar armazenamento
Nesta seção, irá aprender a verificar a capacidade do disco temporário do nó, expandir a capacidade de armazenamento e eliminar recursos de armazenamento.
Verificar a capacidade do disco temporário do nó
Um volume temporário é alocado num único nó. Quando você configura o tamanho de seus volumes efêmeros, o tamanho deve ser menor do que a capacidade disponível do disco efêmero do nó único.
Certifique-se de que existe uma StorageClass para localdisk.csi.acstor.io. Execute o seguinte comando para verificar a capacidade disponível do disco efémero para cada nó.
kubectl get csistoragecapacities.storage.k8s.io -n kube-system -o custom-columns=NAME:.metadata.name,STORAGE_CLASS:.storageClassName,CAPACITY:.capacity,NODE:.nodeTopology.matchLabels."topology\.localdisk\.csi\.acstor\.io/node"
Você deve ver uma saída semelhante ao exemplo a seguir:
NAME STORAGE_CLASS CAPACITY NODE
csisc-2pkx4 local 1373172Mi aks-storagepool-31410930-vmss000001
csisc-gnmm9 local 1373172Mi aks-storagepool-31410930-vmss000000
Se encontrar saída de capacidade vazia, confirme que existe uma StorageClass para localdisk.csi.acstor.io . O csistoragecapacities.storage.k8s.io recurso só é gerado depois de existir uma StorageClass para localdisk.csi.acstor.io .
Expandir a capacidade de armazenamento
Como o armazenamento em disco efêmero usa recursos locais nos nós do cluster AKS, a expansão da capacidade de armazenamento requer a adição de nós ao cluster.
Para adicionar um nó ao cluster, execute o seguinte comando. Substitua <cluster-name>, <nodepool-name>, <resource-group>, e <new-count> pelos seus valores.
az aks nodepool scale --cluster-name <cluster-name> --name <nodepool-name> --resource-group <resource-group> --node-count <new-count>
Excluir recursos de armazenamento
Para limpar os recursos de armazenamento, você deve primeiro excluir todos os PersistentVolumeClaims e/ou PersistentVolumes. A exclusão do Azure Container Storage StorageClass não remove automaticamente os seus PersistentVolumes/PersistentVolumeClaims existentes.
Para eliminar uma classe de armazenamento chamada local, execute o seguinte comando:
kubectl delete storageclass local
Consulte também
- O que é o Armazenamento de Contêineres do Azure?
- Install Azure Container Storage com AKS
- Usar o Armazenamento de Contêiner do Azure (versão 1.x.x) com NVMe local
- Visão geral da implantação de um banco de dados PostgreSQL altamente disponível no Serviço Kubernetes do Azure (AKS)
- Melhores práticas para discos de dados NVMe efémeros no Azure Kubernetes Service (AKS)