Partilhar via


Usar o Armazenamento de Contêiner do Azure com SSD temporá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 Efémero com SSD temporário como armazenamento back-end para suas cargas de trabalho do Kubernetes. No final, você terá um pod que está usando SSD temporário como armazenamento.

O que é Ephemeral Disk?

Quando seu aplicativo precisa de latência de armazenamento inferior a milissegundos e não requer durabilidade de dados, você pode usar o Disco Efémero com o Armazenamento de Contêiner do Azure para atender aos 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 serão perdidos nesses discos se você parar/desalocar sua VM.

Existem dois tipos de disco efêmero disponíveis: NVMe local e SSD temporário. NVMe é projetado para transferência de dados de alta velocidade entre armazenamento e CPU. Escolha NVMe quando seu aplicativo precisar de IOPS ou taxa de transferência mais altas do que o SSD temporário ou exigir mais espaço de armazenamento. Lembre-se de que o Armazenamento de Contêiner do Azure só dá suporte à replicação síncrona de dados para NVMe local.

Devido à natureza efêmera desses discos, o Armazenamento de Contêiner do Azure dá suporte ao uso de volumes efêmeros genéricos por padrão ao usar disco efêmero. No entanto, certos casos de uso podem exigir volumes persistentes, mesmo que os dados não sejam duráveis, por exemplo, se você quiser usar arquivos YAML existentes ou modelos de implantação codificados para usar volumes persistentes e sua carga de trabalho oferecer suporte à replicação no nível do aplicativo para durabilidade. Nesses casos, você pode atualizar sua instalação do Armazenamento de Contêiner do Azure e adicionar a anotação acstor.azure.com/accept-ephemeral-storage=true em sua definição de declaração de volume persistente para dar suporte à criação de volumes persistentes a partir de pools de armazenamento em disco efêmeros.

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.

Escolha um tipo de VM que suporte SSD temporário

O disco efêmero só está disponível em determinados tipos de VMs. Certifique-se de escolher um tipo de VM com SSD temporário, como uma VM das séries Ev3 e Esv3.

Você pode executar o seguinte comando para obter o tipo de VM usado com seu pool de nós.

az aks nodepool list --resource-group <resource group> --cluster-name <cluster name> --query "[].{PoolName:name, VmSize:vmSize}" -o table

Segue-se um exemplo de saída.

PoolName    VmSize
----------  ---------------
nodepool1   standard_l8s_v3

Recomendamos que cada VM tenha um mínimo de quatro CPUs virtuais (vCPUs) e que cada pool de nós tenha pelo menos três nós.

Criar e anexar volumes efémeros genéricos

Siga estas etapas para criar e anexar um volume efêmero genérico.

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.

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 seção e prossiga para Exibir as classes de armazenamento disponíveis.

Siga estas etapas para criar um pool de armazenamento usando o SSD temporário.

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

  2. Cole o código a seguir e salve o arquivo. O valor do nome do pool de armazenamento pode ser o que você quiser.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: ephemeraldisk-temp
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: temp
    
  3. 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/ephemeraldisk-temp 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 ephemeraldisk-temp.

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

$ kubectl get sc | grep "^acstor-"
acstor-azuredisk-internal   disk.csi.azure.com               Retain          WaitForFirstConsumer   true                   65m
acstor-ephemeraldisk-temp        containerstorage.csi.azure.com   Delete          WaitForFirstConsumer   true                   2m27s

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. Implante um pod com um 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.

  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
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: ephemeralvolume
      volumes:
        - name: ephemeralvolume
          ephemeral:
            volumeClaimTemplate:
              metadata:
                labels:
                  type: my-ephemeral-volume
              spec:
                accessModes: [ "ReadWriteOnce" ]
                storageClassName: acstor-ephemeraldisk-temp # replace with the name of your storage class if different
                resources:
                  requests:
                    storage: 1Gi
    

    Quando alterar o tamanho de armazenamento dos volumes, certifique-se de que o tamanho é inferior à capacidade disponível do disco temporário de um único nó. Consulte Verificar a capacidade do disco temporário do nó.

  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 efêmero foi vinculada com êxito ao pod:

    kubectl describe pod fiopod
    kubectl describe pvc fiopod-ephemeralvolume
    
  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 SSD temporário como armazenamento e pode usá-lo para suas cargas de trabalho do Kubernetes.

Criar e anexar volumes persistentes

Para criar um volume persistente a partir de um pool de armazenamento em disco efêmero, você deve incluir uma anotação em suas PVCs (declarações de volume persistente) como salvaguarda para garantir que você pretenda usar volumes persistentes mesmo quando os dados são efêmeros. Além disso, você precisa habilitar o --ephemeral-disk-volume-type sinalizador com o PersistentVolumeWithAnnotation valor no cluster antes de criar suas declarações de volume persistente.

