Creare e usare un volume con i dischi di Azure nel servizio Azure Kubernetes (ASK)

Un volume permanente rappresenta una parte di spazio di archiviazione di cui è stato effettuato il provisioning per l'uso con i pod Kubernetes. È possibile usare un volume permanente con uno o più pod ed eseguirne il provisioning in modo dinamico o statico. Questo articolo illustra come creare in modo dinamico volumi persistenti con Dischi di Azure in un cluster del servizio Azure Kubernetes (servizio Azure Kubernetes).

Nota

Un disco di Azure può essere montato solo con la modalità di accessoReadWriteOnce, che lo rende disponibile solo a un nodo nel servizio Azure Kubernetes. Questa modalità di accesso consente comunque a più pod di accedere al volume quando i pod vengono eseguiti nello stesso nodo. Per altre informazioni, vedere Modalità di accesso Kubernetes PersistentVolume.

Questo articolo illustra come:

  • Usare un volume permanente dinamico (PV) installando il driver CSI (Container Archiviazione Interface) e creando in modo dinamico uno o più dischi gestiti di Azure da collegare a un pod.
  • Usare un pv statico creando uno o più dischi gestiti di Azure o usando uno esistente e collegandolo a un pod.

Per altre informazioni sui volumi Kubernetes, vedere Opzioni di archiviazione per le applicazioni nel servizio Azure Kubernetes.

Operazioni preliminari

  • Assicurarsi di avere installato e configurato l'interfaccia della riga di comando di Azure versione 2.0.59 o successiva. Eseguire az --version per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

  • Il driver CSI del disco di Azure ha un limite di volume per nodo. Il numero di volumi cambia in base alle dimensioni del pool di nodi/nodi. Eseguire il comando kubectl get per determinare il numero di volumi che possono essere allocati per nodo:

    kubectl get CSINode <nodename> -o yaml
    

Effettuare dinamicamente il provisioning di un volume

Questa sezione fornisce indicazioni per gli amministratori del cluster che vogliono effettuare il provisioning di uno o più volumi persistenti che includono i dettagli dell'archiviazione su disco di Azure per l'uso da parte di un carico di lavoro. Un'attestazione di volume permanente (PVC) usa l'oggetto classe di archiviazione per effettuare dinamicamente il provisioning di un contenitore di archiviazione su disco di Azure.

Archiviazione parametri di classe per PersistentVolumes dinamici

La tabella seguente include parametri che è possibile usare per definire una classe di archiviazione personalizzata per PersistentVolumeClaim.

