Condividi tramite


Usare Archiviazione di Container Azure con dischi gestiti di Azure

Archiviazione di Azure Container è un servizio di gestione, distribuzione e orchestrazione basato sul cloud creato in modo nativo per i contenitori. Questo articolo illustra come configurare Azure Container Storage per l'uso di dischi gestiti in Azure come risorse di archiviazione back-end per i carichi di lavoro Kubernetes. Al termine, si avrà un pod che usa i dischi gestiti di Azure come risorsa di archiviazione.

Prerequisiti

  • Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

  • Questo articolo richiede la versione più recente (2.35.0 o successiva) dell'interfaccia della riga di comando di Azure. Vedere Come installare l'interfaccia della riga di comando di Azure. Se si usa l'ambiente Bash in Azure Cloud Shell, la versione più recente è già installata. Se si prevede di eseguire i comandi in locale anziché in Azure Cloud Shell, assicurarsi di eseguirli con privilegi amministrativi. Per altre informazioni, vedere Introduzione ad Azure Cloud Shell.

  • È necessario il client della riga di comando Kubernetes, kubectl. È già installato se si usa Azure Cloud Shell oppure è possibile installarlo in locale eseguendo il comando az aks install-cli.

  • Se Azure Container Storage non è già installato, seguire le istruzioni riportate in Usare Azure Container Storage con il servizio Azure Kubernetes.

  • Controllare se l’area di destinazione è supportata nelle aree di Azure Container Storage.

  • Per usare Archiviazione di Container di Azure con dischi gestiti di Azure, il cluster del servizio Azure Kubernetes deve avere un pool di nodi di almeno tre macchine virtuali per utilizzo generico, ad esempio standard_d4s_v5 per i nodi del cluster, ognuno con almeno quattro CPU virtuali (vCPU).

Creare e collegare volumi permanenti

Seguire questa procedura per creare e collegare un volume permanente.

1. Creare un pool di archiviazione

Creare prima di tutto un pool di archiviazione, ovvero un raggruppamento logico di archiviazione per il cluster Kubernetes, definendolo in un file manifesto YAML.

Sono disponibili le opzioni seguenti per la creazione di un pool di archiviazione:

Se è stata abilitata l'Archiviazione di Azure Container usando i comandi az aks create o az aks update, potrebbe essere già disponibile un pool di archiviazione. Usare kubectl get sp -n acstor per ottenere l'elenco dei pool di archiviazione. Se è già disponibile un pool di archiviazione che si vuole usare, è possibile ignorare questo passaggio e passare a Visualizzare le classi di archiviazione disponibili.

Creare un pool di archiviazione dinamico

Seguire questa procedura per creare un pool di archiviazione dinamico per Dischi di Azure.

  1. Usare l'editor di testo preferito per creare un file manifesto YAML, ad esempio code acstor-storagepool.yaml.

  2. Incollare il codice seguente. Il valore del nome del pool di archiviazione può essere quello desiderato. Per skuName, specificare il livello di prestazioni e ridondanza. I valori accettabili sono Premium_LRS, Standard_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, PremiumV2_LRS e StandardSSD_ZRS. Per l'archiviazione, specificare la quantità di capacità di archiviazione per il pool in Gi o Ti.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: Premium_LRS
      resources:
        requests:
          storage: 1Ti
    

    Se si usano dischi UltraSSD_LRS o PremiumV2_LRS, è possibile impostare operazioni di I/O al secondo e velocità effettiva usando i parametri IOPSReadWrite e MBpsReadWrite nella definizione del pool di archiviazione.

    IOPSReadWrite si riferisce al numero di operazioni di I/O al secondo consentite per dischi Ultra SSD e archiviazione con ridondanza locale Premium v2. Per altre informazioni, vedere Operazioni di I/O al secondo disco Ultra e Operazioni di I/O al secondo SSD Premium v2.

    MBpsReadWrite fa riferimento alla larghezza di banda consentita per dischi Ultra SSD e archiviazione con ridondanza locale Premium v2. MBps fa riferimento a milioni di byte al secondo (MB/s = 10^6 byte al secondo). Per altre informazioni, vedere velocità effettiva disco Ultra e velocità effettiva SSD Premium v2.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: PremiumV2_LRS
          iopsReadWrite: 5000
          mbpsReadWrite: 200
      resources:
        requests:
          storage: 1Ti
    
  3. Salvare il file manifesto YAML e quindi applicarlo per creare il pool di archiviazione.

    kubectl apply -f acstor-storagepool.yaml 
    

    Al termine della creazione del pool di archiviazione, verrà visualizzato un messaggio simile al seguente:

    storagepool.containerstorage.azure.com/azuredisk created
    

    È anche possibile eseguire questo comando per controllare lo stato del pool di archiviazione. Sostituire <storage-pool-name> con il valore nome del pool di archiviazione. Per questo esempio, il valore sarà azuredisk.

    kubectl describe sp <storage-pool-name> -n acstor
    

