Usar o Armazenamento de Contêineres do Azure com discos gerenciados do Azure
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 os Discos Gerenciados do Azure como armazenamento de back-end para suas cargas de trabalho do Kubernetes. No final, você terá um pod usando discos gerenciados do Azure como armazenamento.
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.35.0 ou posterior) da CLI do Azure. Consulte Como instalar a CLI do Azure. Se você estiver usando o ambiente Bash no Azure Cloud Shell, a versão mais recente já estará instalada. Se você planeja executar os comandos localmente em vez de no Azure Cloud Shell, certifique-se de executá-los com privilégios administrativos. Para obter mais informações, confira Introdução ao Azure Cloud Shell.
Você precisará do cliente de linha de comando do Kubernetes,
kubectl
. Ele já está instalado se você estiver usando o Azure Cloud Shell ou se você puder instalá-lo localmente executando o comandoaz aks install-cli
.Se você ainda não instalou o Armazenamento de Contêiner do Azure, siga as instruções descritas em Usar o Armazenamento de Contêiner do Azure com o Serviço de Kubernetes do Azure.
Verifique se a região de destino tem suporte nas regiões do Armazenamento de Contêineres do Azure.
- Para usar o Armazenamento de Contêineres do Azure com discos gerenciados do Azure, o cluster do AKS precisa ter um pool de nós de pelo menos três VMs de uso geral, como standard_d4s_v5 para os nós de cluster, cada uma com um mínimo de quatro CPUs virtuais (vCPUs).
Criar e anexar volumes persistentes
Siga estas etapas para criar e anexar um volume persistente.
1. Criar um pool de armazenamento
Primeiro, crie um pool de armazenamento, que é um agrupamento lógico de armazenamento para o cluster do Kubernetes, definindo-o em um arquivo de manifesto YAML.
Você tem as seguintes opções para criar um pool de armazenamento:
- Criar um pool de armazenamento dinâmico
- Criar um pool de armazenamento pré-provisionado usando discos gerenciados do Azure pré-provisionados
- Criar um pool de armazenamento dinâmico usando uma chave de criptografia própria (opcional)
Se você habilitou o Armazenamento de Contêiner do Azure usando os comandos az aks create
ou az aks update
, talvez já tenha um pool de armazenamento. Use kubectl get sp -n acstor
para obter a lista de pools de armazenamento. Se você já tiver um pool de armazenamento disponível que deseja usar, ignore esta etapa e prossiga para Exibir as classes de armazenamento disponíveis.
Criar um pool de armazenamento dinâmico
Siga estas etapas para criar um pool de armazenamento dinâmico para Discos do Azure.
Use seu editor de texto favorito para criar um arquivo de manifesto YAML, como
code acstor-storagepool.yaml
.Cole o código a seguir. O valor do nome do pool de armazenamento pode ser o que você quiser. Especifique o nível de desempenho e redundância para skuName. Os valores aceitáveis são Premium_LRS, Standard_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, PremiumV2_LRS e StandardSSD_ZRS. Especifique o valor da capacidade de armazenamento do pool em Gi ou Ti para armazenamento.
apiVersion: containerstorage.azure.com/v1 kind: StoragePool metadata: name: azuredisk namespace: acstor spec: poolType: azureDisk: skuName: Premium_LRS resources: requests: storage: 1Ti
Se você estiver usando discos UltraSSD_LRS ou PremiumV2_LRS, poderá definir IOPS e taxa de transferência usando os parâmetros
IOPSReadWrite
eMBpsReadWrite
na definição do seu pool de armazenamento.IOPSReadWrite
refere-se ao número de IOPS permitido para discos SSD Ultra e Premium v2 LRS. Para obter mais informações, consulte IOPS do Disco Ultra e IOPS do SSD Premium v2.MBpsReadWrite
refere-se à largura de banda permitida para discos SSD Ultra e Premium v2 LRS. MBps refere-se a milhões de bytes por segundo (MB/s = 10^6 Bytes por segundo). Para obter mais informações, consulte Taxa de transferência do Disco Ultra e Taxa de transferência do SSD Premium v2.apiVersion: containerstorage.azure.com/v1 kind: StoragePool metadata: name: azuredisk namespace: acstor spec: poolType: azureDisk: skuName: PremiumV2_LRS iopsReadWrite: 5000 mbpsReadWrite: 200 resources: requests: storage: 1Ti
Salve o arquivo de manifesto YAML e aplique-o para criar o pool de armazenamento.
kubectl apply -f acstor-storagepool.yaml
Quando a criação do pool de armazenamento for concluída, você verá uma mensagem semelhante à seguinte:
storagepool.containerstorage.azure.com/azuredisk created
Você também pode executar esse comando para verificar o status do pool de armazenamento. Substitua
<storage-pool-name>
pelo valor do nome do pool de armazenamento. Para esse exemplo, o valor seria azuredisk.kubectl describe sp <storage-pool-name> -n acstor
Quando o pool de armazenamento for criado, o Armazenamento de Contêineres do Azure criará uma classe de armazenamento em seu nome, usando a convenção de nomenclatura acstor-<storage-pool-name>
. Agora você pode exibir as classes de armazenamento disponíveis e criar uma declaração de volume persistente.
Criar um pool de armazenamento pré-provisionado
Se você tiver discos gerenciados do Azure que já estão provisionados, poderá criar um pool de armazenamento pré-provisionado usando esses discos. Como os discos já estão provisionados, você não precisa especificar o skuName ou a capacidade de armazenamento ao criar o pool de armazenamento.
Siga essas etapas para criar um pool de armazenamento pré-provisionado para os Discos do Azure.
Entre no portal do Azure.
Para cada disco que você deseja usar, navegue até o disco gerenciado do Azure e selecione Configurações>Propriedades. Copie a cadeia de caracteres inteira em ID do Recurso e coloque-a em um arquivo de texto.
Use seu editor de texto favorito para criar um arquivo de manifesto YAML, como
code acstor-storagepool.yaml
.Cole o código a seguir. O valor do nome do pool de armazenamento pode ser o que você quiser. Substitua
<resource-id>
pela ID do recurso de cada disco gerenciado. Salve o arquivo.apiVersion: containerstorage.azure.com/v1 kind: StoragePool metadata: name: sp-preprovisioned namespace: acstor spec: poolType: azureDisk: disks: - reference <resource-id1> - reference <resource-id2>
Aplique o arquivo de manifesto YAML para criar o pool de armazenamento.
kubectl apply -f acstor-storagepool.yaml
Quando a criação do pool de armazenamento for concluída, você verá uma mensagem semelhante à seguinte:
storagepool.containerstorage.azure.com/sp-preprovisioned created
Você também pode executar esse comando para verificar o status do pool de armazenamento. Substitua
<storage-pool-name>
pelo valor do nome do pool de armazenamento. Para este exemplo, o valor seria sp-preprovisioned.kubectl describe sp <storage-pool-name> -n acstor
Quando o pool de armazenamento for criado, o Armazenamento de Contêineres do Azure criará uma classe de armazenamento em seu nome, usando a convenção de nomenclatura acstor-<storage-pool-name>
. Agora você pode exibir as classes de armazenamento disponíveis e criar uma declaração de volume persistente.
Criar um pool de armazenamento dinâmico usando uma chave de criptografia própria (opcional)
Todos os dados em uma conta de armazenamento do Azure são criptografados em repouso. Por padrão, os dados são criptografados com chaves gerenciadas pela Microsoft. Para obter mais controle sobre chaves de criptografia, você pode fornecer CMK (chaves gerenciadas pelo cliente) ao criar seu pool de armazenamento para criptografar os volumes persistentes que você criará.
Para usar uma chave própria para criptografia do lado do servidor, você precisa ter um Azure Key Vault com uma chave. O Key Vault deve ter a proteção de limpeza habilitada e deve usar o modelo de permissão RBAC do Azure. Saiba mais sobre as chaves gerenciadas pelo cliente no Linux.
Ao criar o pool de armazenamento, você deve definir os parâmetros do CMK. Os parâmetros de criptografia do CMK necessários são:
- keyVersion especifica a versão da chave a ser usada
- keyName é o nome da chave
- keyVaultUri é o identificador de recurso uniforme do Azure Key Vault, por exemplo,
https://user.vault.azure.net
- Identity especifica uma identidade gerenciada com acesso ao cofre, por exemplo,
/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourcegroups/MC_user-acstor-westus2-rg_user-acstor-westus2_westus2/providers/Microsoft.ManagedIdentity/userAssignedIdentities/user-acstor-westus2-agentpool
Siga essas etapas para criar um pool de armazenamento usando sua própria chave de criptografia. Todos os volumes persistentes criados a partir desse pool de armazenamento serão criptografados usando a mesma chave.
Use seu editor de texto favorito para criar um arquivo de manifesto YAML, como
code acstor-storagepool-cmk.yaml
.Cole o código a seguir, forneça os parâmetros necessários e salve o arquivo. O valor do nome do pool de armazenamento pode ser o que você quiser. Especifique o nível de desempenho e redundância para skuName. Os valores aceitáveis são Premium_LRS, Standard_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, PremiumV2_LRS e StandardSSD_ZRS. Especifique o valor da capacidade de armazenamento do pool em Gi ou Ti para armazenamento. Certifique-se de fornecer os parâmetros de criptografia CMK.
apiVersion: containerstorage.azure.com/v1 kind: StoragePool metadata: name: azuredisk namespace: acstor spec: poolType: azureDisk: skuName: Premium_LRS encryption: { keyVersion: "<key-version>", keyName: "<key-name>", keyVaultUri: "<key-vault-uri>", identity: "<identity>" } resources: requests: storage: 1Ti
Aplique o arquivo de manifesto YAML para criar o pool de armazenamento.
kubectl apply -f acstor-storagepool-cmk.yaml
Quando a criação do pool de armazenamento for concluída, você verá uma mensagem semelhante à seguinte:
storagepool.containerstorage.azure.com/azuredisk created
Você também pode executar esse comando para verificar o status do pool de armazenamento. Substitua
<storage-pool-name>
pelo valor do nome do pool de armazenamento. Para esse exemplo, o valor seria azuredisk.kubectl describe sp <storage-pool-name> -n acstor
Quando o pool de armazenamento for criado, o Armazenamento de Contêineres do Azure criará uma classe de armazenamento em seu nome, usando a convenção de nomenclatura acstor-<storage-pool-name>
.
2. Exibir as classes de armazenamento disponíveis
Quando o pool de armazenamento estiver pronto para uso, você deverá selecionar uma classe de armazenamento para definir como o armazenamento é criado dinamicamente ao criar declarações de volume persistentes e implantar volumes persistentes.
Execute kubectl get sc
para exibir as classes de armazenamento disponíveis. Você deve ver uma classe de armazenamento chamada acstor-<storage-pool-name>
.
Importante
Não use a classe de armazenamento marcada como interna. Ela é uma classe de armazenamento interna necessária para que o Armazenamento de Contêineres do Azure funcione.
3. Criar uma declaração de volume persistente
Um PVC (declaração de volume persistente) é usado para provisionar automaticamente o armazenamento com base em uma classe de armazenamento. Siga essas etapas para criar um PVC usando a nova classe de armazenamento.
Use seu editor de texto favorito para criar um arquivo de manifesto YAML, como
code acstor-pvc.yaml
.Cole o seguinte código e salve o arquivo. O valor
name
do PVC pode ser o que você quiser.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azurediskpvc spec: accessModes: - ReadWriteOnce storageClassName: acstor-azuredisk # replace with the name of your storage class if different resources: requests: storage: 100Gi
Aplique o arquivo de manifesto YAML para criar o PVC.
kubectl apply -f acstor-pvc.yaml
Você deve ver uma saída semelhante a:
persistentvolumeclaim/azurediskpvc created
Você pode verificar o status do PVC executando o seguinte comando:
kubectl describe pvc azurediskpvc
Depois que o PVC for criado, ele estará pronto para uso por um pod.
4. Implantar um pod e anexar um volume persistente
Crie um pod usando FIO (Testador de E/S Flexível) para simulação de carga de trabalho e parâmetro de comparação e especifique um caminho de montagem para o volume persistente. Para claimName, use o valor do nome usado ao criar a declaração de volume persistente.
Use seu editor de texto favorito para criar um arquivo de manifesto YAML, como
code acstor-pod.yaml
.Cole o seguinte código e salve o arquivo.
kind: Pod apiVersion: v1 metadata: name: fiopod spec: nodeSelector: acstor.azure.com/io-engine: acstor volumes: - name: azurediskpv persistentVolumeClaim: claimName: azurediskpvc containers: - name: fio image: nixery.dev/shell/fio args: - sleep - "1000000" volumeMounts: - mountPath: "/volume" name: azurediskpv
Aplique o arquivo de manifesto YAML para implantar o pod.
kubectl apply -f acstor-pod.yaml
Será exibida uma saída semelhante à seguinte:
pod/fiopod created
Verifique se o pod está em execução e se a declaração de volume persistente foi associada com êxito ao pod:
kubectl describe pod fiopod kubectl describe pvc azurediskpvc
Verifique o teste FIO para ver seu status atual:
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
Agora você implantou um pod que está usando os Discos do Azure como armazenamento e pode usá-lo para suas cargas de trabalho do Kubernetes.
Gerenciar volumes persistentes e pools de armazenamento
Agora você criou um volume persistente, é possível desanexar e reanexar o volume conforme necessário. Também é possível expandir ou excluir um pool de armazenamento.
Desanexar e anexar novamente um volume persistente
Para desanexar um volume persistente, exclua o pod ao qual o volume persistente está anexado. Substitua <pod-name>
pelo nome do pod, por exemplo, fiopod.
kubectl delete pods <pod-name>
Para anexar novamente um volume persistente, basta referencia o nome de declaração do volume persistente no arquivo de manifesto YAML, conforme descrito em Implantar um pod e anexar um volume persistente.
Para verificar a qual volume persistente uma declaração de volume persistente está associada, execute kubectl get pvc <persistent-volume-claim-name>
.
Expandir um pool de armazenamento
Você pode expandir pools de armazenamento com suporte dos Discos do Azure para escalar verticalmente rapidamente e sem tempo de inatividade. Atualmente, não há suporte para redução de pools de armazenamento. Não há suporte para expansão do pool de armazenamento para Discos Ultra ou SSD Premium v2.
Observação
Expandir um pool de armazenamento pode aumentar seus custos para o Armazenamento de Contêineres do Azure e os Discos do Azure. Consulte a página de preços do Armazenamento de contêineres do Azure e cobrança em Entenda o Armazenamento de Contêineres do Azure.
Atualmente, a expansão do pool de armazenamento tem a seguinte limitação ao usar Premium_LRS
, Standard_LRS
, StandardSSD_LRS
, Premium_ZRS
e StandardSSD_ZRS
SKUs:
- Se o pool de armazenamento existente for menor que 4 TiB (4.096 GiB), você só poderá expandi-lo até 4.095 GiB. Para evitar erros, não tente expandir seu pool de armazenamento atual além de 4.095 GiB se ele for inicialmente menor que 4 TiB (4.096 GiB). Pools de armazenamento > de 4 TiB podem ser expandidos até a capacidade máxima de armazenamento disponível.
Siga essas instruções para expandir um pool de armazenamento existente para os Discos do Azure.
Usando um editor de texto, abra o arquivo de manifesto YAML que você usou para criar o pool de armazenamento, por exemplo
code acstor-storagepool.yaml
.Substitua a entrada de armazenamento especificada no arquivo de manifesto YAML pelo valor desejado. Esse valor deve ser maior do que a capacidade atual do pool de armazenamento. Por exemplo, se a especificação estiver definida como
storage: 1Ti
, altere-a parastorage: 2Ti
. Se você criou um pool de armazenamento pré-provisionado, não haverá uma entrada de armazenamento porque o pool de armazenamento herdou o tamanho da capacidade dos Discos do Azure pré-provisionados. Se você não vir uma entrada de armazenamento no YAML, adicione o seguinte código especificando a capacidade de armazenamento desejada e salve o arquivo de manifesto:spec: resources: requests: storage: 2Ti
Observação
Se você tiver dois discos em um pool de armazenamento com capacidade de 1 TiB cada e editar o arquivo de manifesto YAML para a leitura de storage: 4Ti
, ambos os discos serão expandidos para 2 TiB quando o YAML for aplicado, proporcionando uma nova capacidade total de 4 TiB.
Aplique o arquivo de manifesto YAML para expandir o pool de armazenamento.
kubectl apply -f acstor-storagepool.yaml
Execute esse comando para verificar o status do pool de armazenamento. Substitua
<storage-pool-name>
pelo valor do nome do pool de armazenamento.kubectl describe sp <storage-pool-name> -n acstor
Você deve ver uma mensagem como "o pool de armazenamento está se expandindo". Execute o comando novamente após alguns minutos e a mensagem deve ter sumido.
Execute
kubectl get sp -A
e o pool de armazenamento deve refletir o novo tamanho.
Excluir um pool de armazenamento
Se você quiser excluir um pool de armazenamento, execute o comando a seguir. Substitua <storage-pool-name>
pelo nome do pool de armazenamento.
kubectl delete sp -n acstor <storage-pool-name>