Escalar el rendimiento del almacenamiento con Hyperdisk

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

Antes de empezar

Antes de empezar, asegúrate de que has realizado las siguientes tareas:

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando gcloud components update.

Requisitos

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

Crear un volumen de Hyperdisk para GKE

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

Crear un StorageClass

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

  • hyperdisk-balanced
  • hyperdisk-throughput
  • hyperdisk-extreme
  • hyperdisk-ml
  • hyperdisk-balanced-high-availability

Para crear una StorageClass con el nivel de rendimiento o IOPS que quieras, 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 de rendimiento determinados por el tamaño inicial del disco aprovisionado. Cuando crees el StorageClass, puedes especificar los siguientes parámetros en función de tu tipo de Hyperdisk. Si omite estos parámetros, GKE usará los valores predeterminados del tipo de disco basado en la capacidad. Para obtener información sobre los valores permitidos de la tasa de transferencia o las IOPS, consulta Planificar el nivel de rendimiento de un volumen de Hyperdisk.

Parámetro Tipo de Hyperdisk Uso
provisioned-throughput-on-create Hyperdisk Balanced*, Hyperdisk Balanced High Availability y Hyperdisk Throughput Indica el valor de rendimiento en MiB/s con el calificador "Mi". Por ejemplo, si el rendimiento que necesitas es de 250 MiB/s, especifica "250Mi" al crear StorageClass.
provisioned-iops-on-create Hyperdisk Balanced, Hyperdisk Balanced High Availability y Hyperdisk Extreme El valor de IOPS debe expresarse sin ningún calificador. Por ejemplo, si necesitas 7000 IOPS, especifica "7000" al crear StorageClass.
* Si necesitas una seguridad mejorada y tienes previsto usar nodos de Google Kubernetes Engine confidenciales, te recomendamos que crees el modo Confidencial para Hyperdisk Balanced, consultes las limitaciones adicionales del modo Confidencial para Hyperdisk Balanced y obtengas más información sobre los nodos de Google Kubernetes Engine confidenciales.

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

Hyperdisk Balanced

  1. Guarda el siguiente manifiesto en 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 el objeto StorageClass:

    kubectl create -f hdb-example-class.yaml
    

Hyperdisk Throughput

  1. Guarda el siguiente manifiesto en 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 el objeto StorageClass:

    kubectl create -f hdt-example-class.yaml
    

Hyperdisk Extreme

  1. Guarda el siguiente manifiesto en 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 el objeto StorageClass:

    kubectl create -f hdx-example-class.yaml
    

Hyperdisk Balanced HA

  1. Guarda el siguiente manifiesto en un archivo llamado hdb-ha-example-class.yaml.

    • En el caso de los clústeres zonales, define las zonas de disponibilidad en las que quieras crear los PersistentVolumes.

    • En el caso de los clústeres regionales, puedes no definir el campo allowedTopologies para crear los PersistentVolumes en dos zonas de disponibilidad seleccionadas aleatoriamente en el momento de programar los pods.

    Para obtener más información sobre las zonas admitidas, consulta la disponibilidad regional de Hyperdisk.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: balanced-ha-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-balanced-high-availability
      provisioned-throughput-on-create: "250Mi"
      provisioned-iops-on-create: "7000"
    allowedTopologies:
    - matchLabelExpressions:
      - key: topology.gke.io/zone
        values:
        - ZONE1
        - ZONE2
    
  2. Crea el objeto StorageClass:

    kubectl create -f hdb-ha-example-class.yaml
    

Para encontrar el nombre de las StorageClasses disponibles en tu clúster, ejecuta el siguiente comando:

kubectl get sc

Crear un PersistentVolumeClaim

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

Hyperdisk Balanced

En este ejemplo, se especifica que la capacidad de almacenamiento objetivo del volumen Hyperdisk Balanced es de 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 el PersistentVolumeClaim que hace referencia a la StorageClass que has creado en el ejemplo anterior:

    kubectl apply -f pvc-example.yaml
    

Hyperdisk Throughput

