Scala le prestazioni dello spazio di archiviazione con Hyperdisk


Il driver CSI per il disco permanente di Compute Engine è il modo principale per accedere allo spazio di archiviazione Hyperdisk con i cluster Google Kubernetes Engine (GKE).

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

  • Attiva l'API Google Kubernetes Engine.
  • Attiva l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo gcloud components update.

Requisiti

Per utilizzare i volumi Hyperdisk in GKE, i cluster devono soddisfare i seguenti requisiti:

Creare un volume Hyperdisk per GKE

Questa sezione fornisce una panoramica della creazione di un volume Hyperdisk supportato dal driver CSI di Compute Engine in GKE.

Crea una classe StorageClass

I seguenti campi Type di archiviazione dei dischi permanenti vengono forniti dal driver CSI per il disco permanente di Compute Engine per supportare Hyperdisk:

  • hyperdisk-balanced
  • hyperdisk-throughput
  • hyperdisk-extreme
  • hyperdisk-ml

Per creare un nuovo StorageClass con il livello di throughput o IOPS desiderato, utilizza pd.csi.storage.gke.io nel campo del provisioner e specifica uno dei tipi di archiviazione Hyperdisk.

Ogni tipo di hyperdisk ha valori predefiniti per le prestazioni determinati dalle dimensioni iniziali del disco di cui è stato eseguito il provisioning. Quando crei StorageClass, puoi specificare facoltativamente i seguenti parametri a seconda del tipo di Hyperdisk. Se ometti questi parametri, GKE utilizza i valori predefiniti per il tipo di disco in base alla capacità. Per indicazioni sui valori consentiti per il throughput o le IOPS, consulta Pianificare il livello di prestazioni per il volume Hyperdisk.

Parametro Tipo di Hyperdisk Utilizzo
provisioned-throughput-on-create Hyperdisk bilanciato*, velocità effettiva Hyperdisk Esprimere il valore della velocità effettiva in MiBps utilizzando il qualificatore "Mi". Ad esempio, se la velocità effettiva richiesta è 250 MiBps, specifica "250Mi" quando crei StorageClass.
provisioned-iops-on-create Hyperdisk bilanciato, IOPS Hyperdisk Il valore IOPS deve essere espresso senza alcun qualificatore. Ad esempio, se hai bisogno di 7000 IOPS, specifica "7000" durante la creazione di StorageClass.
* Se hai bisogno di una maggiore sicurezza e prevedi di utilizzare i nodi Google Kubernetes Engine riservati, ti consigliamo di creare la modalità riservata per Hyperdisk Balanced, di esaminare ulteriori limitazioni della modalità riservata per Hyperdisk Balanced e di scoprire di più sui nodi Google Kubernetes Engine riservati.

Gli esempi riportati di seguito mostrano come creare un StorageClass per ogni tipo di hyperdisk:

Hyperdisk bilanciato

  1. Salva il seguente manifest in un file denominato hdb-example-class.yaml:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: balanced-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-balanced
      provisioned-throughput-on-create: "250Mi"
      provisioned-iops-on-create: "7000"
    
  2. Crea la classe di archiviazione:

    kubectl create -f hdb-example-class.yaml
    

Velocità effettiva Hyperdisk

  1. Salva il seguente manifest in un file denominato hdt-example-class.yaml:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: throughput-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-throughput
      provisioned-throughput-on-create: "50Mi"
    
  2. Crea la classe di archiviazione:

    kubectl create -f hdt-example-class.yaml
    

Hyperdisk Extreme

  1. Salva il seguente manifest in un file denominato hdx-example-class.yaml:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: extreme-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-extreme
      provisioned-iops-on-create: "50000"
    
  2. Crea la classe di archiviazione:

    kubectl create -f hdx-example-class.yaml
    

Per trovare il nome delle classi di archiviazione disponibili nel cluster, esegui il seguente comando:

kubectl get sc

Crea un PersistentVolumeClaim

Puoi creare una richiesta di volume persistente che fa riferimento a StorageClass del driver CSI per il disco permanente di Compute Engine.

Hyperdisk bilanciato