Nome Significato Valore disponibile Obbligatorio Default value
skuName Tipo di account di archiviazione dischi di Azure (alias: storageAccountType) Standard_LRS, Premium_LRS, StandardSSD_LRS, PremiumV2_LRSUltraSSD_LRS, , Premium_ZRSStandardSSD_ZRS No StandardSSD_LRS
fsType Tipo di file system ext4, ext3, ext2, xfs, btrfs per Linux, ntfs per Windows No ext4 per Linux, ntfs per Windows
cachingMode Impostazione cache dell'host del disco dati di Azure None, ReadOnly, ReadWrite No ReadOnly
resourceGroup Specificare il gruppo di risorse per i dischi di Azure Nome del gruppo di risorse esistente No Se vuoto, il driver usa lo stesso nome del gruppo di risorse del cluster del servizio Azure Kubernetes corrente
DiskIOPSReadWrite Funzionalità di I/O al secondo UltraSSD o SSD Premium v2 (minima: 2 operazioni di I/O al secondo/GiB) 100~160000 No 500
DiskMBpsReadWrite Capacità di velocità effettiva UltraSSD o ssd Premium v2 (minimo: 0.032/GiB) 1~2000 No 100
LogicalSectorSize Dimensioni del settore logico in byte per il disco Ultra. I valori supportati sono 512 annunci 4096. 4096 è l'impostazione predefinita. 512, 4096 No 4096
tag Tag del disco di Azure Formato tag: key1=val1,key2=val2 No ""
diskEncryptionSetID ResourceId del set di crittografia del disco da usare per abilitare la crittografia dei dati inattivi Formato: /subscriptions/{subs-id}/resourceGroups/{rg-name}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet-name} No ""
diskEncryptionType Tipo di crittografia del set di crittografia del disco. EncryptionAtRestWithCustomerKey(per impostazione predefinita), EncryptionAtRestWithPlatformAndCustomerKeys No ""
writeAcceleratorEnabled Acceleratore di scrittura in Dischi di Azure true, false No ""
networkAccessPolicy Proprietà NetworkAccessPolicy per impedire la generazione dell'URI di firma di accesso condiviso per un disco o uno snapshot AllowAll, DenyAll, AllowPrivate No AllowAll
diskAccessID ID risorsa di Azure della risorsa DiskAccess per l'uso di endpoint privati nei dischi No ``
enableBursting Abilitare il bursting su richiesta oltre la destinazione delle prestazioni con provisioning del disco. Il bursting su richiesta deve essere applicato solo al disco Premium e quando le dimensioni > del disco sono 512 GB. Il disco Ultra e condiviso non è supportato. Il bursting è disabilitato per impostazione predefinita. true, false No false
userAgent Agente utente usato per l'attribuzione dell'utilizzo dei clienti No Useragent generato formattato driverName/driverVersion compiler/version (OS-ARCH)
subscriptionid Specificare l'ID sottoscrizione di Azure in cui vengono creati i dischi di Azure. ID sottoscrizione di Azure No Se non è vuoto, resourceGroup deve essere specificato.
--- I parametri seguenti sono solo per v2 --- --- ---
maxShares Numero totale di montaggi del disco condiviso consentiti per il disco. L'impostazione del valore su 2 o più abilita le repliche degli allegati. I valori supportati dipendono dalle dimensioni del disco. Per i valori supportati, vedere Condividere un disco gestito di Azure. No 1
maxMountReplicaCount Numero di allegati di repliche da gestire. Questo valore deve essere compreso nell'intervallo [0..(maxShares - 1)] No Se accessMode è ReadWriteMany, il valore predefinito è 0. In caso contrario, il valore predefinito è maxShares - 1

Classi di archiviazione predefinite

Archiviazione classi definiscono la modalità di creazione dinamica di un'unità di archiviazione con un volume permanente. Per altre informazioni sulle classi di archiviazione Kubernetes, vedere Classi di archiviazione Kubernetes.

Ogni cluster del servizio Azure Kubernetes include quattro classi di archiviazione precreate, due di esse configurate per l'uso con Dischi di Azure:

  1. La classe di archiviazione predefinita esegue il provisioning di un disco SSD di Azure standard.
    • Le unità SSD Standard consentono di ripristinare l'archiviazione Standard e di offrire risorse di archiviazione convenienti, offrendo comunque prestazioni affidabili.
  2. La classe di archiviazione managed-csi-premium esegue il provisioning di un disco di Azure premium.
    • Dischi Premium a bassa latenza e prestazioni elevate basati su SSD. Sono ideali per le macchine virtuali che eseguono carichi di lavoro di produzione. Quando si usa il driver CSI del disco di Azure nel servizio Azure Kubernetes, è anche possibile usare la managed-csi classe di archiviazione, supportata dall'archiviazione con ridondanza locale ssd Standard.

La riduzione delle dimensioni di un PVC non è supportata a causa del rischio di perdita di dati. È possibile modificare una classe di archiviazione esistente usando il kubectl edit sc comando oppure creare una classe di archiviazione personalizzata. Ad esempio, se si vuole usare un disco di dimensioni pari a 4 TiB, è necessario creare una classe di archiviazione che definisce cachingmode: None perché la memorizzazione nella cache del disco non è supportata per i dischi da 4 TiB e di dimensioni maggiori. Per altre informazioni sulle classi di archiviazione e sulla creazione di una classe di archiviazione personalizzata, vedere Opzioni di archiviazione per le applicazioni nel servizio Azure Kubernetes.

È possibile visualizzare le classi di archiviazione create in modo preliminare usando il kubectl get sc comando . L'esempio seguente mostra le classi di archiviazione precreate disponibili in un cluster del servizio Azure Kubernetes:

kubectl get sc

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

NAME                PROVISIONER                AGE
default (default)   disk.csi.azure.com         1h
managed-csi         disk.csi.azure.com         1h

Nota

