Usar discos SSD Premium v2 do Azure no Serviço Kubernetes do Azure
Os discos SSD Premium v2 do Azure oferecem cargas de trabalho empresariais intensas de E/S, uma latência de disco de submilissegundos consistente e IOPS e taxa de transferência elevadas. 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 mais cenários serem econômicos e, ao mesmo tempo, atender às necessidades de desempenho.
Este artigo descreve como configurar um cluster AKS novo ou existente para usar discos SSD Premium v2 do Azure.
Antes de começar
Antes de criar ou atualizar um cluster AKS que possa usar discos SSD Premium v2 do Azure, você precisa criar um cluster AKS na mesma região e zona de disponibilidade que ofereça suporte ao Armazenamento Premium e anexar os discos seguindo as etapas abaixo.
Para um cluster AKS existente, você pode habilitar discos SSD Premium v2 adicionando um novo pool de nós ao cluster e, em seguida, anexar os discos seguindo as etapas abaixo.
Importante
Os discos SSD Premium v2 do Azure exigem pools de nós implantados em regiões que oferecem suporte a esses discos. Para obter uma lista de regiões suportadas, consulte Regiões suportadas por disco SSD Premium v2.
Limitações
- Os discos SSD Premium v2 do Azure têm certas limitações que você precisa estar ciente. Para obter uma lista completa, consulte Limitações do SSD Premium v2.
Use discos SSD Premium v2 dinamicamente com uma classe de armazenamento
Para usar discos SSD Premium v2 em uma implantação ou conjunto com monitoração de 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 do Kubernetes, consulte Classes de armazenamento do 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 no 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
Uma declaração de volume persistente (PVC) é usada 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 ultra disco.
Crie um arquivo chamado azure-pv2-disk-pvc.yaml
e copie no manifesto a seguir. A declaração solicita um disco chamado premium2-disk
que é 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
Depois que a declaração de volume persistente tiver sido criada e o disco 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 no 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 seu /mnt/azure
disco do Azure montado no diretório. Essa configuração pode ser vista ao inspecionar seu pod via kubectl describe pod nginx-premium2
, como 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 IOPS e limites de taxa de transferência
Operações de entrada/saída por segundo (IOPS) e limites de taxa de transferência para o disco SSD do Azure Premium v2 atualmente não são suportados pelo AKS. Para ajustar o desempenho, você pode usar o comando az disk update da CLI do Azure e incluir os --disk-iops-read-write
parâmetros e --disk-mbps-read-write
.
O exemplo a seguir atualiza o IOPS de disco de leitura/gravação para 5000 e 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, consulte Por que dois grupos de recursos são criados com o AKS?.
O valor para o --name
parâmetro é o nome do volume criado usando o 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 localizá-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óximos passos
- Para obter mais informações sobre discos SSD Premium v2, consulte Usando discos SSD Premium v2 do Azure.
- Para obter mais informações sobre práticas recomendadas de armazenamento, consulte Práticas recomendadas para armazenamento e backups no Serviço Kubernetes do Azure (AKS).
Azure Kubernetes Service