Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Armazenamento de Contêineres do Azure é um serviço de gerenciamento de volume, implantação e orquestração baseado em nuvem criado nativamente para contêineres. Este artigo mostra como configurar o Armazenamento de Contêineres do Azure para usar o disco NVMe local como armazenamento de 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, fornecendo alta IOPS e taxa de transferência.
Importante
Este artigo se aplica ao Armazenamento de Contêineres do Azure (versão 2.x.x),que atualmente dá suporte apenas ao disco NVMe local para backup do armazenamento. Para obter detalhes sobre versões anteriores, consulte a documentação do Armazenamento de Contêineres do Azure (versão 1.x.x).
O que é NVMe local?
Quando seu aplicativo precisa de latência de armazenamento de sub milissegundos e alta taxa de transferência, você pode usar discos NVMe locais com o Armazenamento de Contêineres do Azure para atender aos seus requisitos de desempenho. Efêmero significa que os discos são implantados na VM (máquina virtual) local que hospeda o cluster do AKS e não são salvos em um serviço de armazenamento do Azure. Os dados serão perdidos nesses discos se você parar/desalocar sua VM. Discos NVMe locais são oferecidos em famílias de VM do Azure selecionadas, como VMs com otimização de armazenamento .
Por padrão, o Armazenamento de Contêineres 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 em seu modelo de declaração localdisk.csi.acstor.io/accept-ephemeral-storage: "true" de volume persistente.
Striping 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 na qual os dados são divididos em pedaços pequenos 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 é agregado entre esses dispositivos em striping, tamanhos maiores de VM que expõem mais unidades NVMe podem desbloquear IOPS e largura de banda substancialmente maiores. Selecionar uma família de VMs de maior porte permite que suas tarefas se beneficiem da taxa de transferência agregada extra sem configuração adicional.
Por exemplo, a série Lsv3 é dimensionada 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 você não tiver uma assinatura 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. Evite o Azure Cloud Shell porque
az upgradenão está disponível no Cloud Shell. Execute os comandos neste artigo com privilégios administrativos.Examine as instruções de instalação e verifique se o Armazenamento de Contêineres do Azure está instalado corretamente.
Você precisa do cliente de linha de comando do Kubernetes.
kubectlVocê pode instalá-lo localmente executando oaz aks install-clicomando.Verifique se a região de destino tem suporte nas regiões do Armazenamento de Contêineres do Azure.
Escolher um tipo de VM que dê suporte ao NVMe local
Os discos NVMe locais só estão disponíveis em determinados tipos de VMs, por exemplo, VMs com otimização de armazenamento ou VMs aceleradas por GPU. Se você planeja usar a capacidade de NVMe local, escolha um desses tamanhos de VM.
Execute o comando a seguir para obter o tipo de VM usado com o pool de nós. Substitua <resource group> e <cluster name> pelos seus próprios valores. Você não precisa fornecer valores para PoolName ou VmSize, portanto, mantenha a consulta como mostrada 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
Observação
No Armazenamento de Contêineres do Azure (versão 2.x.x), agora você pode usar clusters com menos de três nós.
Criar e anexar volumes efêmeros genéricos
Se você ainda não fez isso, instale o Armazenamento de Contêineres do Azure.
Siga estas etapas para criar e anexar um volume efêmero genérico usando o Armazenamento de Contêineres do Azure.
1. Criar uma classe de armazenamento
Ao contrário das versões anteriores que exigiam a criação de um recurso de pool de armazenamento personalizado, o Armazenamento de Contêineres do Azure (versão 2.x.x) usa classes de armazenamento padrão do Kubernetes.
Siga estas etapas para criar uma classe de armazenamento usando NVMe local.
Use seu editor de texto favorito para criar um arquivo de manifesto YAML, como
code storageclass.yaml.Cole o seguinte código e salve o arquivo.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local provisioner: localdisk.csi.acstor.io reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: trueAplique o arquivo de manifesto YAML para criar o pool de armazenamento.
kubectl apply -f storageclass.yaml
2. Verificar a classe de armazenamento
Execute o seguinte comando para verificar se a classe de armazenamento foi criada:
kubectl get storageclass local
Você deve ver uma saída semelhante a:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local localdisk.csi.acstor.io Delete WaitForFirstConsumer true 10s
3. Implantar um pod com volume efêmero genérico
Crie um pod usando Fio (Testador de E/S Flexível) para comparação 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 seguinte código 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
4. Verificar a implantação e executar parâmetros de comparação
Verifique se o pod está em execução:
kubectl get pod fiopod
Você deve ver o pod no estado Running. Uma vez em execução, você pode executar um teste de benchmark do 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êmero
Embora volumes efêmeros genéricos sejam recomendados para armazenamento efêmero, o Armazenamento de Contêineres do Azure também dá suporte a volumes persistentes com armazenamento efêmero quando necessário para compatibilidade com cargas de trabalho existentes.
Observação
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".
1. Criar uma classe de armazenamento (se ainda não tiver sido criada)
Se você ainda não fez isso, instale o Armazenamento de Contêineres do Azure.
Se você não criou uma classe de armazenamento que usa o NVMe local na seção anterior, crie uma agora:
Use seu editor de texto favorito para criar um arquivo de manifesto YAML, como
code storageclass.yaml.Cole o seguinte código e salve o arquivo.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local provisioner: localdisk.csi.acstor.io reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: trueAplique o arquivo de manifesto YAML para criar o pool de armazenamento.
kubectl apply -f storageclass.yaml
2. Implantar um conjunto com estado com volumes persistentes
Se você precisar usar persistent volume claims que não estão vinculados ao ciclo de vida do pod, deve adicionar a localdisk.csi.acstor.io/accept-ephemeral-storage: "true" annotation. Os dados no volume são locais para o nó e são perdidos se o nó for excluído ou se 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 StatefulSet com volumes persistentes.
kubectl apply -f statefulset-pvc.yaml
Gerenciar o armazenamento
Nesta seção, você aprenderá a verificar a capacidade do disco efêmero do nó, expandir a capacidade de armazenamento e excluir recursos de armazenamento.
Verificar a capacidade do disco efêmero do nó
Um volume efêmero é alocado em um único nó. Ao configurar o tamanho dos volumes efêmeros, o tamanho deve ser menor do que a capacidade disponível do disco efêmero do nó único.
Verifique se existe um StorageClass para localdisk.csi.acstor.io . Execute o comando a seguir para verificar a capacidade disponível do disco temporário 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ê deverá ver uma saída semelhante ao seguinte exemplo:
NAME STORAGE_CLASS CAPACITY NODE
csisc-2pkx4 local 1373172Mi aks-storagepool-31410930-vmss000001
csisc-gnmm9 local 1373172Mi aks-storagepool-31410930-vmss000000
Se encontrar uma saída de capacidade vazia, confirme a existência de um StorageClass para localdisk.csi.acstor.io. O recurso csistoragecapacities.storage.k8s.io só é gerado após a existência de um StorageClass para localdisk.csi.acstor.io .
Expandir a capacidade de armazenamento
Como o armazenamento em disco efêmero usa recursos locais nos nós de cluster do AKS, a expansão da capacidade de armazenamento requer a adição de nós ao cluster.
Para adicionar um nó ao seu cluster, execute o seguinte comando. Substitua <cluster-name>, <nodepool-name>, <resource-group>e <new-count> com 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, primeiro você deve excluir todos os PersistentVolumeClaims e/ou PersistentVolumes. Excluir a StorageClass do Armazenamento de Contêineres do Azure não remove automaticamente seus PersistentVolumes/PersistentVolumeClaims existentes.
Para excluir uma classe de armazenamento chamada local, execute o seguinte comando:
kubectl delete storageclass local
Confira também
- O que é o Armazenamento de Contêineres do Azure?
- Instalar o Armazenamento de Contêineres do Azure com o AKS
- Usar o Armazenamento de Contêineres 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 AKS (Serviço de Kubernetes do Azure)
- Práticas recomendadas para discos de dados NVMe efêmeros no AKS (Serviço de Kubernetes do Azure)