In questo esempio, specifichi la capacità di archiviazione target del volume Hyperdisk bilanciato come 20 GiB.

  1. Salva il seguente manifest PersistentVolumeClaim in un file denominato pvc-example.yaml:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: balanced-storage
      resources:
        requests:
          storage: 20Gi
    
  2. Applica la richiesta di volume permanente che fa riferimento alla classe di archiviazione creata nell'esempio precedente:

    kubectl apply -f pvc-example.yaml
    

Velocità effettiva Hyperdisk

In questo esempio, specifichi la capacità di archiviazione target del volume Hyperdisk Throughput come 2 TiB.

  1. Salva il seguente manifest PersistentVolumeClaim in un file denominato pvc-example.yaml:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: throughput-storage
      resources:
        requests:
          storage: 2Ti
    
  2. Applica la richiesta di volume permanente che fa riferimento alla classe di archiviazione creata nell'esempio precedente:

    kubectl apply -f pvc-example.yaml
    

Hyperdisk Extreme

In questo esempio, specifichi la capacità di archiviazione minima del volume Hyperdisk Extreme come 64 GiB.

  1. Salva il seguente manifest PersistentVolumeClaim in un file denominato pvc-example.yaml:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: extreme-storage
      resources:
        requests:
          storage: 64Gi
    
  2. Applica la richiesta di volume permanente che fa riferimento alla classe di archiviazione creata nell'esempio precedente:

    kubectl apply -f pvc-example.yaml
    

Crea un deployment per utilizzare il volume Hyperdisk

Quando utilizzi i pod con i volumi permanenti, ti consigliamo di utilizzare un controller del carico di lavoro (ad esempio un deployment o un StatefulSet).

  1. L'esempio seguente crea un manifest che configura un pod per il deployment di un server web Nginx utilizzando l'oggetto PersistentVolumeClaim creato nella sezione precedente. Salva il seguente manifest di esempio come hyperdisk-example-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-server-deployment
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            volumeMounts:
            - mountPath: /var/lib/www/html
              name: mypvc
          volumes:
          - name: mypvc
            persistentVolumeClaim:
              claimName: podpvc
              readOnly: false
    
  2. Per creare un deployment in base al file manifest hyperdisk-example-deployment.yaml, esegui il seguente comando:

    kubectl apply -f hyperdisk-example-deployment.yaml
    
  3. Verifica che il deployment sia stato creato correttamente:

    kubectl get deployment
    

    Potrebbero essere necessari alcuni minuti per completare il provisioning delle istanze Hyperdisk. Al termine del provisioning, il deployment riporta uno stato READY.

  4. Puoi controllare l'avanzamento monitorando lo stato di PersistentVolumeClaim eseguendo il seguente comando:

    kubectl get pvc
    

Esegui il provisioning di un volume Hyperdisk da uno snapshot

Per creare un nuovo volume Hyperdisk da uno snapshot di Persistent Disk esistente, utilizza la console Google Cloud, Google Cloud CLI o l'API Compute Engine. Per scoprire come creare uno snapshot di un Persistent Disk, consulta Creare e utilizzare gli snapshot dei volumi.

Console

  1. Vai alla pagina Dischi nella console Google Cloud.

    Vai a Dischi

  2. Fai clic su Crea disco.

  3. In Tipo di disco, scegli una delle seguenti opzioni per il tipo di disco:

    • Hyperdisk bilanciato
    • Hyperdisk Extreme
    • Velocità effettiva Hyperdisk
  4. In Tipo di disco di origine, fai clic su Snapshot.

  5. Seleziona il nome dello snapshot da ripristinare.

  6. Seleziona le dimensioni del nuovo disco in GiB. Questo numero deve essere uguale o superiore al disco di origine originale per lo snapshot.

  7. Imposta la velocità effettiva o le IOPS provisionate che vuoi per il disco, se diverse dai valori predefiniti.

  8. Fai clic su Crea per creare il volume Hyperdisk.

gcloud

Esegui il comando gcloud compute disks create per creare il volume Hyperdisk da uno snapshot.

Hyperdisk bilanciato