En este ejemplo, se especifica la capacidad de almacenamiento objetivo del volumen de rendimiento de HyperDisk 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 el PersistentVolumeClaim que hace referencia a la StorageClass que has creado en el ejemplo anterior:

    kubectl apply -f pvc-example.yaml
    

Hyperdisk Extreme

En este ejemplo, se especifica la capacidad de almacenamiento mínima del volumen 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 el PersistentVolumeClaim que hace referencia a la StorageClass que has creado en el ejemplo anterior:

    kubectl apply -f pvc-example.yaml
    

Hyperdisk Balanced HA

En este ejemplo, se especifica que la capacidad de almacenamiento mínima del volumen Hyperdisk Balanced High Availability es de 20 GiB y que el modo de acceso es ReadWriteOnce. Hyperdisk Balanced High Availability también admite los modos de acceso ReadWriteMany y ReadWriteOncePod. Para ver las diferencias y los casos prácticos de cada modo de acceso, consulta Modos de acceso de volúmenes persistentes.

  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-ha-storage
      resources:
        requests:
          storage: 20Gi
    
  2. Aplica el PersistentVolumeClaim que hace referencia a la StorageClass que has creado en el ejemplo anterior:

    kubectl apply -f pvc-example.yaml
    

Crear un Deployment para consumir el volumen de Hyperdisk

Cuando uses pods con PersistentVolumes, te recomendamos que utilices un controlador de carga de trabajo (como un Deployment o un StatefulSet).

  1. En el siguiente ejemplo se crea un manifiesto que configura un pod para desplegar un servidor web Nginx mediante el objeto PersistentVolumeClaim creado 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:
              # Reference the PVC created earlier.
              claimName: podpvc
              readOnly: false
    
  2. Para crear un 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 despliegue se ha creado correctamente:

    kubectl get deployment
    

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

  4. Para comprobar el progreso, monitoriza el estado de PersistentVolumeClaim ejecutando el siguiente comando:

    kubectl get pvc
    

Aprovisionar un volumen de Hyperdisk a partir de una captura

Para crear un volumen de Hyperdisk a partir de una instantánea de Persistent Disk, usa la Trusted Cloud consola, la CLI de Google Cloud o la API de Compute Engine. Para saber cómo crear una captura de Persistent Disk, consulta Crear y usar capturas de volumen.

Consola

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

    Ir a Discos

  2. Haz clic en Crear disco.

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

    • Hyperdisk Balanced
    • Hyperdisk Extreme
    • Rendimiento de Hyperdisk
    • Alta disponibilidad de Hyperdisk
  4. En Tipo de origen del disco, haga clic en Captura.

  5. Selecciona el nombre de la copia de seguridad que quieras restaurar.

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

  7. Define el rendimiento aprovisionado o las IOPS aprovisionadas que quieras para el disco, si son diferentes de los valores predeterminados.

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

gcloud

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

Hyperdisk Balanced

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

Haz los cambios siguientes:

  • DISK_NAME: el nombre del nuevo disco.
  • SIZE: el tamaño del nuevo disco en gibibytes (GiB) o tebibytes (TiB). Para obtener más información sobre las limitaciones de capacidad, consulta Límites de tamaño y rendimiento.
  • SNAPSHOT_NAME: el nombre de la captura que se está restaurando.
  • THROUGHPUT_LIMIT: opcional. En el caso de los discos Hyperdisk Balanced, se trata de un número entero que representa el rendimiento, medido en MiB/s, que puede alcanzar el disco. Para obtener más información sobre las limitaciones de capacidad, consulta Límites de tamaño y rendimiento.
  • IOPS_LIMIT: opcional. En el caso de los discos Hyperdisk Balanced, este es el número máximo de IOPS que puede alcanzar el disco. Para obtener más información sobre las limitaciones de capacidad, consulta Límites de tamaño y rendimiento.

Hyperdisk Throughput

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

