Usare dischi SSD Premium di Azure v2 nel servizio Azure Kubernetes

I dischi SSD Premium v2 di Azure offrono carichi di lavoro aziendali intensi da I/O, una latenza del disco submillisecond coerente e un numero elevato di operazioni di I/O al secondo e velocità effettiva. Le prestazioni (capacità, velocità effettiva e operazioni di I/O al secondo) dei dischi SSD Premium v2 possono essere configurate in modo indipendente in qualsiasi momento, semplificando la realizzazione di scenari efficienti a livello di costi, pur soddisfacendo le esigenze di prestazioni.

Questo articolo descrive come configurare un cluster del servizio Azure Kubernetes nuovo o esistente per l'uso di dischi SSD Premium di Azure v2.

Operazioni preliminari

Prima di creare o aggiornare un cluster del servizio Azure Kubernetes in grado di usare dischi SSD Premium di Azure v2, è necessario creare un cluster del servizio Azure Kubernetes nella stessa regione e nella stessa zona di disponibilità che supporta Archiviazione Premium e collegare i dischi seguendo la seguente procedura.

Per un cluster del servizio Azure Kubernetes esistente, è possibile abilitare i dischi SSD Premium v2 aggiungendo un nuovo pool di nodi al cluster e quindi collegare i dischi seguendo la procedura seguente.

Importante

I dischi SSD Premium di Azure v2 richiedono pool di nodi distribuiti in regioni che supportano questi dischi. Per un elenco delle aree supportate, vedere Aree supportate per dischi SSD Premium v2.

Limiti

  • I dischi SSD Premium di Azure v2 presentano alcune limitazioni di cui è necessario tenere conto. Per un elenco completo, vedere Limitazioni di SSD Premium v2.

Usare dischi SSD Premium v2 in modo dinamico con una classe di archiviazione

Per usare dischi SSD Premium v2 in una distribuzione o in un set con stato, è possibile usare una classe di archiviazione per il provisioning dinamico.

Creare la classe di archiviazione

Una classe di archiviazione viene usata per definire la creazione dinamica di un'unità di archiviazione con un volume permanente. Per altre informazioni sulle classi di archiviazione Kubernetes, vedere Kubernetes Storage Classes (Classi di archiviazione Kubernetes).

In questo esempio, si crea una classe di archiviazione che fa riferimento a dischi SSD Premium v2. Creare un file denominato azure-pv2-disk-sc.yaml e copiarlo nel manifesto seguente.

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

Creare la classe di archiviazione con il comandokubectl apply e specificare il file azure-pv2-disk-sc.yaml:

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

L'output dal comando è simile all'esempio seguente:

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

Creare un'attestazione di volume permanente

Un'attestazione di volume permanente viene usata per il provisioning automatico dell'archiviazione in una classe di archiviazione. In questo caso, un PVC può usare la classe di archiviazione creata in precedenza per creare un disco ultra.

Creare un file denominato azure-pv2-disk-pvc.yaml e copiarlo nel manifesto seguente. L'attestazione richiede un disco denominato premium2-disk con dimensione di 1000 GB e accesso ReadWriteOnce. La classe di archiviazione premium2-disk-sc viene specificata come classe di archiviazione.

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

Creare l'attestazione di volume permanente con il comando kubectl apply e specificare il file azure-pv2-disk-pvc.yaml:

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

L'output dal comando è simile all'esempio seguente:

persistentvolumeclaim/premium2-disk created

Usare il volume permanente

Dopo aver creato l'attestazione di volume persistente e aver effettuato il provisioning del disco, è possibile creare un pod con accesso al disco. Il manifesto seguente crea un pod NGINX di base che usa l'attestazione di volume permanente denominata premium2-disk per montare il disco di Azure nel percorso /mnt/azure.

Creare un file denominato nginx-premium2.yaml e copiarlo nel manifesto seguente.

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

Creare il pod con il comando kubectl apply, come illustrato nell'esempio seguente:

kubectl apply -f nginx-premium2.yaml

L'output dal comando è simile all'esempio seguente:

pod/nginx-premium2 created

A questo punto è disponibile un pod in esecuzione con il disco di Azure montato nella directory /mnt/azure. Questa configurazione può essere visualizzata quando si controlla il pod tramite kubectl describe pod nginx-premium2, come illustrato nell'esempio sintetico seguente:

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

Impostare i limiti di operazioni di I/O al secondo e velocità effettiva

Le operazioni di input/output al secondo (IOPS) e i limiti di velocità effettiva per il disco SSD Premium v2 di Azure non sono attualmente supportati tramite il servizio Azure Kubernetes. Per regolare le prestazioni, è possibile usare il comando dell'interfaccia della riga di comando di Azure aggiornare az disk e includere i parametri --disk-iops-read-write e --disk-mbps-read-write.

L'esempio seguente aggiorna la lettura/scrittura delle operazioni di I/O al secondo del disco a 5000 e Mbps a 200. Per --resource-group, il valore deve essere il secondo gruppo di risorse creato automaticamente per archiviare i nodi di lavoro del servizio Azure Kubernetes con la convenzione di denominazione MC_resourcegroupname_clustername_location. Per maggiori informazioni, vedere Perché vengono creati due gruppi di risorse con il servizio Azure Kubernetes?

Il valore per il --name parametro è il nome del volume creato usando StorageClass e inizia con pvc-. Per identificare il nome del disco, è possibile eseguire kubectl get pvc o passare al gruppo di risorse secondario nel portale per trovarlo. Per altre informazioni, vedere gestire le risorse dal portale di Azure.

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

Passaggi successivi