gcloud compute disks create DISK_NAME \
    --size=SIZE \
    --source-snapshot=SNAPSHOT_NAME \
    --provisioned-throughput=TRHROUGHPUT_LIMIT \
    --provisioned-iops=IOPS_LIMIT \
    --type=hyperdisk-balanced

Sostituisci quanto segue:

  • DISK_NAME: il nome del nuovo disco.
  • SIZE: le dimensioni, in gibibyte (GiB) o tebibyte (TiB), del nuovo disco. Per le limitazioni di capacità più recenti, consulta la documentazione di Compute Engine.
  • SNAPSHOT_NAME: il nome dello snapshot da ripristinare.
  • THROUGHPUT_LIMIT: facoltativo. Per i dischi Hyperdisk Balanced, si tratta di un numero intero che rappresenta la velocità effettiva, misurata in MiBps, che il disco può gestire. Per le limitazioni più recenti, consulta la documentazione di Compute Engine.
  • IOPS_LIMIT: facoltativo. Per i dischi Hyperdisk bilanciati, si tratta del numero di IOPS che il disco può gestire. Per le limitazioni di prestazioni più recenti, consulta la documentazione di Compute Engine.

Velocità effettiva Hyperdisk

gcloud compute disks create DISK_NAME \
    --size=SIZE \
    --source-snapshot=SNAPSHOT_NAME \
    --provisioned-throughput=TRHROUGHPUT_LIMIT \
    --type=hyperdisk-throughput

Sostituisci quanto segue:

  • DISK_NAME: il nome del nuovo disco.
  • SIZE: le dimensioni, in gibibyte (GiB o GB) o tebibyte (TiB o TB), del nuovo disco. Per le limitazioni di capacità più recenti, consulta la documentazione di Compute Engine.
  • SNAPSHOT_NAME: il nome dello snapshot da ripristinare.
  • THROUGHPUT_LIMIT: facoltativo. Per i dischi con velocità effettiva Hyperdisk, si tratta di un numero intero che rappresenta la velocità effettiva, misurata in MiBps, che il disco può gestire. Per le limitazioni di prestazioni più recenti, consulta la documentazione di Compute Engine.

Hyperdisk Extreme

gcloud compute disks create DISK_NAME \
    --size=SIZE \
    --source-snapshot=SNAPSHOT_NAME \
    --provisioned-iops=IOPS_LIMIT \
    --type=hyperdisk-iops

Sostituisci quanto segue:

  • DISK_NAME: il nome del nuovo disco.
  • SIZE: le dimensioni, in gibibyte (GiB o GB) o tebibyte (TiB o TB), del nuovo disco. Per le limitazioni di capacità più recenti, consulta la documentazione di Compute Engine.
  • SNAPSHOT_NAME: il nome dello snapshot da ripristinare.
  • IOPS_LIMIT (Facoltativo): per i dischi Hyperdisk Extreme, si tratta del numero di operazioni I/O al secondo che il disco può gestire. Per le limitazioni di prestazioni più recenti, consulta la documentazione di Compute Engine.

Creare uno snapshot per un volume Hyperdisk

Per creare uno snapshot da un volume Hyperdisk, segui gli stessi passaggi per creare uno snapshot per un volume del Persistent Disk:

Aggiornare il throughput o gli IOPS sottoposti a provisioning di un volume Hyperdisk esistente

Questa sezione spiega come modificare le prestazioni di provisioning per i volumi Hyperdisk.

Velocità effettiva

L'aggiornamento del throughput riservato è supportato solo per i volumi Hyperdisk Balanced e Hyperdisk Throughput.

Per aggiornare il livello di throughput di cui è stato eseguito il provisioning del volume Hyperdisk, segui le istruzioni della console Google Cloud, di gcloud CLI o dell'API Compute Engine in Modificare le prestazioni di cui è stato eseguito il provisioning per un volume Hyperdisk.

Puoi modificare il livello di throughput provisionato (fino a una volta ogni 4 ore) per un volume Hyperdisk dopo la creazione del volume. Per l'applicazione dei nuovi livelli di throughput potrebbero essere necessari fino a 15 minuti. Durante la modifica delle prestazioni, eventuali SLA e SLO relativi alle prestazioni non sono in vigore. Puoi modificare il livello di throughput di un volume esistente in qualsiasi momento, indipendentemente dal fatto che il disco sia collegato o meno a un'istanza in esecuzione.