Siga estas etapas para criar e anexar um volume persistente.

1. Atualize sua instalação do Armazenamento de Contêiner do Azure

Execute o comando a seguir para atualizar sua instalação do Armazenamento de Contêiner do Azure para permitir a criação de volumes persistentes a partir de pools de armazenamento em disco efêmeros.

az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage ephemeralDisk --storage-pool-option Temp --ephemeral-disk-volume-type PersistentVolumeWithAnnotation 

2. Criar um pool de armazenamento

Crie um pool de armazenamento, que é um agrupamento lógico de armazenamento para seu cluster Kubernetes, definindo-o em um arquivo de manifesto YAML.

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 seção e prossiga para Exibir as classes de armazenamento disponíveis.

Siga estas etapas para criar um pool de armazenamento usando o SSD temporário.

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

  2. Cole o código a seguir e salve o arquivo. O valor do nome do pool de armazenamento pode ser o que você quiser.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: ephemeraldisk-temp
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: temp
    
  3. 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/ephemeraldisk-temp 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 ephemeraldisk-temp.

    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 .

3. Exiba 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 e implantar volumes.

Execute kubectl get sc para exibir as classes de armazenamento disponíveis. Você verá uma classe de armazenamento chamada acstor-<storage-pool-name>.

$ kubectl get sc | grep "^acstor-"
acstor-azuredisk-internal   disk.csi.azure.com               Retain          WaitForFirstConsumer   true                   65m
acstor-ephemeraldisk-temp        containerstorage.csi.azure.com   Delete          WaitForFirstConsumer   true                   2m27s

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.

4. Criar uma declaração de volume persistente

Uma declaração de volume persistente é 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: ephemeralpvc
      annotations:
        acstor.azure.com/accept-ephemeral-storage: "true"
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-ephemeraldisk-temp # replace with the name of your storage class if different
      resources:
        requests:
          storage: 100Gi
    

    Ao alterar o tamanho de armazenamento de seus volumes, verifique se o tamanho é menor do que a capacidade disponível do disco efêmero de um único nó. Consulte Verificar a capacidade do disco temporário do nó.

  3. Aplique o arquivo de manifesto YAML para criar o PVC.

    kubectl apply -f acstor-pvc.yaml
    

    Deverá ver um resultado semelhante a:

    persistentvolumeclaim/ephemeralpvc created
    

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

    kubectl describe pvc ephemeralpvc
    

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

5. 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: ephemeralpv
          persistentVolumeClaim:
            claimName: ephemeralpvc
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: ephemeralpv
    
  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 ephemeralpvc
    
  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 SSD temporário e pode usá-lo para suas cargas de trabalho do Kubernetes.

Gerenciar volumes e pools de armazenamento

Nesta seção, você aprenderá como verificar a capacidade disponível do disco efêmero para um único nó e como expandir ou excluir um pool de armazenamento.

Verificar a capacidade do disco temporário do nó

Um volume efêmero é alocado em um ú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 temporário do nó único.

Execute o seguinte comando para verificar a capacidade disponível do disco temporário para um único nó.

$ kubectl get diskpool -n acstor
NAME                                CAPACITY      AVAILABLE     USED        RESERVED    READY   AGE
ephemeraldisk-temp-diskpool-jaxwb   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-temp-diskpool-wzixx   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-temp-diskpool-xbtlj   75660001280   75031990272   628011008   560902144   True    21h

Neste exemplo, a capacidade disponível do disco temporário para um único nó é 75031990272 de bytes ou 69 GiB.

Expandir um pool de armazenamento

Você pode expandir pools de armazenamento apoiados por SSD temporário para aumentar rapidamente e sem tempo de inatividade. Atualmente, não há suporte para a redução de pools de armazenamento.

Como um pool de armazenamento apoiado pelo Disco Efémero usa recursos de armazenamento local nos nós de cluster (VMs) AKS, a expansão do pool de armazenamento requer a adição de outro nó ao cluster. Siga estas instruções para expandir o pool de armazenamento.

  1. Execute o seguinte comando para adicionar um nó ao cluster AKS. Substitua <cluster-name>, <nodepool name> e <resource-group-name> pelos seus próprios valores. Para obter o nome do pool de nós, execute kubectl get nodes.

    az aks nodepool add --cluster-name <cluster name> --name <nodepool name> --resource-group <resource group> --node-vm-size Standard_L8s_v3 --node-count 1 --labels acstor.azure.com/io-engine=acstor
    
  2. Execute kubectl get nodes e você verá que um nó foi adicionado ao cluster.

  3. Execute kubectl get sp -A e você verá que a capacidade do pool de armazenamento aumentou.

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