Scala le prestazioni dell'archiviazione con Hyperdisk


Il driver CSI per il disco permanente di Compute Engine è il modo principale per accedere all'archiviazione Hyperdisk con i cluster GKE.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

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

Requisiti

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

Crea 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.

Creazione di un oggetto StorageClass

I seguenti campi Type di archiviazione su disco permanente sono forniti dal driver CSI del disco permanente di Compute Engine per supportare Hyperdisk:

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

Per creare un nuovo oggetto StorageClass con il livello di velocità effettiva o IOPS desiderato, utilizza pd.csi.storage.gke.io nel campo provisioner e specifica uno dei tipi di archiviazione Hypeperdisk.

Ogni tipo di Hyperdisk ha valori predefiniti per le prestazioni determinate dalla dimensione iniziale del disco di cui è stato eseguito il provisioning. Durante la creazione dell'oggetto StorageClass, puoi specificare facoltativamente i seguenti parametri a seconda del tipo di Hyperdisk. Se ometti questi parametri, GKE utilizza i valori predefiniti del tipo di disco basati sulla capacità.

Parametro Tipo di hyperdisk Utilizzo
provisioned-throughput-on-create Hyperdisk bilanciata, velocità effettiva Hyperdisk Esprimi il valore della velocità effettiva in MiBps utilizzando il qualificatore "Mi". Ad esempio, se la velocità effettiva richiesta è di 250 MiBps, specifica "250Mi" durante la creazione di StorageClass.
provisioned-iops-on-create Hyperdisk bilanciato, IOPS Hyperdisk Il valore IOPS deve essere espresso senza qualificatori; ad esempio, se sono richieste 7000 IOPS, specifica "7000" durante la creazione di StorageClass.

Per indicazioni sui valori consentiti per velocità effettiva o IOPS, vedi Pianificare il livello di prestazioni per il volume Hyperdisk.

I seguenti esempi mostrano come creare un oggetto 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 il oggetto StorageClass:

    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 il oggetto StorageClass:

    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 il oggetto StorageClass:

    kubectl create -f hdx-example-class.yaml
    

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

kubectl get sc

Crea un PersistentVolumeClaim

Puoi creare un oggetto PersistentVolumeClaim che fa riferimento all'oggetto StorageClass del driver CSI del 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 di 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 l'oggetto PersistentVolumeClaim che fa riferimento al valore StorageClass che hai creato nell'esempio precedente:

    kubectl apply -f pvc-example.yaml
    

Velocità effettiva Hyperdisk

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

  1. Salva il seguente manifest di 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 l'oggetto PersistentVolumeClaim che fa riferimento al valore StorageClass che hai creato nell'esempio precedente:

    kubectl apply -f pvc-example.yaml
    

Hyperdisk Extreme

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

  1. Salva il seguente manifest di 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 l'oggetto PersistentVolumeClaim che fa riferimento al valore StorageClass che hai creato nell'esempio precedente:

    kubectl apply -f pvc-example.yaml
    

Crea un deployment per utilizzare il volume Hyperdisk