Il nuovo livello di throughput specificato deve rispettare i valori supportati per i volumi Hyperdisk.

IOPS

L'aggiornamento delle IOPS sottoposte a provisioning è supportato solo per i volumi Hyperdisk Balanced e Hyperdisk Extreme.

Per aggiornare il livello di IOPS di cui è stato eseguito il provisioning del volume Hyperdisk, segui le istruzioni della console Google Cloud, gcloud CLI o dell'API Compute Engine in Modificare le prestazioni di cui è stato eseguito il provisioning per un volume Hyperdisk.

Puoi modificare il livello di IOPS di cui è stato eseguito il provisioning (fino a una volta ogni 4 ore) per un volume IOPS Hyperdisk dopo la creazione del volume. L'applicazione dei nuovi livelli di IOPS potrebbe richiedere fino a 15 minuti. Durante la variazione delle prestazioni, gli SLA e gli SLO relativi alle prestazioni non sono in vigore. Puoi modificare il livello IOPS di un volume esistente in qualsiasi momento, indipendentemente dal fatto che il disco sia collegato o meno a un'istanza in esecuzione.

Il nuovo livello di IOPS specificato deve rispettare i valori supportati per i volumi Hyperdisk.

Per aggiornare il livello di IOPS di cui è stato eseguito il provisioning per un volume Hyperdisk, devi identificare il nome del Persistent Disk di supporto delle risorse PersistentVolumeClaim e PersistentVolume:

  1. Vai al Browser degli oggetti nella console Google Cloud.

    Vai a Browser oggetti

  2. Trova la voce relativa all'oggetto PersistentVolumeClaim.

  3. Fai clic sul link Volume .

  4. Apri la scheda YAML del PersistentVolume associato. Individua il valore CSI volumeHandle in questa scheda.

  5. Prendi nota dell'ultimo elemento di questo handle (dovrebbe avere un valore come "pvc-XXXXX"). Si tratta del nome del tuo PersistentVolumeClaim. Devi anche prendere nota del progetto e della zona.

Monitorare la velocità effettiva o le IOPS su un volume Hyperdisk

Per monitorare il rendimento del volume Hyperdisk di cui è stato eseguito il provisioning, consulta Analizzare le IOPS e il throughput di cui è stato eseguito il provisioning nella documentazione di Compute Engine.

Risoluzione dei problemi

Questa sezione fornisce indicazioni per la risoluzione dei problemi relativi ai volumi Hyperdisk su GKE.

Impossibile modificare le prestazioni o la capacità: rapporto fuori intervallo

Quando provi a modificare il livello di rendimento o la capacità di cui è stato eseguito il provisioning, viene visualizzato il seguente errore, poiché il livello di rendimento o la capacità che hai scelto non rientrano nell'intervallo accettabile per il volume:

  • Requested provisioned throughput cannot be higher than <value>.
  • Requested provisioned throughput cannot be lower than <value>.
  • Requested provisioned throughput is too high for the requested disk size.
  • Requested provisioned throughput is too low for the requested disk size.
  • Requested disk size is too high for current provisioned throughput.

Il throughput riservato per i volumi di throughput Hyperdisk deve soddisfare i seguenti requisiti:

  • Almeno 10 MiBps per TiB di capacità e non più di 90 MiBps per TiB di capacità.
  • Massimo 600 MiBps per volume.

Per risolvere il problema, correggi il throughput o la capacità richiesti in modo che rientrino nell'intervallo consentito e riassegna il comando.

Impossibile modificare il rendimento: frequenza limitata

Quando provi a modificare il livello di rendimento provisionato, ma questo è già stato modificato nelle ultime 4 ore, si verifica il seguente errore:

Cannot update provisioned throughput due to being rate limited.
Cannot update provisioned iops due to being rate limited.

Il rendimento riservato dei volumi Hyperdisk Throughput e IOPS può essere aggiornato una volta ogni 4 ore. Per risolvere il problema, attendi il tempo di attesa del volume e poi emetti nuovamente il comando.

Passaggi successivi