Usare Azure Container Archiviazione Preview con Azure Managed Disks

Azure Container Archiviazione è un servizio di gestione, distribuzione e orchestrazione basato sul cloud creato in modo nativo per i contenitori. Questo articolo illustra come configurare Azure Container Archiviazione per l'uso di dischi gestiti di Azure come risorsa 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 az aks install-cli comando .

Nota

Per usare Azure Container Archiviazione 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, ognuna con almeno quattro CPU virtuali (vCPU).

Disponibilità a livello di area

Azure Container Archiviazione è disponibile solo per un subset di aree di Azure:

  • (Africa) Africa meridionale e settentrionale
  • (Asia Pacifico) Australia orientale
  • (Asia Pacifico) Asia orientale
  • (Asia Pacifico) Giappone orientale
  • (Asia Pacifico) Corea centrale
  • (Asia Pacifico) Asia sud-orientale
  • (Asia Pacifico) India centrale
  • (Europa) Francia centrale
  • (Europa) Europa settentrionale
  • (Europa) Europa occidentale
  • (Europa) Regno Unito meridionale
  • (Europa) Svezia centrale
  • (Europa) Svizzera settentrionale
  • (Medio Oriente) Emirati Arabi Uniti settentrionali
  • (America del Nord) Stati Uniti orientali
  • (America del Nord) Stati Uniti orientali 2
  • (America del Nord) Stati Uniti occidentali
  • (America del Nord) Stati Uniti occidentali 2
  • (America del Nord) Stati Uniti occidentali 3
  • (America del Nord) Stati Uniti centrali
  • (America del Nord) Stati Uniti centro-settentrionali
  • (America del Nord) Stati Uniti centro-meridionali
  • (America del Nord) Stati Uniti centro-occidentali
  • (America del Nord) Canada centrale
  • (America del Nord) Canada orientale
  • (America del Sud) Brasile meridionale

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.

Se è stato abilitato Azure Container Archiviazione usando az aks create comandi 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 questa sezione e passare a Visualizzare le classi di archiviazione disponibili. Se è già stato effettuato il provisioning di dischi gestiti di Azure, è possibile creare un pool di archiviazione con provisioning preliminare usando tali dischi.

Importante

Se si vogliono usare chiavi personalizzate per crittografare i volumi invece di usare chiavi gestite da Microsoft, non creare il pool di archiviazione seguendo la procedura descritta in questa sezione. Passare invece a Abilitare la crittografia lato server con le chiavi gestite dal cliente e seguire la procedura indicata.

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

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

  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. Salvare il file.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: Premium_LRS
      resources:
        requests:
          storage: 1Ti
    
  3. 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/azuredisk created
    

    È anche possibile eseguire questo comando per controllare lo stato del pool di archiviazione. Sostituire <storage-pool-name> con il valore del 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, Azure Container Archiviazione creerà una classe di archiviazione per conto dell'utente usando la convenzione acstor-<storage-pool-name>di denominazione . È 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, code acstor-storagepool.yamlad esempio .

  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 del nome del pool di archiviazione. Per questo esempio, il valore verrà sottoposto a sp-preprovisioning.

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

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

Abilitare la crittografia lato server con chiavi gestite dal cliente

Se è già stato creato un pool di archiviazione o si preferisce usare le chiavi di crittografia gestite da Microsoft predefinite, ignorare questa sezione e passare a Visualizzare le classi di archiviazione disponibili.

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 (CMK) per crittografare i volumi persistenti che verranno creati da un pool di archiviazione su disco di Azure.

Per usare una chiave personalizzata, è necessario avere un'istanza 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 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 cmk. I parametri di crittografia cmk necessari sono:

  • keyVersion specifica la versione della chiave da usare
  • keyName è il nome della chiave
  • keyVaultUri è l'identificatore di risorsa uniforme dell'insieme di credenziali delle chiavi di Azure, 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, code acstor-storagepool-cmk.yamlad esempio .

  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 del 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, Azure Container Archiviazione creerà una classe di archiviazione per conto dell'utente usando la convenzione acstor-<storage-pool-name>di denominazione .

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 interna. Si tratta di una classe di archiviazione interna necessaria per il funzionamento di Azure Container Archiviazione.

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, code acstor-pvc.yamlad esempio .

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

    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 verificare lo stato del PVC eseguendo il comando seguente:

    kubectl describe pvc azurediskpvc
    

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

Distribuire un pod e collegare un volume permanente

Creare un pod usando Fio (tester di I/O flessibili) 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 del nome usato durante la creazione dell'attestazione del volume permanente.

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

  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 Azure Disks come risorsa di archiviazione ed è possibile usarlo per i carichi di lavoro Kubernetes.

Scollegare e ricollegare un volume permanente

Per scollegare un volume permanente, eliminare il pod a cui è collegato il volume permanente. 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 di volume persistente 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 rapidamente e senza tempi di inattività. La compattazione dei pool di archiviazione non è attualmente supportata.

Nota

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

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 di archiviazione 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 di archiviazione perché il pool di archiviazione ha ereditato le dimensioni della capacità dai dischi di Azure di cui è stato effettuato il pre-provisioning. Se non viene visualizzata una voce di archiviazione in YAML, aggiungere il codice seguente specificando la capacità di archiviazione desiderata e quindi salvare il file manifesto:

    spec:
      resources:
        requests:
          storage: 2Ti
    
  3. Applicare il file manifesto YAML per espandere il pool di archiviazione.

    kubectl apply -f acstor-storagepool.yaml 
    
  4. Eseguire questo comando per controllare lo stato del pool di archiviazione. Sostituire <storage-pool-name> con il valore del 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 andato via.

  5. 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 del pool di archiviazione.

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

Vedi anche