Aprovisiona y usa el almacenamiento efímero respaldado por SSDs locales.


En esta página, se explica cómo aprovisionar almacenamiento SSD local en los clústeres de Google Kubernetes Engine (GKE) y cómo configurar las cargas de trabajo para que consuman datos del almacenamiento efímero respaldado por SSD local conectado a los nodos de tu clúster.

Para obtener más información sobre la compatibilidad con SSD locales en GKE, consulta Información sobre el almacenamiento SSD local.

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.

Crea un clúster o grupo de nodos con almacenamiento efímero respaldado por SSD local

Usa Google Cloud CLI para crear un clúster o grupo de nodos con almacenamiento efímero respaldado por SSD local.

Usa la opción --ephemeral-storage-local-ssd para conectar almacenamiento efímero local completamente administrado respaldado por volúmenes de SSD locales. Este almacenamiento está vinculado al ciclo de vida de tus Pods. Cuando tus Pods solicitan almacenamiento efímero, GKE los programa para que se ejecuten en nodos que tienen volúmenes de SSD locales configurados como almacenamiento efímero. Si necesitas un control más especializado o detallado sobre tus SSD locales, te recomendamos que uses el almacenamiento en bloque sin procesar respaldado por SSD local.

Si tienes habilitado el ajuste de escala automático del clúster, GKE escala de forma automática tus nodos cuando el clúster necesita más espacio de almacenamiento efímero. Tus Pods pueden acceder a los datos de los volúmenes de SSDs locales a través del volumen emptyDir.

El comando de gcloud CLI que ejecutas para crear el clúster o grupo de nodos depende de la generación de series de máquinas del tipo de máquina seleccionado. Por ejemplo, los tipos de máquinas N1 y N2 pertenecen a series de máquinas de primera y segunda generación respectivamente, mientras que los tipos de máquinas C3 pertenecen a una serie de máquinas de tercera generación.

Crea un clúster con SSD local

Primera o segunda generación

Si usas un tipo de máquina de una serie de máquinas de primera o segunda generación, especifica la opción --ephemeral-storage-local-ssd count=NUMBER_OF_DISKS para crear tu clúster. Esta opción aprovisiona la cantidad especificada de volúmenes de SSD locales en cada nodo para usar en el almacenamiento efímero de kubelet.

Esta configuración se aplica solo al grupo de nodos predeterminado. Si los grupos de nodos posteriores necesitan SSD local, especifícalo durante la creación del grupo de nodos.

Para crear un clúster que se ejecute en la versión 1.25.3-gke.1800 o posterior de GKE en el que el grupo predeterminado use volúmenes de SSDs locales, ejecuta el siguiente comando:

gcloud container clusters create CLUSTER_NAME \
    --ephemeral-storage-local-ssd count=NUMBER_OF_DISKS \
    --machine-type=MACHINE_TYPE \
    --release-channel CHANNEL_NAME

Reemplaza lo siguiente:

  • CLUSTER_NAME: el nombre del clúster
  • NUMBER_OF_DISKS: es la cantidad de volumenes SSD locales que se aprovisionarán en cada nodo. Estos volúmenes se combinan en un solo volumen lógico durante la configuración de nodos. La cantidad máxima de volúmenes varía según el tipo de máquina y la región. Ten en cuenta que parte de la capacidad de SSD local está reservada para el uso del sistema.
  • MACHINE_TYPE: Es el tipo de máquina que se usará. Este campo es obligatorio, ya que la SSD local no se puede usar con el tipo e2-medium predeterminado.
  • CHANNEL_NAME: Un canal de versiones que incluye versiones de GKE posteriores a la 1.25.3-gke.1800. Si prefieres no usar un canal de versiones, también puedes usar la marca --cluster-version en lugar de --release-channel, con una versión válida posterior a la 1.25.3-gke.1800. Para determinar las versiones válidas, usa el comando gcloud container get-server-config.

Tercera generación

Si usas un tipo de máquina de una serie de máquinas de tercera generación, no necesitas especificar ninguna opción de SSD local cuando crees un clúster. La cantidad de discos conectados a cada nodo depende del tipo de máquina.

Para crear un clúster, ejecuta el siguiente comando:

gcloud container clusters create CLUSTER_NAME \
  --machine-type=MACHINE_TYPE \
  --cluster-version CLUSTER_VERSION

Reemplaza lo siguiente:

  • CLUSTER_NAME: el nombre del clúster
  • MACHINE_TYPE: el tipo de máquina que se usará de una serie de máquinas de tercera generación.
  • CLUSTER_VERSION: una versión de clúster de GKE que admite SSD locales en tipos de máquinas de una serie de máquinas de tercera generación.

Crea un grupo de nodos con SSD locales

Primera o segunda generación

Para crear un grupo de nodos que se ejecute en la versión 1.25.3-gke.1800 o posterior de GKE que use volúmenes de SSD locales, ejecuta el siguiente comando:

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --ephemeral-storage-local-ssd count=NUMBER_OF_DISKS \
    --machine-type=MACHINE_TYPE

Reemplaza lo siguiente:

  • POOL_NAME: el nombre de tu grupo de nodos nuevo.
  • CLUSTER_NAME: el nombre del clúster
  • NUMBER_OF_DISKS: es la cantidad de volumenes SSD locales que se aprovisionarán en cada nodo. Estos volúmenes se combinan en un solo volumen lógico durante la configuración de nodos. La cantidad máxima de volúmenes varía según el tipo de máquina y la región. Ten en cuenta que parte de la capacidad de SSD local está reservada para el uso del sistema.
  • MACHINE_TYPE: Es el tipo de máquina que se usará. Este campo es obligatorio, ya que la SSD local no se puede usar con el tipo e2-medium predeterminado.