Haz los cambios siguientes:

  • DISK_NAME: el nombre del nuevo disco.
  • SIZE: el tamaño del nuevo disco en gibibytes (GiB o GB) o tebibytes (TiB o TB). Para obtener más información sobre las limitaciones de capacidad, consulta Límites de tamaño y rendimiento.
  • SNAPSHOT_NAME: el nombre de la captura que se está restaurando.
  • THROUGHPUT_LIMIT: opcional. En el caso de los discos Hyperdisk Throughput, se trata de un entero que representa el rendimiento, medido en MiB/s, que puede alcanzar el disco. Para obtener más información sobre las limitaciones de capacidad, consulta Límites de tamaño y rendimiento.

Hyperdisk Extreme

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

Haz los cambios siguientes:

  • DISK_NAME: el nombre del nuevo disco.
  • SIZE: el tamaño, en gibibytes (GiB o GB) o tebibytes (TiB o TB), del nuevo disco. Para obtener más información sobre las limitaciones de capacidad, consulta Límites de tamaño y rendimiento.
  • SNAPSHOT_NAME: el nombre de la captura que se está restaurando.
  • IOPS_LIMIT: opcional. En el caso de los discos Hyperdisk Extreme, es el número máximo de operaciones de E/S por segundo que puede alcanzar el disco. Para obtener más información sobre las limitaciones de capacidad, consulta Límites de tamaño y rendimiento.

Hyperdisk Balanced HA

gcloud compute disks create DISK_NAME \
    --size=SIZE \
    --region=REGION \
    --replica-zones=('ZONE1', 'ZONE2') \
    --source-snapshot=SNAPSHOT_NAME \
    --provisioned-throughput=TRHROUGHPUT_LIMIT \
    --provisioned-iops=IOPS_LIMIT \
    --type=hyperdisk-balanced-high-availability

Haz los cambios siguientes:

  • DISK_NAME: el nombre del nuevo disco.
  • SIZE: el tamaño, en gibibytes (GiB) o tebibytes (TiB), del nuevo disco. Consulta las limitaciones de capacidad más recientes en la documentación de Compute Engine.
  • REGION: la región del nuevo disco. Consulta la documentación de Compute Engine para ver la disponibilidad regional más reciente.
  • ZONE1 y ZONE2: las zonas de la región en las que se ubicarán las réplicas.
  • SNAPSHOT_NAME: el nombre de la captura que se está restaurando.
  • THROUGHPUT_LIMIT: opcional. En el caso de los discos Hyperdisk Balanced High Availability, se trata de un número entero que representa el rendimiento, medido en MiB/s, que puede alcanzar el disco. Para obtener más información sobre las limitaciones de capacidad, consulta Límites de tamaño y rendimiento.
  • IOPS_LIMIT: opcional. En el caso de los discos Hyperdisk Balanced High Availability, se trata del número máximo de IOPS que puede alcanzar el disco. Para obtener más información sobre las limitaciones de capacidad, consulta Límites de tamaño y rendimiento.

Crear una captura de un volumen de Hyperdisk

Para crear una captura a partir de un volumen de Hyperdisk, sigue los mismos pasos que para crear una captura de un volumen de Persistent Disk:

Actualizar la capacidad de procesamiento o las IOPS aprovisionadas de un volumen de Hyperdisk

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

Rendimiento

Solo se puede actualizar la capacidad de procesamiento reservada de los volúmenes Hyperdisk Balanced, Hyperdisk Balanced High Availability y Hyperdisk Throughput.

Para actualizar el nivel de rendimiento aprovisionado de tu volumen de Hyperdisk, sigue las instrucciones de la Trusted Cloud consola, la CLI de gcloud o la API de Compute Engine que se indican en el artículo Cambiar el rendimiento aprovisionado de un volumen de Hyperdisk.

Puedes cambiar el nivel de rendimiento aprovisionado (hasta una vez cada 4 horas) de un volumen de HyperDisk después de crearlo. Los nuevos niveles de rendimiento pueden tardar hasta 15 minutos en aplicarse. Durante el cambio de rendimiento, no se aplicarán los acuerdos de nivel de servicio ni los objetivos de nivel de servicio. Puedes cambiar el nivel de rendimiento de un volumen en cualquier momento, independientemente de si el disco está conectado a una instancia en ejecución o no.