Quando viene creato il pool di archiviazione, Archiviazione di Azure Container creerà una classe di archiviazione per conto dell'utente usando la convenzione di denominazione acstor-<storage-pool-name>. È ora possibile visualizzare le classi di archiviazione disponibili e creare un'attestazione di volume permanente.

Creare un pool di archiviazione con provisioning preliminare

Se è già stato effettuato il provisioning di dischi gestiti di Azure, è possibile creare un pool di archiviazione con provisioning preliminare usando tali dischi. Poiché è già stato effettuato il provisioning dei dischi, non è necessario specificare la capacità skuName o di archiviazione durante la creazione del pool di archiviazione.

Seguire questa procedura per creare un pool di archiviazione con provisioning preliminare per Dischi di Azure.

  1. Accedere al portale di Azure.

  2. Per ogni disco che si vuole usare, passare al disco gestito di Azure e selezionare Impostazioni>Proprietà. Copiare l'intera stringa in ID risorsa e inserirla in un file di testo.

  3. Usare l'editor di testo preferito per creare un file manifesto YAML, ad esempio code acstor-storagepool.yaml.

  4. Incollare il codice seguente. Il valore del nome del pool di archiviazione può essere quello desiderato. Sostituire <resource-id> con l'ID risorsa di ogni disco gestito. Salvare il file.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: sp-preprovisioned
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          disks:
            - reference <resource-id1>
            - reference <resource-id2>
    
  5. Applicare il file manifesto YAML per creare il pool di archiviazione.

    kubectl apply -f acstor-storagepool.yaml 
    

    Al termine della creazione del pool di archiviazione, verrà visualizzato un messaggio simile al seguente:

    storagepool.containerstorage.azure.com/sp-preprovisioned created
    

    È anche possibile eseguire questo comando per controllare lo stato del pool di archiviazione. Sostituire <storage-pool-name> con il valore nome del pool di archiviazione. Per questo esempio, il valore sarà sp-preprovisioned.

    kubectl describe sp <storage-pool-name> -n acstor
    

Quando viene creato il pool di archiviazione, Archiviazione di Azure Container creerà una classe di archiviazione per conto dell'utente usando la convenzione di denominazione acstor-<storage-pool-name>. È ora possibile visualizzare le classi di archiviazione disponibili e creare un'attestazione di volume permanente.

Creare un pool di archiviazione dinamico usando la propria chiave di crittografia (facoltativo)

Tutti i dati in un account di archiviazione di Azure vengono crittografati inattivi. Per impostazione predefinita, i dati vengono crittografati con chiavi gestite da Microsoft. Per un maggiore controllo sulle chiavi di crittografia, è possibile fornire chiavi gestite dal cliente quando si crea il pool di archiviazione per crittografare i volumi permanenti che verranno creati.

Per usare la propria chiave per la crittografia lato server, è necessario disporre di Azure Key Vault con una chiave. L'insieme di credenziali delle chiavi deve avere la protezione dall'eliminazione abilitata e deve usare il modello di autorizzazione per il controllo degli accessi in base al ruolo di Azure. Altre informazioni sulle chiavi gestite dal cliente in Linux.

Quando si crea il pool di archiviazione, è necessario definire i parametri di chiave gestita dal cliente. I parametri di crittografia della chiave gestita dal cliente necessari sono:

  • keyVersion specifica la versione della chiave da usare
  • keyName è il nome della chiave
  • keyVaultUri è l'URI (Uniform Resource Identifier) di Azure Key Vault, ad esempio https://user.vault.azure.net
  • Identity specifica un'identità gestita con accesso all'insieme di credenziali, ad esempio /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourcegroups/MC_user-acstor-westus2-rg_user-acstor-westus2_westus2/providers/Microsoft.ManagedIdentity/userAssignedIdentities/user-acstor-westus2-agentpool

