Escala el rendimiento del almacenamiento con Hyperdisk


El controlador de CSI de Persistent Disk para Compute Engine es la forma principal en la que puedes acceder al almacenamiento de Hyperdisk con clústeres de Google Kubernetes Engine (GKE).

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta gcloud components update para obtener la versión más reciente.

Requisitos

Para usar los volúmenes de Hyperdisk en GKE, tus clústeres deben cumplir los siguientes requisitos:

Crea un volumen de Hyperdisk para GKE

En esta sección, se proporciona una descripción general de cómo crear un volumen de Hyperdisk respaldado por el controlador de CSI para Compute Engine en GKE.

Crea un StorageClass

El controlador de CSI de Persistent Disk para Compute Engine proporciona los siguientes campos Type de almacenamiento en Persistent Disk para admitir Hyperdisk:

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

Para crear una StorageClass nueva con el nivel de capacidad de procesamiento o IOPS que desees, usa pd.csi.storage.gke.io en el campo del aprovisionador y especifica uno de los tipos de almacenamiento de Hyperdisk.

Cada tipo de Hyperdisk tiene valores predeterminados para el rendimiento determinado por el tamaño de disco inicial aprovisionado. Cuando creas la StorageClass, puedes especificar de forma opcional los siguientes parámetros según tu tipo de Hyperdisk. Si omites estos parámetros, GKE usa los valores predeterminados del tipo de disco basado en la capacidad. Para obtener orientación sobre los valores permitidos de capacidad de procesamiento o IOPS, consulta Planifica el nivel de rendimiento del volumen de Hyperdisk.

Parámetro Tipo de Hyperdisk Uso
provisioned-throughput-on-create Hyperdisk Balanced*, Hyperdisk Throughput Expresa el valor de capacidad de procesamiento en MiBps con el calificador “Mi” Por ejemplo, si la capacidad de procesamiento requerida es de 250 MiBps, especifica "250Mi" cuando crees la StorageClass.
provisioned-iops-on-create Hyperdisk Balanced, Hyperdisk IOPS El valor de IOPS debe expresarse sin ningún calificador. Por ejemplo, si necesitas 7,000 IOPS, especifica "7000" cuando crees la StorageClass.
* Si necesitas una seguridad mejorada y planeas usar nodos confidenciales de Google Kubernetes Engine, considera crear el modo confidencial para Hyperdisk equilibrado, revisar las limitaciones adicionales del modo confidencial para Hyperdisk equilibrado y obtener más información sobre los nodos confidenciales de Google Kubernetes Engine.

En los siguientes ejemplos, se muestra cómo puedes crear una StorageClass para cada tipo de Hyperdisk:

Hiperdisco balanceado

  1. Guarda el siguiente manifiesto como un archivo llamado 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 StorageClass:

    kubectl create -f hdb-example-class.yaml
    

Capacidad de procesamiento del hiperdisco

  1. Guarda el siguiente manifiesto como un archivo llamado 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 StorageClass:

    kubectl create -f hdt-example-class.yaml
    

Hiperdisco extremo

  1. Guarda el siguiente manifiesto como un archivo llamado 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 StorageClass:

    kubectl create -f hdx-example-class.yaml
    

Para encontrar el nombre de la StorageClass disponible en tu clúster, ejecuta el siguiente comando:

kubectl get sc

Crea una PersistentVolumeClaim

Puedes crear una PersistentVolumeClaim que haga referencia a la StorageClass del controlador de CSI de Persistent Disk para Compute Engine.

Hiperdisco balanceado

En este ejemplo, debes especificar la capacidad de almacenamiento objetivo del volumen de hiperdisco balanceado como 20 GiB.

  1. Guarda el siguiente manifiesto de PersistentVolumeClaim en un archivo llamado pvc-example.yaml.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: balanced-storage
      resources:
        requests:
          storage: 20Gi
    
  2. Aplica la PersistentVolumeClaim que hace referencia a la StorageClass que creaste en el ejemplo anterior:

    kubectl apply -f pvc-example.yaml
    

Capacidad de procesamiento del hiperdisco

En este ejemplo, debes especificar la capacidad de almacenamiento objetivo del volumen de Hyperdisk Throughput como 2 TiB.

  1. Guarda el siguiente manifiesto de PersistentVolumeClaim en un archivo llamado pvc-example.yaml.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: throughput-storage
      resources:
        requests:
          storage: 2Ti
    
  2. Aplica la PersistentVolumeClaim que hace referencia a la StorageClass que creaste en el ejemplo anterior:

    kubectl apply -f pvc-example.yaml
    

Hiperdisco extremo

En este ejemplo, debes especificar la capacidad de almacenamiento mínima del volumen de Hyperdisk Extreme como 64 GiB.

  1. Guarda el siguiente manifiesto de PersistentVolumeClaim en un archivo llamado pvc-example.yaml.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: extreme-storage
      resources:
        requests:
          storage: 64Gi
    
  2. Aplica la PersistentVolumeClaim que hace referencia a la StorageClass que creaste en el ejemplo anterior:

    kubectl apply -f pvc-example.yaml
    