El nuevo nivel de rendimiento que especifiques debe cumplir los valores admitidos para los volúmenes de Hyperdisk Balanced, Hyperdisk Throughput y Hyperdisk Balanced High Availability, respectivamente.

Para actualizar el nivel de rendimiento aprovisionado de un volumen de Hyperdisk, debes identificar el nombre del Persistent Disk que respalda tus recursos PersistentVolumeClaim y PersistentVolume:

  1. Ve al explorador de objetos de la Trusted Cloud consola.

    Ir al navegador de objetos

  2. Busca la entrada de tu objeto PersistentVolumeClaim.

  3. Haz clic en el enlace Volumen .

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

  5. Fíjate en el último elemento de este identificador (debe tener un valor como "pvc-XXXXX"). Este es el nombre de tu PersistentVolumeClaim. También debes anotar el proyecto y la zona.

IOPS

Solo se pueden actualizar las IOPS aprovisionadas de los volúmenes de Hyperdisk Balanced, Hyperdisk Balanced High Availability y Hyperdisk Extreme.

Para actualizar el nivel de IOPS aprovisionado de tu volumen de Hyperdisk, sigue las instrucciones de la consola, la CLI de gcloud o la API de Compute Engine que se indican en el artículo Cambiar el rendimiento aprovisionado de un volumen de Hyperdisk. Trusted Cloud

Puedes cambiar el nivel de IOPS aprovisionadas (hasta una vez cada 4 horas) de un volumen de HyperDisk IOPS después de crear el volumen. Los nuevos niveles de IOPS pueden tardar hasta 15 minutos en aplicarse. Durante el cambio de rendimiento, no se aplicará ningún acuerdo ni objetivo de nivel de servicio. Puedes cambiar el nivel de IOPS de un volumen en cualquier momento, independientemente de si el disco está conectado a una instancia en ejecución o no.

El nuevo nivel de IOPS que especifiques debe cumplir los valores admitidos para los volúmenes de Hyperdisk Balanced o Hyperdisk Extreme, respectivamente.

Para actualizar el nivel de IOPS aprovisionadas de un volumen de hiperdisco, debes identificar el nombre del disco persistente que respalda tus recursos PersistentVolumeClaim y PersistentVolume:

  1. Ve al explorador de objetos de la Trusted Cloud consola.

    Ir al navegador de objetos

  2. Busca la entrada de tu objeto PersistentVolumeClaim.

  3. Haz clic en el enlace Volumen .

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

  5. Fíjate en el último elemento de este identificador (debe tener un valor como "pvc-XXXXX"). Este es el nombre de tu PersistentVolumeClaim. También debes anotar el proyecto y la zona.

Monitorizar el rendimiento o las IOPS de un volumen de Hyperdisk

Para monitorizar el rendimiento aprovisionado de tu volumen de Hyperdisk, consulta la sección Analizar las IOPS y el rendimiento aprovisionados de la documentación de Compute Engine.

Solución de problemas

En esta sección se proporcionan instrucciones para solucionar problemas con volúmenes de Hyperdisk en GKE.

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

Se produce el siguiente error cuando intenta cambiar el nivel de rendimiento o la capacidad aprovisionados, pero el nivel de rendimiento o la capacidad que ha elegido están fuera del intervalo 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.

El rendimiento aprovisionado para los volúmenes de Hyperdisk Throughput debe cumplir los siguientes requisitos:

  • Al menos 10 MiB/s por TiB de capacidad y no más de 90 MiB/s por TiB de capacidad.
  • Un máximo de 600 MiB/s por volumen.

Para solucionar este problema, corrige el rendimiento o la capacidad solicitados para que estén dentro del intervalo permitido y vuelve a emitir el comando.

No se puede cambiar el rendimiento: se ha limitado la frecuencia

Se produce el siguiente error cuando intentas cambiar el nivel de rendimiento aprovisionado, pero ya se ha cambiado en las últimas 4 horas:

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

El rendimiento aprovisionado de los volúmenes de Hyperdisk Throughput e IOPS se puede actualizar una vez cada 4 horas. Para resolver este problema, espera a que termine el tiempo de espera del volumen y vuelve a emitir el comando.

Siguientes pasos