Utilizar discos ultra do Azure no Azure Kubernetes Service

Os discos ultra do Azure oferecem armazenamento de discos de débito elevado, IOPS elevado e baixa latência consistente para as aplicações com estado. Um dos principais benefícios dos discos ultra é a capacidade de alterar dinamicamente o desempenho do SSD juntamente com as cargas de trabalho sem a necessidade de reiniciar os nós do agente. Os discos ultra são adequados para cargas de trabalho com uma utilização intensiva de dados.

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

Antes de começar

Esta funcionalidade só pode ser definida na criação do cluster ou ao criar um conjunto de nós.

Limitações

  • Os discos ultra do Azure necessitam de conjuntos de nós implementados em zonas de disponibilidade e regiões que suportem estes discos e só são suportados por séries de VM específicas. Reveja a tabela correspondente na secção Limitações do disco Ultra para obter mais informações.
  • Os discos Ultra não podem ser utilizados com algumas funcionalidades, como os conjuntos de disponibilidade ou o Azure Disk Encryption. Veja as limitações do disco Ultra para obter as informações mais recentes.

Criar um cluster que possa utilizar discos ultra

Crie um cluster do AKS que consiga tirar partido dos Discos Ultra do Azure com os seguintes comandos da CLI. Utilize o --enable-ultra-ssd parâmetro para definir a EnableUltraSSD funcionalidade.

az aks create -g MyResourceGroup -n myAKSCluster -l westus2 --node-vm-size Standard_D2s_v3 --zones 1 2 --node-count 2 --enable-ultra-ssd

Se quiser criar um cluster sem suporte para discos ultra, pode fazê-lo ao omitir o --enable-ultra-ssd parâmetro .

Ativar discos ultra num cluster existente

Pode ativar discos ultra num cluster existente ao adicionar um novo conjunto de nós ao cluster que suporta discos ultra. Configure um novo conjunto de nós para utilizar discos ultra com o --enable-ultra-ssd parâmetro com o az aks nodepool add comando .

Se quiser criar novos conjuntos de nós sem suporte para discos ultra, pode fazê-lo excluindo o --enable-ultra-ssd parâmetro .

Utilizar discos ultra dinamicamente com uma classe de armazenamento

Para utilizar discos ultra nas suas implementações ou conjuntos com monitorização de estado, pode utilizar uma classe de armazenamento para o aprovisionamento dinâmico.

Criar a classe de armazenamento

Uma classe de armazenamento é utilizada para definir como uma unidade de armazenamento é criada dinamicamente com um volume persistente. Para obter mais informações sobre as classes de armazenamento do Kubernetes, veja Classes de armazenamento do Kubernetes. Neste exemplo, vamos criar uma classe de armazenamento que referencia discos ultra.

  1. Crie um ficheiro com o nome azure-ultra-disk-sc.yaml e copie no seguinte manifesto:

    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 com o kubectl apply comando e especifique o seu azure-ultra-disk-sc.yaml ficheiro.

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

    O resultado deve assemelhar-se ao seguinte resultado de exemplo:

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

Criar uma afirmação de volume persistente

Uma afirmação de volume persistente (PVC) é utilizada para aprovisionar automaticamente o armazenamento com base numa classe de armazenamento. Neste caso, um PVC pode utilizar a classe de armazenamento criada anteriormente para criar um disco ultra.

  1. Crie um ficheiro com o nome azure-ultra-disk-pvc.yaml e copie no seguinte manifesto:

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

    A afirmação pede um disco com o nome ultra-disk de 1000 GB de tamanho com acesso ReadWriteOnce . A classe de armazenamento ultra-disk-sc é especificada como a classe de armazenamento.

  2. Crie a afirmação de volume persistente com o kubectl apply comando e especifique o ficheiro azure-ultra-disk-pvc.yaml .

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

    O resultado deve assemelhar-se ao seguinte resultado de exemplo:

    persistentvolumeclaim/ultra-disk created
    

Utilizar o volume persistente

Assim que a afirmação de volume persistente tiver sido criada e o disco for aprovisionado com êxito, pode ser criado um pod com acesso ao disco. O manifesto seguinte cria um pod NGINX básico que utiliza a afirmação de volume persistente denominada ultra-disco para montar o disco do Azure no caminho /mnt/azure.

  1. Crie um ficheiro com o nome nginx-ultra.yaml e copie no seguinte manifesto:

    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 com kubectl apply o comando e especifique o seu nginx-ultra.yaml ficheiro.

    kubectl apply -f nginx-ultra.yaml
    

    O resultado deve assemelhar-se ao seguinte resultado de exemplo:

    pod/nginx-ultra created
    

    Tem agora um pod em execução com o disco do Azure montado no /mnt/azure diretório.

  3. Veja os detalhes de configuração com o kubectl describe pod comando e especifique o ficheiro nginx-ultra.yaml .

    kubectl describe pod nginx-ultra
    

    O resultado deve assemelhar-se ao seguinte resultado de exemplo:

    [...]
    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"
    [...]
    

Passos seguintes