Seguire questa procedura per creare un pool di archiviazione usando la propria chiave di crittografia. Tutti i volumi permanenti creati da questo pool di archiviazione verranno crittografati usando la stessa chiave.

  1. Usare l'editor di testo preferito per creare un file manifesto YAML, ad esempio code acstor-storagepool-cmk.yaml.

  2. Incollare il codice seguente, specificare i parametri necessari e salvare il file. Il valore del nome del pool di archiviazione può essere quello desiderato. Per skuName, specificare il livello di prestazioni e ridondanza. I valori accettabili sono Premium_LRS, Standard_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, PremiumV2_LRS e StandardSSD_ZRS. Per l'archiviazione, specificare la quantità di capacità di archiviazione per il pool in Gi o Ti. Assicurarsi di specificare i parametri di crittografia della chiave gestita dal cliente.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: Premium_LRS
          encryption: {
            keyVersion: "<key-version>",
            keyName: "<key-name>",
            keyVaultUri: "<key-vault-uri>",
            identity: "<identity>"
          }
      resources:
        requests:
          storage: 1Ti
    
  3. Applicare il file manifesto YAML per creare il pool di archiviazione.

    kubectl apply -f acstor-storagepool-cmk.yaml 
    

    Al termine della creazione del pool di archiviazione, verrà visualizzato un messaggio simile al seguente:

    storagepool.containerstorage.azure.com/azuredisk created
    

    È anche possibile eseguire questo comando per controllare lo stato del pool di archiviazione. Sostituire <storage-pool-name> con il valore nome del pool di archiviazione. Per questo esempio, il valore sarà azuredisk.

    kubectl describe sp <storage-pool-name> -n acstor
    

Quando viene creato il pool di archiviazione, Archiviazione di Azure Container creerà una classe di archiviazione per conto dell'utente usando la convenzione di denominazione acstor-<storage-pool-name>.

2. Visualizzare le classi di archiviazione disponibili

Quando il pool di archiviazione è pronto per l'uso, è necessario selezionare una classe di archiviazione per definire il modo in cui l'archiviazione viene creata dinamicamente durante la creazione di attestazioni di volumi persistenti e la distribuzione di volumi permanenti.

Eseguire kubectl get sc per visualizzare le classi di archiviazione disponibili. Verrà visualizzata una classe di archiviazione denominata acstor-<storage-pool-name>.

Importante

Non usare la classe di archiviazione contrassegnata come internal. Si tratta di una classe di archiviazione interna necessaria per il funzionamento dell'Archiviazione di Azure Container.

3. Creare un'attestazione di volume permanente

Un'attestazione di volume permanente viene usata per il provisioning automatico dell'archiviazione in una classe di archiviazione. Seguire questa procedura per creare un PVC usando la nuova classe di archiviazione.

  1. Usare l'editor di testo preferito per creare un file manifesto YAML, ad esempio code acstor-pvc.yaml.

  2. Incollare il codice seguente e salvare il file. Il valore name PVC può essere quello desiderato.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azurediskpvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-azuredisk # replace with the name of your storage class if different
      resources:
        requests:
          storage: 100Gi
    
  3. Applicare il file manifesto YAML per creare il PVC.

    kubectl apply -f acstor-pvc.yaml
    

    L'output visualizzato sarà simile al seguente:

    persistentvolumeclaim/azurediskpvc created
    

    È possibile controllare lo stato del PVC eseguendo questo comando:

    kubectl describe pvc azurediskpvc
    

Una volta creato il PVC, è pronto per l'uso da parte di un pod.

4. Distribuire un pod e collegare un volume permanente

Creare un pod usando Fio (tester di I/O flessibile) per il benchmarking e la simulazione del carico di lavoro e specificare un percorso di montaggio per il volume permanente. Per claimName, usare il valore nome valore usato durante la creazione dell'attestazione del volume permanente.

  1. Usare l'editor di testo preferito per creare un file manifesto YAML, ad esempio code acstor-pod.yaml.

  2. Incollare il codice seguente e salvare il file.

    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod
    spec:
      nodeSelector:
        acstor.azure.com/io-engine: acstor
      volumes:
        - name: azurediskpv
          persistentVolumeClaim:
            claimName: azurediskpvc
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: azurediskpv
    
  3. Applicare il file manifesto YAML per distribuire il pod.

    kubectl apply -f acstor-pod.yaml
    

    L'output dovrebbe essere simile al seguente:

    pod/fiopod created
    
  4. Verificare che il pod sia in esecuzione e che l'attestazione del volume permanente sia stata associata correttamente al pod:

    kubectl describe pod fiopod
    kubectl describe pvc azurediskpvc
    
  5. Controllare il test fio per visualizzarne lo stato corrente:

    kubectl exec -it fiopod -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60
    