Le attestazioni di volumi permanenti sono specificate in GiB, ma i dischi gestiti di Azure vengono fatturati in base al codice SKU per una dimensione specifica. Questi SKU spaziano da 32 GiB per i dischi S4 o P4 a 32 TiB per i dischi S80 o P80 (in anteprima). La velocità effettiva e le prestazioni delle operazioni di I/O al secondo per un disco gestito Premium dipendono sia dallo SKU sia dalla dimensione dell'istanza dei nodi nel cluster servizio Azure Kubernetes. Per altre informazioni, vedere Prezzi e prestazioni dei dischi gestiti.

Creare un'attestazione di volume permanente

Un'attestazione di volume permanente (PVC) effettua automaticamente il provisioning dell'archiviazione in base a una classe di archiviazione. In questo caso, un PVC può usare una delle classi di archiviazione predefinite per creare un disco gestito di Azure standard o Premium.

  1. Creare un file denominato azure-pvc.yaml e copiarlo nel manifesto seguente. L'attestazione richiede un disco denominato azure-managed-disk di dimensioni pari a 5 GB con accesso ReadWriteOnce. Come classe di archiviazione è specificata managed-csi.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
        name: azure-managed-disk
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: managed-csi
      resources:
        requests:
          storage: 5Gi
    

Suggerimento

Per creare un disco con archiviazione premium, usare storageClassName: managed-csi-premium anziché managed-csi.

  1. Creare l'attestazione di volume permanente usando il kubectl apply comando e specificare il file azure-pvc.yaml .

    kubectl apply -f azure-pvc.yaml
    

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

    persistentvolumeclaim/azure-managed-disk created
    

Usare il volume permanente

Dopo aver creato l'attestazione del volume permanente, è necessario verificare che abbia lo stato .Pending Lo Pending stato indica che è pronto per essere usato da un pod.

  1. Verificare lo stato del PVC usando il kubectl describe pvc comando .

    kubectl describe pvc azure-managed-disk
    

    L'output del comando è simile all'esempio condensato seguente:

    Name:            azure-managed-disk
    Namespace:       default
    StorageClass:    managed-csi
    Status:          Pending
    [...]
    
  2. Creare un file denominato azure-pvc-disk.yaml e copiarlo nel manifesto seguente. Questo manifesto crea un pod NGINX di base che usa l'attestazione di volume permanente denominata azure-managed-disk per montare il disco di Azure nel percorso /mnt/azure. Per i contenitori Windows Server specificare un valore per mountPath usando la convenzione di percorso di Windows, ad esempio 'D:'.

    kind: Pod
    apiVersion: v1
    metadata:
      name: mypod
    spec:
      containers:
        - name: mypod
          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
              readOnly: false
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: azure-managed-disk
    
  3. Creare il pod usando il comando kubectl apply.

     kubectl apply -f azure-pvc-disk.yaml
    

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

    pod/mypod created
    
  4. A questo punto è disponibile un pod in esecuzione con il Disco di Azure montato nella directory /mnt/azure. Controllare la configurazione del pod usando il kubectl describe comando .

     kubectl describe pod mypod
    

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

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

Usare Dischi Ultra di Azure

Per usare il disco Ultra di Azure, vedere Usare dischi Ultra in servizio Azure Kubernetes (servizio Azure Kubernetes).

Uso dei tag di Azure

Per altre informazioni sull'uso dei tag di Azure, vedere Usare i tag di Azure nel servizio Azure Kubernetes.

Effettuare il provisioning statico di un volume

Questa sezione fornisce indicazioni per gli amministratori del cluster che vogliono creare uno o più volumi persistenti che includono i dettagli dei dischi di Azure per l'uso da parte di un carico di lavoro.

Parametri di provisioning statici per un volume permanente

La tabella seguente include i parametri che è possibile usare per definire un volume permanente.

Nome Significato Valore disponibile Obbligatorio Default value
volumeHandle URI del disco di Azure /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} N/D
volumeAttributes.fsType Tipo di file system ext4, ext3, ext2, xfs, btrfs per Linux, ntfs per Windows No ext4 per Linux, ntfs per Windows
volumeAttributes.partition Numero di partizione del disco esistente (supportato solo in Linux) 1, 2, 3 No Vuoto (nessuna partizione):
assicurarsi che il formato della partizione sia simile a -part1
volumeAttributes.cachingMode Impostazione per la cache dell’host del disco None, ReadOnly, ReadWrite No ReadOnly