Quando usi pod con oggetti PersistentVolume, ti consigliamo di usare un controller dei carichi di lavoro (come un Deployment o uno 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 basato sul file manifest hyperdisk-example-deployment.yaml, esegui questo comando:

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

    kubectl get deployment
    

    Il completamento del provisioning delle istanze Hyperdisk potrebbe richiedere alcuni minuti. Quando il deployment completa il provisioning, viene segnalato lo stato READY.

  4. Puoi verificare l'avanzamento monitorando lo stato di PersistentVolumeClaim eseguendo questo 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 Persistent Disk, consulta Creazione e utilizzo degli snapshot di 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 Istantanea.

  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 sottoposta a provisioning o il valore IOPS sottoposte a provisioning che vuoi utilizzare per il disco, se diverso 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: la dimensione del nuovo disco, in gigabyte (GiB) o tebibyte (TiB). 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 bilanciati Hypeperdisk, si tratta di un numero intero che rappresenta la velocità effettiva, misurata in MiBps, che il disco è in grado di gestire. Per le limitazioni più recenti, consulta la documentazione di Compute Engine.
  • IOPS_LIMIT: facoltativo. Per i dischi bilanciati Hypeperdisk, questo è il numero di IOPS che il disco è in grado di gestire. Per le limitazioni delle 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: la dimensione, 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 per la velocità effettiva Hyperdisk, si tratta di un numero intero che rappresenta la velocità effettiva, misurata in MiBps, che il disco è in grado di gestire. Per le limitazioni delle 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: la dimensione, 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, il numero di operazioni di I/O al secondo che il disco è in grado di gestire. Per le limitazioni delle prestazioni più recenti, consulta la documentazione di Compute Engine.

Creazione di uno snapshot per un volume Hyperdisk

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

Aggiorna la velocità effettiva o le IOPS sottoposte a provisioning di un volume Hyperdisk esistente

Questa sezione illustra come modificare le prestazioni di cui è stato eseguito il provisioning per i volumi Hypeperdisk.

Velocità effettiva

L'aggiornamento della velocità effettiva di cui è stato eseguito il provisioning è supportato solo per i volumi di velocità effettiva Hyperdisk bilanciata e Hyperdisk.

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

Puoi modificare il livello di velocità effettiva di cui è stato eseguito il provisioning (fino a una volta ogni 4 ore) per un volume Hyperdisk dopo la creazione del volume. L'applicazione dei nuovi livelli di velocità effettiva potrebbe richiedere fino a 15 minuti. Durante la variazione delle prestazioni, eventuali SLA (accordi sul livello del servizio) e SLO delle prestazioni non sono attivi. Puoi modificare il livello di velocità effettiva 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 velocità effettiva specificato deve rispettare i valori supportati per i volumi Hyperdisk.

IOPS

L'aggiornamento delle IOPS sottoposte a provisioning è supportato solo per i volumi Hyperdisk bilanciati 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, 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 IOPS di cui è stato eseguito il provisioning (fino a una volta ogni 4 ore) per un volume di 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, eventuali SLA (accordi sul livello del servizio) e SLO delle 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 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 che supporta le risorse PersistentVolumeClaim e PersistentVolume:

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

    Vai al browser degli oggetti

  2. Trova la voce per l'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 simile a "pvc-XXXXX"). Questo è il nome dell'oggetto PersistentVolumeClaim. Dovresti anche prendere nota del progetto e della zona.

Monitoraggio della velocità effettiva o del numero di IOPS su un volume Hyperdisk

Per monitorare le prestazioni del volume Hyperdisk di cui è stato eseguito il provisioning, vedi Analizzare le IOPS e la velocità effettiva 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 prestazioni o capacità: rapporto fuori intervallo

Il seguente errore si verifica quando tenti di modificare il livello di prestazioni o la capacità di cui è stato eseguito il provisioning, ma il livello di prestazioni o la capacità che hai scelto non rientra 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.

La velocità effettiva di cui è stato eseguito il provisioning dei volumi di velocità effettiva Hyperdisk deve soddisfare i seguenti requisiti:

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

Per risolvere il problema, correggi la velocità effettiva o la capacità richieste in modo che rientrino nell'intervallo consentito e invia nuovamente il comando.

Impossibile modificare il rendimento: tariffa limitata

Il seguente errore si verifica quando cerchi di modificare il livello di prestazioni di cui è stato eseguito il provisioning, ma il livello di prestazioni è già stato modificato nelle ultime 4 ore:

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

Le prestazioni di cui è stato eseguito il provisioning dei volumi Hyperdisk possono essere aggiornate una volta ogni 4 ore. Per risolvere il problema, attendi che termini il timer di raffreddamento per far scadere il volume, quindi esegui nuovamente il comando.

Passaggi successivi