È stato ora distribuito un pod che usa Dischi di Azure come risorsa di archiviazione ed è possibile usarlo per i carichi di lavoro Kubernetes.

Gestire volumi permanenti e pool di archiviazione

Dopo aver creato un volume permanente, è possibile scollegarlo e ricollegarlo in base alle esigenze. È anche possibile espandere o eliminare un pool di archiviazione.

Scollegare e ricollegare un volume permanente

Per scollegare un volume permanente, eliminare il pod a cui è collegato il volume. Sostituire <pod-name> con il nome del pod, ad esempio fiopod.

kubectl delete pods <pod-name>

Per ricollegare un volume permanente, è sufficiente fare riferimento al nome dell'attestazione del volume permanente nel file manifesto YAML come descritto in Distribuire un pod e collegare un volume permanente.

Per verificare il volume permanente a cui è associata un'attestazione di volume permanente, eseguire kubectl get pvc <persistent-volume-claim-name>.

Espandere un pool di archiviazione

È possibile espandere i pool di archiviazione supportati da Dischi di Azure per aumentare le risorse rapidamente e senza tempi di inattività. La compattazione dei pool di archiviazione non è attualmente supportata. L'espansione del pool di archiviazione non è supportata per Dischi Ultra o SSD Premium v2.

Nota

L'espansione di un pool di archiviazione può aumentare i costi per Azure Container Storage e Dischi di Azure. Vedere la pagina dei prezzi di Archiviazione di Container Azure e Informazioni sulla fatturazione di Archiviazione di Container Azure.

Attualmente, l'espansione del pool di archiviazione presenta la limitazione seguente quando si usano gli SKU Premium_LRS, Standard_LRS, StandardSSD_LRS, Premium_ZRSe StandardSSD_ZRS:

  • Se il pool di archiviazione esistente è inferiore a 4 TiB (4.096 GiB), è possibile espanderlo solo fino a 4.095 GiB. Per evitare errori, non tentare di espandere il pool di archiviazione corrente oltre 4.095 GiB se inizialmente è inferiore a 4 TiB (4.096 GiB). I pool di archiviazione > da 4 TiB possono essere espansi fino alla capacità di archiviazione massima disponibile.

Seguire queste istruzioni per espandere un pool di archiviazione esistente per Dischi di Azure.

  1. Usando un editor di testo, aprire il file manifesto YAML usato per creare il pool di archiviazione, ad esempio code acstor-storagepool.yaml.

  2. Sostituire la voce storage specificata nel file manifesto YAML con il valore desiderato. Questo valore deve essere maggiore della capacità corrente del pool di archiviazione. Ad esempio, se la specifica è impostata su storage: 1Ti, modificarla in storage: 2Ti. Se è stato creato un pool di archiviazione con provisioning preliminare, non sarà presente una voce storage perché il pool di archiviazione ha ereditato le dimensioni della capacità da Dischi di Azure con provisioning preliminari. Se non viene visualizzata una voce storage in YAML, aggiungere il codice seguente specificando la capacità di archiviazione desiderata e quindi salvare il file manifesto:

    spec:
      resources:
        requests:
          storage: 2Ti
    

Nota

Se si dispone di due dischi in un pool di archiviazione con una capacità di 1 TiB ciascuno e si modifica il file manifesto YAML per leggere storage: 4Ti, entrambi i dischi verranno espansi a 2 TiB quando viene applicato YAML, offrendo una nuova capacità totale di 4 TiB.

  1. Applicare il file manifesto YAML per espandere il pool di archiviazione.

    kubectl apply -f acstor-storagepool.yaml 
    
  2. Eseguire questo comando per controllare lo stato del pool di archiviazione. Sostituire <storage-pool-name> con il valore nome del pool di archiviazione.

    kubectl describe sp <storage-pool-name> -n acstor
    

    Verrà visualizzato un messaggio simile a "il pool di archiviazione è in espansione". Eseguire di nuovo il comando dopo alcuni minuti e il messaggio dovrebbe essere scomparso.

  3. Eseguire kubectl get sp -A e il pool di archiviazione deve riflettere le nuove dimensioni.

Eliminare un pool di archiviazione

Se si vuole eliminare un pool di archiviazione, eseguire il comando seguente. Sostituire <storage-pool-name> con il nome per il pool di archiviazione.

kubectl delete sp -n acstor <storage-pool-name>

Vedi anche