Creare un disco di Azure

Quando si crea un disco di Azure da usare con il servizio Azure Kubernetes, è possibile creare la risorsa disco nel gruppo di risorse del nodo. Questo approccio consente al cluster del servizio Azure Kubernetes di accedere e gestire la risorsa disco. Se invece si crea il disco in un gruppo di risorse separato, è necessario concedere l'identità gestita servizio Azure Kubernetes (servizio Azure Kubernetes) per il cluster il Contributor ruolo al gruppo di risorse del disco.

  1. Identificare il nome del gruppo di risorse usando il az aks show comando e aggiungere il --query nodeResourceGroup parametro .

    az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
    

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

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Creare un disco usando il az disk create comando . Specificare il nome del gruppo di risorse del nodo e un nome per la risorsa disco, ad esempio myAKSDisk. L'esempio seguente crea un disco da 20 GiB e invia l'ID del disco dopo la creazione. Se è necessario creare un disco da usare con i contenitori di Windows Server, aggiungere il parametro --os-type windows per formattare correttamente il disco.

    az disk create \
      --resource-group MC_myResourceGroup_myAKSCluster_eastus \
      --name myAKSDisk \
      --size-gb 20 \
      --query id --output tsv
    

    Nota

    I dischi di Azure vengono fatturati per SKU per dimensioni specifiche. Questi SKU spaziano da 32 GiB per i dischi S4 o P4 a 32 TiB per i dischi S80 o P80 (in anteprima). La velocità effettiva e le prestazioni delle operazioni di I/O al secondo per un disco gestito Premium dipendono sia dallo SKU sia dalla dimensione dell'istanza dei nodi nel cluster del servizio Azure Kubernetes. Vedere Prezzi per Managed Disks.

    L'ID risorsa del disco viene visualizzato dopo aver completato correttamente il comando, come illustrato nell'output di esempio seguente. Usare l'ID disco per montare il disco nella sezione successiva.

    /subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
    

Montare il disco come volume

  1. Creare un file pv-azuredisk.yaml con PersistentVolume. Aggiornare volumeHandle con l'ID della risorsa del disco del passaggio precedente. Per i contenitori di Windows Server, specificare ntfs per il parametro fsType.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: disk.csi.azure.com
      name: pv-azuredisk
    spec:
      capacity:
        storage: 20Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: managed-csi
      csi:
        driver: disk.csi.azure.com
        volumeHandle: /subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
        volumeAttributes:
          fsType: ext4
    
  2. Creare un file pvc-azuredisk.yaml con PersistentVolumeClaim che usa PersistentVolume.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-azuredisk
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      volumeName: pv-azuredisk
      storageClassName: managed-csi
    
  3. Creare PersistentVolume e PersistentVolumeClaim usando il kubectl apply comando e fare riferimento ai due file YAML creati.

    kubectl apply -f pv-azuredisk.yaml
    kubectl apply -f pvc-azuredisk.yaml
    
  4. Verificare che PersistentVolumeClaim sia stato creato e associato a PersistentVolume usando il kubectl get pvc comando .

    kubectl get pvc pvc-azuredisk
    

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

    NAME            STATUS   VOLUME         CAPACITY    ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pv-azuredisk   20Gi        RWO                           5s
    
  5. Creare un file azure-disk-pod.yaml per fare riferimento al PersistentVolumeClaim. Per i contenitori Windows Server specificare un valore per mountPath usando la convenzione di percorso di Windows, ad esempio 'D:'.

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      containers:
      - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
        name: mypod
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        volumeMounts:
          - name: azure
            mountPath: /mnt/azure
      volumes:
        - name: azure
          persistentVolumeClaim:
            claimName: pvc-azuredisk
    
  6. Applicare la configurazione e montare il volume usando il kubectl apply comando .

    kubectl apply -f azure-disk-pod.yaml
    

Pulire le risorse

Al termine delle risorse create in questo articolo, è possibile rimuoverle usando il kubectl delete comando .

# Remove the pod
kubectl delete -f azure-pvc-disk.yaml

# Remove the persistent volume claim
kubectl delete -f azure-pvc.yaml

Passaggi successivi