Crea un objeto Deployment para consumir el volumen de Hyperdisk

Cuando uses Pods con PersistentVolumes, te recomendamos usar un controlador de carga de trabajo (como Deployment o StatefulSet).

  1. En el siguiente ejemplo, se crea un manifiesto que configura un Pod para implementar un servidor web Nginx mediante la PersistentVolumeClaim creada en la sección anterior. Guarda el siguiente manifiesto de ejemplo como 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. Para crear un objeto Deployment basado en el archivo de manifiesto hyperdisk-example-deployment.yaml, ejecuta el siguiente comando:

    kubectl apply -f hyperdisk-example-deployment.yaml
    
  3. Confirma que el objeto Deployment se haya creado correctamente:

    kubectl get deployment
    

    Las instancias de Hyperdisk pueden tardar unos minutos en completar el aprovisionamiento. Cuando la implementación completa el aprovisionamiento, informa un estado READY.

  4. Para verificar el progreso, supervisa el estado de PersistentVolumeClaim mediante la ejecución del siguiente comando:

    kubectl get pvc
    

Aprovisiona un volumen de Hyperdisk a partir de una instantánea

Para crear un volumen de Hyperdisk nuevo a partir de una instantánea de Persistent Disk, usa la consola de Google Cloud, Google Cloud CLI o la API de Compute Engine. Para obtener información sobre cómo crear una instantánea de Persistent Disk, consulta Crea y usa instantáneas de volumen.

Console

  1. Ve a la página Discos en la consola de Google Cloud.

    Ir a Discos

  2. Haz clic en Crear disco.

  3. En Tipo de disco, elige una de las siguientes opciones para el tipo de disco:

    • Hiperdisco balanceado
    • Hyperdisk Extreme
    • Capacidad de procesamiento del hiperdisco
  4. En Tipo de fuente de disco, haz clic en Instantánea.

  5. Selecciona el nombre de la instantánea que deseas restablecer.

  6. Selecciona el tamaño del disco nuevo en GiB. Este número debe ser igual o mayor que el disco de origen para la instantánea.

  7. Configura la capacidad de procesamiento aprovisionada o las IOPS aprovisionadas que desees para el disco, si son diferentes de los valores predeterminados.

  8. Haz clic en Crear para crear el volumen de Hyperdisk.

gcloud

Ejecuta el comando gcloud compute disks create para crear el volumen de Hyperdisk a partir de una instantánea.

Hiperdisco balanceado

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

Reemplaza lo siguiente:

  • DISK_NAME: Es el nombre del disco nuevo.
  • SIZE: es el tamaño, en gibibytes (GiB) o tebibytes (TiB), del disco nuevo. Consulta la documentación de Compute Engine para conocer las limitaciones de capacidad más recientes.
  • SNAPSHOT_NAME: Es el nombre de la instantánea que se restablecerá.
  • THROUGHPUT_LIMIT: Opcional En el caso de los discos de Hyperdisk Balanced, este es un número entero que representa la capacidad de procesamiento, medida en MiBps, que el disco puede controlar. Consulta la documentación de Compute Engine para conocer las limitaciones más recientes.
  • IOPS_LIMIT: Opcional En los discos de Hyperdisk Balanced, esta es la cantidad de IOPS que puede controlar el disco. Consulta la documentación de Compute Engine para conocer las limitaciones de rendimiento más recientes.

Capacidad de procesamiento del hiperdisco

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

Reemplaza lo siguiente:

  • DISK_NAME: Es el nombre del disco nuevo.
  • SIZE: es el tamaño, en gibibytes (GiB o GB) o tebibytes (TiB o TB), del disco nuevo. Consulta la documentación de Compute Engine para conocer las limitaciones de capacidad más recientes.
  • SNAPSHOT_NAME: Es el nombre de la instantánea que se restablecerá.
  • THROUGHPUT_LIMIT: Opcional: En el caso de los discos de Hyperdisk Throughput, este es un número entero que representa la capacidad de procesamiento, medida en MiBps, que el disco puede manejar. Consulta la documentación de Compute Engine para conocer las limitaciones de rendimiento más recientes.

Hiperdisco extremo

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

Reemplaza lo siguiente:

  • DISK_NAME: Es el nombre del disco nuevo.
  • SIZE: es el tamaño, en gibibytes (GiB o GB) o tebibytes (TiB o TB), del disco nuevo. Consulta la documentación de Compute Engine para conocer las limitaciones de capacidad más recientes.
  • SNAPSHOT_NAME: Es el nombre de la instantánea que se restablecerá.
  • IOPS_LIMIT: Opcional: En el caso de los discos Hyperdisk Extreme, esta es la cantidad de operaciones de E/S por segundo que el disco puede controlar. Consulta la documentación de Compute Engine para conocer las limitaciones de rendimiento más recientes.

Crea una instantánea para un volumen de Hyperdisk

