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
- Para obter mais informações sobre discos SSD Premium v2, consulte Como usar discos SSD Premium v2 do Azure.
- Para saber mais sobre práticas recomendadas de armazenamento, consulte Práticas recomendadas para armazenamento e backups no Serviço de Kubernetes do Azure (AKS)
Azure Kubernetes Service