Partilhar via


Usar o Armazenamento de Contêiner do Azure com discos gerenciados do Azure

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 discos gerenciados do Azure como armazenamento back-end para suas cargas de trabalho do Kubernetes. No final, você terá um pod que está usando discos gerenciados do Azure como seu armazenamento.

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.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á está 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, consulte 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 puder instalá-lo localmente executando o az aks install-cli comando.

  • Se você ainda não instalou o Armazenamento de Contêiner do Azure, siga as instruções em Usar o Armazenamento de Contêiner do Azure com o Serviço Kubernetes do Azure.

  • Verifique se a sua região de destino tem suporte nas regiões de Armazenamento de Contêiner do Azure.

  • Para usar o Armazenamento de Contêiner do Azure com discos gerenciados do Azure, seu cluster AKS deve ter um pool de nós de pelo menos três VMs de uso geral, como standard_d4s_v5 para os nós do 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 seu cluster Kubernetes, definindo-o em um arquivo de manifesto YAML.

Você tem as seguintes opções para criar um pool de armazenamento:

Se você habilitou o Armazenamento de Contêiner do Azure usando az aks create comandos or 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.

  1. Use seu editor de texto favorito para criar um arquivo de manifesto YAML como code acstor-storagepool.yaml.

  2. Cole o código seguinte. O valor do nome do pool de armazenamento pode ser o que você quiser. Para skuName, especifique o nível de desempenho e redundância. Os valores aceitáveis são Premium_LRS, Standard_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, PremiumV2_LRS e StandardSSD_ZRS. Para armazenamento, especifique a quantidade de capacidade de armazenamento para o pool em Gi ou Ti.

    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 IOPSReadWrite parâmetros e MBpsReadWrite na definição do pool de armazenamento.

    IOPSReadWrite refere-se ao número de IOPS permitidos para discos Ultra SSD e Premium v2 LRS. Para obter mais informações, consulte Ultra Disk IOPS e Premium SSD v2 IOPS.

    MBpsReadWrite refere-se à largura de banda permitida para discos Ultra SSD 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 Ultra Disk e Taxa de transferência 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
    
  3. 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 estiver concluída, você verá uma mensagem como:

    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 este exemplo, o valor seria azuredisk.

    kubectl describe sp <storage-pool-name> -n acstor
    

Quando o pool de armazenamento é criado, o Armazenamento de Contêiner do Azure criará uma classe de armazenamento em seu nome, usando a convenção acstor-<storage-pool-name>de nomenclatura . 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, não é necessário especificar o skuName ou a capacidade de armazenamento ao criar o pool de armazenamento.

Siga estas etapas para criar um pool de armazenamento pré-provisionado para Discos do Azure.

  1. Inicie sessão no portal do Azure.

  2. Para cada disco que você deseja usar, navegue até o disco gerenciado do Azure e selecione Propriedades de Configurações>. Copie a cadeia de caracteres inteira em ID do recurso e coloque-a em um arquivo de texto.

  3. Use seu editor de texto favorito para criar um arquivo de manifesto YAML como code acstor-storagepool.yaml.

  4. Cole o código seguinte. O valor do nome do pool de armazenamento pode ser o que você quiser. Substitua <resource-id> pelo ID do recurso de cada disco gerenciado. Guarde o ficheiro.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: sp-preprovisioned
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          disks:
            - reference <resource-id1>
            - reference <resource-id2>
    
  5. 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 estiver concluída, você verá uma mensagem como:

    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. Neste exemplo, o valor seria sp-preprovisioned.

    kubectl describe sp <storage-pool-name> -n acstor
    

