Compartilhar via


Usar discos do SSD Premium do Azure v2 no Serviço de Kubernetes do Azure

Os discos SSD Premium v2 do Azure oferecem cargas de trabalho corporativas intensas de E/S, uma latência de disco de submilissegundo consistente e alta IOPS e taxa de transferência. O desempenho (capacidade, taxa de transferência e IOPS) dos discos SSD Premium v2 pode ser configurado de forma independente a qualquer momento, tornando mais fácil para que mais cenários sejam econômicos ao atender às necessidades de desempenho.

Este artigo descreve como configurar um cluster do AKS novo ou existente para usar discos SSD Premium do Azure v2.

Antes de começar

Antes de criar ou atualizar um cluster do AKS que é capaz de usar discos SSD Premium v2 do Azure, você precisa criar um cluster do AKS na mesma região e zona de disponibilidade que dá suporte a Armazenamento Premium e anexar os discos seguindo as etapas abaixo.

Para um cluster do AKS existente, você pode habilitar discos SSD Premium v2 adicionando um novo pool de nós ao cluster e anexando os discos seguindo as etapas abaixo.

Importante

Os discos SSD Premium v2 do Azure exigem pools de nós implantados em regiões que dão suporte a esses discos. Para obter uma lista de regiões com suporte, consulte Regiões com suporte a discos SSD Premium v2.

Limitações

  • Os discos SSD Premium v2 do Azure têm certas limitações que você precisa estar ciente. Para ver uma lista completa, confira as Limitações do SSD Premium v2.

Usar discos SSD Premium v2 dinamicamente com uma classe de armazenamento

Para usar discos SSD Premium v2 em uma implantação ou conjunto 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, consulte Classes de Armazenamento Kubernetes.

Neste exemplo, você cria uma classe de armazenamento que faz referência a discos SSD Premium v2. Crie um arquivo chamado azure-pv2-disk-sc.yaml e copie-o para o manifesto a seguir.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: premium2-disk-sc
parameters:
   cachingMode: None
   skuName: PremiumV2_LRS
   DiskIOPSReadWrite: "4000"
   DiskMBpsReadWrite: "1000"
provisioner: disk.csi.azure.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true

Crie a classe de armazenamento com o comando kubectl apply e especifique seu arquivo azure-pv2-disk-sc.yaml:

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

A saída do comando é semelhante ao seguinte exemplo:

storageclass.storage.k8s.io/premium2-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.

Crie um arquivo chamado azure-pv2-disk-pvc.yaml e copie-o para o manifesto a seguir. A declaração solicita um disco chamado premium2-disk que tenha 1000 GB de tamanho com acesso ReadWriteOnce. A classe de armazenamento premium2-disk-sc é especificada como a classe de armazenamento.

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

Crie a declaração de volume persistente com o comando kubectl apply e especifique seu arquivo azure-pv2-disk-pvc.yaml:

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

A saída do comando é semelhante ao seguinte exemplo:

persistentvolumeclaim/premium2-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 premium2-disk para montar o disco do Azure no caminho /mnt/azure.

Crie um arquivo chamado nginx-premium2.yaml e copie-o para o manifesto a seguir.

kind: Pod
apiVersion: v1
metadata:
  name: nginx-premium2
spec:
  containers:
  - name: nginx-premium2
    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: premium2-disk

Crie o pod com o comando kubectl apply, conforme mostrado no exemplo a seguir:

kubectl apply -f nginx-premium2.yaml

A saída do comando é semelhante ao seguinte exemplo:

pod/nginx-premium2 created

Agora você tem um pod em execução com o disco do Azure montado no diretório /mnt/azure. Essa configuração pode ser vista ao inspecionar o pod via kubectl describe pod nginx-premium2, conforme mostrado no exemplo condensado a seguir:

kubectl describe pod nginx-premium2

[...]
Volumes:
  volume:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  premium2-disk
    ReadOnly:   false
  kube-api-access-sh59b:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/memory-pressure:NoSchedule op=Exists
                             node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason                  Age    From                     Message
  ----    ------                  ----   ----                     -------
  Normal  Scheduled               7m58s  default-scheduler        Successfully assigned default/nginx-premium2 to aks-agentpool-12254644-vmss000006
  Normal  SuccessfulAttachVolume  7m46s  attachdetach-controller  AttachVolume.Attach succeeded for volume "pvc-ff39fb64-1189-4c52-9a24-e065b855b886"
  Normal  Pulling                 7m39s  kubelet                  Pulling image "mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine"
  Normal  Pulled                  7m38s  kubelet                  Successfully pulled image "mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine" in 1.192915667s
  Normal  Created                 7m38s  kubelet                  Created container nginx-premium2
  Normal  Started                 7m38s  kubelet                  Started container nginx-premium2
[...]

Definir limites de IOPS e taxa de transferência

Atualmente, não há suporte para Operações de Entrada/Saída por Segundo (IOPS) e limites de taxa de transferência para o disco SSD do Azure Premium v2 por meio do AKS. Para ajustar o desempenho, você pode usar o comando az disk update da CLI do Azure incluindo os parâmetros --disk-iops-read-write e --disk-mbps-read-write.

O exemplo a seguir atualiza a leitura/gravação de IOPS de disco para 5000 e os Mbps para 200. Para --resource-group, o valor deve ser o segundo grupo de recursos criado automaticamente para armazenar os nós de trabalho do AKS com a convenção de nomenclatura MC_resourcegroupname_clustername_location. Para obter mais informações, confira Por que dois grupos de recursos são criados com o AKS?.

O valor do parâmetro --name é o nome do volume criado usando StorageClass e começa com pvc-. Para identificar o nome do disco, você pode executar kubectl get pvc ou navegar até o grupo de recursos secundário no portal para encontrá-lo. Consulte Gerenciar recursos do portal do Azure para saber mais.

az disk update --subscription subscriptionName --resource-group myResourceGroup --name diskName --disk-iops-read-write=5000 --disk-mbps-read-write=200  

Próximas etapas