Tercera generación

Si usas un tipo de máquina de una serie de máquinas de tercera generación, no necesitas especificar ninguna opción de SSD local cuando crees un grupo de nodos. La cantidad de volúmenes conectados a cada nodo depende del tipo de máquina.

Para crear un grupo de nodos, ejecuta el siguiente comando:

gcloud container node-pools create POOL_NAME \
  --cluster=CLUSTER_NAME \
  --machine-type=MACHINE_TYPE \
  --node-version NODE_VERSION

Reemplaza lo siguiente:

  • POOL_NAME: el nombre del grupo de nodos nuevo
  • CLUSTER_NAME: el nombre del clúster
  • MACHINE_TYPE: el tipo de máquina que se usará de una serie de máquinas de tercera generación.
  • NODE_VERSION: una versión de grupo de nodos de GKE que admite SSD locales en tipos de máquinas de una serie de máquinas de tercera generación.

Los nodos en el grupo de nodos se crean con una etiqueta cloud.google.com/gke-ephemeral-storage-local-ssd=true. Para verificar las etiquetas, ejecuta el siguiente comando:

kubectl describe node NODE_NAME

Usa el almacenamiento efímero respaldado por SSD local con clústeres de Autopilot

Puedes usar SSDs locales en las siguientes clases de procesamiento de Autopilot:

  • Performance
  • Accelerator

Para la clase Performance, sigue las instrucciones a fin de usar SSD locales en Pods de clase de rendimiento.

Para la clase de procesamiento Accelerator, puedes usar SSDs locales para el almacenamiento efímero si usas GPU NVIDIA L4 y ejecutas la versión de parche de GKE 1.28.6-gke.1369000 y posteriores, o 1.29.1-gke.1575000 y posteriores. Las GPU NVIDIA H100 (80 GB) y las GPU NVIDIA A100 (80 GB) siempre usan SSD locales para el almacenamiento efímero y no puedes especificar el siguiente selector de nodos para esas GPU.

Si quieres usar una SSD local para el almacenamiento efímero, agrega nodeSelector cloud.google.com/gke-ephemeral-storage-local-ssd: "true" al manifiesto de la carga de trabajo. La especificación de tu Pod debería ser similar al siguiente ejemplo:

apiVersion: v1
kind: Pod
metadata:
  name: l4-localssd-pod
spec:
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    resources:
      requests:
        cpu: 16
        memory: 64Gi
        ephemeral-storage: 800Gi
      limits:
       cpu: 16
       memory: 64Gi
       ephemeral-storage: 800Gi
       nvidia.com/gpu: 8
  nodeSelector:
    cloud.google.com/gke-accelerator: nvidia-l4
    cloud.google.com/gke-ephemeral-storage-local-ssd: "true"

Usa el parámetro de API heredado

La opción --local-ssd-count es un parámetro de API heredado que admite SSD locales SCSI. La serie de máquinas de tercera generación de Compute Engine no es compatible con SCSI y solo admite NVMe. Solo debes usar esta opción con clústeres de Windows Server. Si actualmente usas el parámetro de API heredado en clústeres de Linux, te recomendamos que uses la opción --ephemeral-storage-local-ssd.

SSD local en clústeres de Windows Server

Cuando usas SSD locales con tus clústeres que ejecutan grupos de nodos de Windows Server, debes acceder al nodo y formatear el volumen antes de usarlo. En el siguiente ejemplo, el volumen SSD local está formateado con el sistema de archivos NTFS. También puedes crear directorios en el volumen. En este ejemplo, los directorios están en el disco D.

PS C:\> Get-Disk | Where partitionstyle -eq 'raw' | Initialize-Disk -PartitionStyle MBR -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem ntfs -Confirm:$false
PS C:\> mkdir D:\test-ssd

Accede a los volúmenes de SSD locales

En el siguiente ejemplo, se muestra cómo puedes acceder al almacenamiento efímero respaldado por SSDs locales.

Almacenamiento efímero como un volumen emptyDir

Se puede configurar un grupo de nodos de GKE para usar discos SSD locales para el almacenamiento efímero, incluidos los volúmenes emptyDir.

En el siguiente manifiesto del Pod, se usa un emptyDir y un selector de nodos de cloud.google.com/gke-ephemeral-storage-local-ssd. Puedes aplicar una técnica similar para los manifiestos de implementación o los manifiestos de StatefulSet.

Cuando elijas la solicitud de recurso de almacenamiento efímero, ten en cuenta la capacidad de SSD local reservada para el uso del sistema.

apiVersion: v1
kind: Pod
metadata:
  name: POD_NAME
spec:
  containers:
    - name: CONTAINER_NAME
      image: "registry.k8s.io/pause"
      resources:
        requests:
          ephemeral-storage: "200Gi"
      volumeMounts:
        - mountPath: /cache
          name: scratch-volume
  nodeSelector:
    cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
  volumes:
    - name: scratch-volume
      emptyDir: {}

Soluciona problemas

Si deseas obtener instrucciones para solucionar problemas, consulta Soluciona problemas de almacenamiento en GKE.

¿Qué sigue?