Quando o pool de armazenamento é criado, o Armazenamento de Contêiner do Azure criará uma classe de armazenamento em seu nome, usando a convenção acstor-<storage-pool-name>de nomenclatura . 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 sua própria chave de criptografia (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 chaves gerenciadas pelo cliente (CMK) ao criar seu pool de armazenamento para criptografar os volumes persistentes que você criará.

Para usar sua própria chave para criptografia do lado do servidor, você deve ter um Cofre da Chave do Azure com uma chave. O Cofre da Chave deve ter a proteção contra limpeza habilitada e deve usar o modelo de permissão RBAC do Azure. Saiba mais sobre chaves gerenciadas pelo cliente no Linux.

Ao criar seu pool de armazenamento, você deve definir os parâmetros CMK. Os parâmetros de criptografia CMK necessários são:

  • keyVersion especifica a versão da chave a ser usada
  • keyName é o nome da sua chave
  • keyVaultUri é o identificador de recurso uniforme do Cofre de Chaves do Azure, 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 estas 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.

  1. Use seu editor de texto favorito para criar um arquivo de manifesto YAML como code acstor-storagepool-cmk.yaml.

  2. 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. Para skuName, especifique o nível de desempenho e redundância. Os valores aceitáveis são Premium_LRS, Standard_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, PremiumV2_LRS e StandardSSD_ZRS. Para armazenamento, especifique a quantidade de capacidade de armazenamento para o pool em Gi ou Ti. 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
    
  3. 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 estiver concluída, você verá uma mensagem como:

    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 este exemplo, o valor seria azuredisk.

    kubectl describe sp <storage-pool-name> -n acstor
    

Quando o pool de armazenamento é criado, o Armazenamento de Contêiner do Azure criará uma classe de armazenamento em seu nome, usando a convenção acstor-<storage-pool-name>de nomenclatura .

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ê verá uma classe de armazenamento chamada acstor-<storage-pool-name>.

Importante

Não use a classe de armazenamento marcada como interna. É uma classe de armazenamento interno necessária para que o Armazenamento de Contêiner do Azure funcione.

3. Criar uma declaração de volume persistente

Uma declaração de volume persistente (PVC) é usada para provisionar automaticamente o armazenamento com base em uma classe de armazenamento. Siga estas etapas para criar um PVC usando a nova classe de armazenamento.

  1. Use seu editor de texto favorito para criar um arquivo de manifesto YAML como code acstor-pvc.yaml.

  2. Cole o código a seguir e salve o arquivo. O valor do PVC name pode ser o que 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
    
  3. Aplique o arquivo de manifesto YAML para criar o PVC.

    kubectl apply -f acstor-pvc.yaml
    

    Deverá ver um resultado semelhante a:

    persistentvolumeclaim/azurediskpvc created
    

    Você pode verificar o status do PVC executando o seguinte comando:

    kubectl describe pvc azurediskpvc
    

Uma vez criado, o PVC está pronto para ser usado por um pod.

4. Implante um pod e anexe um volume persistente

Crie um pod usando Fio (Flexible I/O Tester) para benchmarking e simulação de carga de trabalho e especifique um caminho de montagem para o volume persistente. Para claimName, use o valor name que você usou ao criar a declaração de volume persistente.

  1. Use seu editor de texto favorito para criar um arquivo de manifesto YAML como code acstor-pod.yaml.

  2. Cole o código a seguir 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
    
  3. Aplique o arquivo de manifesto YAML para implantar o pod.

    kubectl apply -f acstor-pod.yaml
    

    Deverá ver um resultado semelhante ao seguinte:

    pod/fiopod created
    
  4. Verifique se o pod está em execução e se a declaração de volume persistente foi vinculada com êxito ao pod:

    kubectl describe pod fiopod
    kubectl describe pvc azurediskpvc
    
  5. Verifique o teste de 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 o Azure Disks como seu armazenamento e pode usá-lo para suas cargas de trabalho do Kubernetes.

Gerenciar volumes persistentes e pools de armazenamento

Agora que você criou um volume persistente, pode desanexá-lo e reanexá-lo conforme necessário. Você também pode expandir ou excluir um pool de armazenamento.

Desanexar e reanexar um volume persistente

Para desanexar um volume persistente, exclua o pod ao qual o volume persistente está conectado. Substitua <pod-name> pelo nome do pod, por exemplo , fiopod.

kubectl delete pods <pod-name>

Para reanexar um volume persistente, basta fazer referência ao nome da declaração de 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á vinculada, execute kubectl get pvc <persistent-volume-claim-name>.

Expandir um pool de armazenamento

Você pode expandir os pools de armazenamento apoiados pelos Discos do Azure para aumentar rapidamente e sem tempo de inatividade. Atualmente, não há suporte para a redução de pools de armazenamento. A expansão do pool de armazenamento não é compatível com Ultra Disks ou SSD Premium v2.

Nota

Expandir um pool de armazenamento pode aumentar seus custos para o Armazenamento de Contêiner do Azure e os Discos do Azure. Consulte a página de preços do Armazenamento de Contêiner do Azure e Entenda a cobrança do Armazenamento de Contêiner do Azure.

Atualmente, a expansão do pool de armazenamento tem a seguinte limitação ao usar Premium_LRS, Standard_LRS, StandardSSD_LRS, Premium_ZRSe StandardSSD_ZRS SKUs:

  • Se o pool de armazenamento existente for inferior a 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). Os pools > de armazenamento de 4 TiB podem ser expandidos até a capacidade máxima de armazenamento disponível.

Siga estas instruções para expandir um pool de armazenamento existente para Discos do Azure.

  1. 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.

  2. 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 para storage: 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
    

Nota

Se você tiver dois discos em um pool de armazenamento com capacidade de 1 TiB cada, e editar o arquivo de manifesto YAML para ler storage: 4Ti, ambos os discos serão expandidos para 2 TiB quando o YAML for aplicado, dando a você uma nova capacidade total de 4 TiB.

  1. Aplique o arquivo de manifesto YAML para expandir o pool de armazenamento.

    kubectl apply -f acstor-storagepool.yaml 
    
  2. Execute este 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ê verá uma mensagem como "o pool de armazenamento está se expandindo". Execute o comando novamente depois de alguns minutos e a mensagem deve desaparecer.

  3. Execute kubectl get sp -A e o pool de armazenamento deve refletir o novo tamanho.

Excluir um pool de armazenamento

Se desejar excluir um pool de armazenamento, execute o seguinte comando. Substitua <storage-pool-name> pelo nome do pool de armazenamento.

kubectl delete sp -n acstor <storage-pool-name>

Consulte também