Si deseas crear una instantánea a partir de un volumen de Hyperdisk, sigue los mismos pasos que se usan para crear una instantánea de un volumen de Persistent Disk:

Actualiza la capacidad de procesamiento aprovisionada o las IOPS de un volumen de Hyperdisk existente

En esta sección, se explica cómo modificar el rendimiento aprovisionado para los volúmenes de Hyperdisk.

Capacidad de procesamiento

La actualización de la capacidad de procesamiento aprovisionada solo es compatible con los volúmenes de Hyperdisk Balanced y de Hyperdisk Throughput.

Para actualizar el nivel de capacidad de procesamiento aprovisionado de tu volumen de Hyperdisk, sigue las instrucciones de la consola de Google Cloud, la CLI de gcloud o la API de Compute Engine en Cambia el rendimiento aprovisionado para un volumen de Hyperdisk.

Puedes cambiar el nivel de capacidad de procesamiento aprovisionado (hasta una vez cada 4 horas) para un volumen de Hyperdisk después de la creación del volumen. Los niveles de capacidad de procesamiento nuevos pueden tardar hasta 15 minutos en aplicarse. Durante el cambio de rendimiento, ningún ANS ni SLO de rendimiento están vigentes. Puedes cambiar el nivel de capacidad de procesamiento de un volumen existente en cualquier momento, sin importar si el disco está conectado a una instancia en ejecución o no.

El nivel de capacidad de procesamiento nuevo que especifiques debe cumplir con los valores admitidos para volúmenes de Hyperdisk.

IOPS

La actualización de las IOPS aprovisionadas solo se admite para los volúmenes de Hyperdisk Balanced y de Hyperdisk Extreme.

Para actualizar el nivel de IOPS aprovisionado de tu volumen de Hyperdisk, sigue las instrucciones de la consola de Google Cloud, gcloud CLI o la API de Compute Engine en Cambia el rendimiento aprovisionado para un volumen de Hyperdisk.

Puedes cambiar el nivel de IOPS aprovisionado (hasta una vez cada 4 horas) para un volumen de IOPS de Hyperdisk después de la creación del volumen. Los niveles de IOPS nuevos pueden tardar hasta 15 minutos en aplicarse. Durante el cambio de rendimiento, ningún ANS ni SLO de rendimiento están vigentes. Puedes cambiar el nivel de IOPS de un volumen existente en cualquier momento, sin importar si el disco está conectado a una instancia en ejecución o no.

El nivel de IOPS nuevo que especifiques debe cumplir con los valores admitidos para volúmenes de Hyperdisk.

A fin de actualizar el nivel de IOPS aprovisionado para un volumen de Hyperdisk, debes identificar el nombre de Persistent Disk que respalda los recursos PersistentVolumeClaim y PersistentVolume:

  1. Ve al Navegador de objetos en la consola de Google Cloud.

    Ir al Navegador de objetos

  2. Busca la entrada para el objeto PersistentVolumeClaim.

  3. Haz clic en el vínculo Volumen .

  4. Abre la pestaña YAML del PersistentVolume asociado. Ubica el valor volumeHandle de CSI en esta pestaña.

  5. Observa el último elemento de este controlador (debe tener un valor como “pvc-XXXXX”). Este es el nombre de tu PersistentVolumeClaim. También debes tomar nota del proyecto y la zona.

Supervisa la capacidad de procesamiento o las IOPS en un volumen de Hyperdisk

Para supervisar el rendimiento aprovisionado del volumen de Hyperdisk, consulta Analiza las IOPS aprovisionadas y la capacidad de procesamiento en la documentación de Compute Engine.

Soluciona problemas

En esta sección, se proporciona orientación para solucionar problemas con los volúmenes de Hyperdisk en GKE.

No se puede cambiar el rendimiento o la capacidad: la proporción está fuera del rango

El siguiente error ocurre cuando intentas cambiar el nivel de rendimiento o la capacidad que se aprovisiona, pero el nivel de rendimiento o la capacidad que elegiste está fuera del rango aceptable para el volumen:

  • 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 capacidad de procesamiento aprovisionada para los volúmenes de Hyperdisk Throughput debe cumplir con los siguientes requisitos:

  • Al menos 10 MiBps por TiB de capacidad y no más de 90 MiBps por TiB de capacidad.
  • Máximo 600 MiBps por volumen.

Para resolver este problema, corrige la capacidad de procesamiento o la capacidad solicitada para que se encuentren dentro del rango permitido y vuelve a emitir el comando.

No se puede cambiar el rendimiento: frecuencia limitada

El siguiente error ocurre cuando intentas cambiar el nivel de rendimiento aprovisionado, pero el nivel de rendimiento ya cambió en las últimas 4 horas:

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

Los volúmenes de Hyperdisk Throughput y de IOPS pueden tener el rendimiento aprovisionado actualizado una vez cada 4 horas. Para resolver este problema, espera a que transcurra el temporizador de inactividad del volumen y vuelve a emitir el comando.

¿Qué sigue?