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ústerNUMBER_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 tipoe2-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 comandogcloud 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ústerMACHINE_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ústerNUMBER_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 tipoe2-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 nuevoCLUSTER_NAME
: el nombre del clústerMACHINE_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.