Compartilhar via


Usar discos ultra do Azure no Serviço de Kubernetes do Azure

Os discos ultra do Azure oferecem alta taxa de transferência, IOPS alta e armazenamento de disco consistente de baixa latência para seus aplicativos com estado. Um grande benefício dos discos ultra é a capacidade de alterar dinamicamente o desempenho do SSD junto com suas cargas de trabalho sem a necessidade de reiniciar os nós do agente. Os discos ultra são adequados para cargas de trabalho com uso intensivo de dados.

Este artigo descreve como configurar um cluster do AKS novo ou existente para usar os discos ultra do Azure.

Antes de começar

Esse recurso só pode ser definido na criação do cluster ou ao criar um pool de nós.

Limitações

  • Os discos ultra do Azure exigem pools de nós implantados em zonas de disponibilidade e regiões que suportem esses discos que só são suportados por séries de VM específicas. Consulte a tabela correspondente na seção Limitações do Disco Ultra para obter mais informações.
  • Discos Ultra não podem ser usados com alguns recursos e funcionalidades, como conjuntos de disponibilidade ou o Azure Disk Encryption. Consulte as Limitações do Disco Ultra para obter as informações mais recentes.

Crie um cluster que pode usar discos ultra

Crie um cluster AKS capaz de aproveitar os Discos Ultra do Azure usando os comandos da CLI a seguir. Use o parâmetro --enable-ultra-ssd para definir o recurso EnableUltraSSD.

az aks create \
    --resource-group MyResourceGroup \
    --name myAKSCluster \
    --location westus2 \
    --node-vm-size Standard_D2s_v3 \
    --zones 1 2 \
    --node-count 2 \
    --enable-ultra-ssd \
    --generate-ssh-keys

Se desejar criar um cluster sem suporte para disco ultra, você pode fazer isso omitindo o parâmetro --enable-ultra-ssd.

Habilitar Discos Ultra em um cluster existente

Você pode habilitar discos ultra em um cluster existente adicionando um novo pool de nós ao seu cluster com suporte para discos ultra. Configure um novo pool de nós para usar discos ultra usando o parâmetro --enable-ultra-ssd com o comando az aks nodepool add.

Se você quiser criar novos pools de nós sem suporte para discos ultra, você pode fazer isso excluindo o parâmetro --enable-ultra-ssd.

Usar discos ultra dinamicamente com uma classe de armazenamento

Para usar discos ultra em suas implantações ou conjuntos com estado, você pode usar uma classe de armazenamento para provisionamento dinâmico.

Criar a classe de armazenamento

Uma classe de armazenamento é usada para definir como uma unidade de armazenamento é criada dinamicamente com um volume persistente. Para obter mais informações sobre classes de armazenamento Kubernetes, confira Classes de Armazenamento Kubernetes. Neste exemplo, criaremos uma classe de armazenamento que faz referência aos discos ultra.

  1. Crie um arquivo chamado azure-ultra-disk-sc.yaml e copie-o para o manifesto a seguir:

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: ultra-disk-sc
    provisioner: disk.csi.azure.com # replace with "kubernetes.io/azure-disk" if aks version is less than 1.21
    volumeBindingMode: WaitForFirstConsumer # optional, but recommended if you want to wait until the pod that will use this disk is created 
    parameters:
      skuname: UltraSSD_LRS
      kind: managed
      cachingMode: None
      diskIopsReadWrite: "2000"  # minimum value: 2 IOPS/GiB 
      diskMbpsReadWrite: "320"   # minimum value: 0.032/GiB
    
  2. Crie a classe de armazenamento usando o comando kubectl apply e especifique seu arquivo azure-ultra-disk-sc.yaml.

    kubectl apply -f azure-ultra-disk-sc.yaml
    

    Sua saída deve ser parecida com o seguinte exemplo de saída:

    storageclass.storage.k8s.io/ultra-disk-sc created
    

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. Nesse caso, um PVC pode usar a classe de armazenamento criada anteriormente para criar um disco ultra.

  1. Crie um arquivo chamado azure-ultra-disk-pvc.yaml e copie-o para o manifesto a seguir:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ultra-disk
    spec:
      accessModes:
     - ReadWriteOnce
      storageClassName: ultra-disk-sc
      resources:
        requests:
          storage: 1000Gi
    

    A declaração solicita um disco chamado ultra-disk que tenha 1000 GB de tamanho com acesso ReadWriteOnce. A classe de armazenamento ultra-disk-sc é especificada como a classe de armazenamento.

  2. Crie a declaração de volume persistente usando o comando kubectl apply e especifique seu arquivo azure-ultra-disk-pvc.yaml.

    kubectl apply -f azure-ultra-disk-pvc.yaml
    

    Sua saída deve ser parecida com o seguinte exemplo de saída:

    persistentvolumeclaim/ultra-disk created
    

Usar o volume persistente

Quando a declaração do volume persistente tiver sido criada e o disco tiver sido provisionado com êxito, um pod poderá ser criado com acesso ao disco. O manifesto a seguir cria um pod NGINX básico que usa a declaração de volume persistente chamada ultra-disk para montar o disco do Azure no caminho /mnt/azure.

  1. Crie um arquivo chamado nginx-ultra.yaml e copie-o para o manifesto a seguir:

    kind: Pod
    apiVersion: v1
    metadata:
      name: nginx-ultra
    spec:
      containers:
     - name: nginx-ultra
        image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        volumeMounts:
        - mountPath: "/mnt/azure"
          name: volume
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: ultra-disk
    
  2. Crie o pod usando o comando kubectl apply e especifique seu arquivo nginx-ultra.yaml.

    kubectl apply -f nginx-ultra.yaml
    

    Sua saída deve ser parecida com o seguinte exemplo de saída:

    pod/nginx-ultra created
    

    Agora você tem um pod em execução com o disco do Azure montado no diretório /mnt/azure.

  3. Consulte seus detalhes de configuração usando o comando kubectl describe pod e especifique seu arquivo nginx-ultra.yaml.

    kubectl describe pod nginx-ultra
    

    Sua saída deve ser parecida com o seguinte exemplo de saída:

    [...]
    Volumes:
      volume:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  azure-managed-disk
        ReadOnly:   false
      default-token-smm2n:
        Type:        Secret (a volume populated by a Secret)
        SecretName:  default-token-smm2n
        Optional:    false
    [...]
    Events:
      Type    Reason                 Age   From                               Message
      ----    ------                 ----  ----                               -------
      Normal  Scheduled              2m    default-scheduler                  Successfully assigned mypod to aks-nodepool1-79590246-0
      Normal  SuccessfulMountVolume  2m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "default-token-smm2n"
      Normal  SuccessfulMountVolume  1m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "pvc-faf0f176-8b8d-11e8-923b-deb28c58d242"
    [...]
    

Próximas etapas