En esta página se explica cómo aprovisionar almacenamiento SSD local en clústeres de Google Kubernetes Engine (GKE) y cómo configurar 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 local en GKE, consulta el artículo Acerca del almacenamiento en SSD local.
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 CLI de gcloud, obtén la versión más reciente ejecutando el comando
gcloud components update
. Es posible que las versiones anteriores de la interfaz de línea de comandos de gcloud no admitan la ejecución de los comandos de este documento.
Crear un clúster o un grupo de nodos con almacenamiento efímero respaldado por SSD local
Usa la CLI de Google Cloud para crear un clúster o un grupo de nodos con almacenamiento efímero respaldado por SSD local.
Usa la opción --ephemeral-storage-local-ssd
para adjuntar almacenamiento efímero local totalmente gestionado
respaldado por volúmenes de SSD local. 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 tengan volúmenes de SSD local configurados como almacenamiento efímero. Si quieres tener un control más especializado o granular sobre tus SSD locales, te recomendamos que utilices el almacenamiento de bloques sin formato respaldado por SSD local.
Si tienes habilitado el autoescalado de clústeres, GKE autoescala 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 SSD local a través del volumen emptyDir
.
El comando de la CLI de gcloud que ejecutes para crear el clúster o el grupo de nodos dependerá de la generación de la serie de máquinas del tipo de máquina seleccionado. Por ejemplo, los tipos de máquinas N1 y N2 pertenecen a las series de máquinas de primera y segunda generación, respectivamente, mientras que los tipos de máquinas C3 pertenecen a la serie de máquinas de tercera generación.
Crear un clúster con SSD local
1.ª o 2.ª generación
Si usas un tipo de máquina de una serie de máquinas de primera o segunda generación, crea el clúster especificando la opción --ephemeral-storage-local-ssd count=NUMBER_OF_DISKS
. Esta opción aprovisiona el número especificado de volúmenes SSD locales en cada nodo para usarlos como almacenamiento efímero de kubelet.
Estos ajustes solo se aplican 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 ejecute la versión 1.25.3-gke.1800 de GKE o una posterior en la que el grupo predeterminado utilice volúmenes de SSD local, 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
Haz los cambios siguientes:
CLUSTER_NAME
: el nombre del clúster.NUMBER_OF_DISKS
: número de volúmenes SSD locales que se van a aprovisionar en cada nodo. Estos volúmenes se combinan en un único volumen lógico durante la configuración del nodo. El número máximo 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 los SSD locales se reserva para el uso del sistema.MACHINE_TYPE
: el tipo de máquina que se va a usar. Este campo es obligatorio, ya que no se puede usar SSD local con el tipoe2-medium
predeterminado.CHANNEL_NAME
: un canal de lanzamiento que incluye versiones de GKE posteriores a la 1.25.3-gke.1800. Si prefieres no usar un canal de lanzamiento, también puedes usar la marca--cluster-version
en lugar de--release-channel
y especificar una versión válida posterior a 1.25.3-gke.1800. Para determinar las versiones válidas, usa el comandogcloud container get-server-config
.
3.ª o 4.ª generación
Si usas un tipo de máquina de una serie de máquinas de tercera o cuarta generación, no tienes que especificar ninguna opción de SSD local al crear un clúster. El número 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
Haz los cambios siguientes:
CLUSTER_NAME
: el nombre del clúster.MACHINE_TYPE
: el tipo de máquina que se va a usar de una serie de máquinas de tercera o cuarta generación.CLUSTER_VERSION
: una versión de clúster de GKE que admita SSD local en tipos de máquinas de una serie de máquinas de tercera o cuarta generación.
Crear un grupo de nodos con SSD local
1.ª o 2.ª generación
Para crear un grupo de nodos que se ejecute en la versión 1.25.3-gke.1800 de GKE o en una posterior y que utilice volúmenes de SSD local, 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
Haz los cambios siguientes:
POOL_NAME
: el nombre del nuevo grupo de nodos.CLUSTER_NAME
: el nombre del clúster.NUMBER_OF_DISKS
: número de volúmenes SSD locales que se van a aprovisionar en cada nodo. Estos volúmenes se combinan en un único volumen lógico durante la configuración del nodo. El número máximo 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 los SSD locales se reserva para el uso del sistema.MACHINE_TYPE
: el tipo de máquina que se va a usar. Este campo es obligatorio, ya que no se puede usar SSD local con el tipoe2-medium
predeterminado.
3.ª o 4.ª generación
Si usas un tipo de máquina de una serie de máquinas de tercera o cuarta generación, no tienes que especificar ninguna opción de SSD local al crear un grupo de nodos. El número de volúmenes conectados a cada nodo depende del tipo de máquina.
Si deseas 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
Haz los cambios siguientes:
POOL_NAME
: el nombre del nuevo grupo de nodos.CLUSTER_NAME
: el nombre del clúster.MACHINE_TYPE
: el tipo de máquina que se va a usar de una serie de máquinas de tercera o cuarta generación.NODE_VERSION
: una versión de grupo de nodos de GKE que admite SSD local en tipos de máquinas de una serie de máquinas de tercera o cuarta generación.
Los nodos del grupo de nodos se crean con la etiqueta cloud.google.com/gke-ephemeral-storage-local-ssd=true
. Para verificar las etiquetas, ejecuta el siguiente comando:
kubectl describe node NODE_NAME
Usar almacenamiento efímero con copia de seguridad en SSD local con clústeres de Autopilot
Puedes usar SSDs locales para el almacenamiento efímero cuando configures tus pods de una de las siguientes formas:
- Seleccionas explícitamente una serie de máquinas para ejecutar tus pods y especificas el
cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
nodeSelector o una reserva de capacidad que tenga SSDs locales. Para obtener más información sobre la selección de series de máquinas en Autopilot, consulta el artículo Optimizar el rendimiento de los pods de Autopilot eligiendo una serie de máquinas. - Solicitas un tipo de GPU que admita SSDs locales y especificas el
cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
nodeSelector o una reserva de capacidad que tenga SSDs locales. Las GPUs NVIDIA H100 (80 GB) y NVIDIA A100 (80 GB) siempre usan SSDs locales para el almacenamiento efímero, y no puedes especificar el selector de nodos para esas GPUs. Para obtener más información sobre cómo solicitar GPUs en Autopilot, consulta Solicitar GPUs en contenedores.
Consulta la lista de series de máquinas compatibles con SSD local en Autopilot.
Solicitar SSDs locales directamente en los manifiestos de carga de trabajo
Para usar SSD local para el almacenamiento efímero, añade el
cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
nodeSelector a tu
manifiesto de carga de trabajo. Por ejemplo, el siguiente manifiesto de Pod selecciona SSDs locales como almacenamiento efímero para Pods de GPU:
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"
Solicitar SSDs locales con reservas de capacidad
Si usas una reserva de capacidad de Compute Engine para reservar máquinas que tengan SSDs locales, Autopilot adjunta los SSDs locales disponibles de la reserva a tus nodos y no tienes que seleccionar explícitamente los SSDs locales en el manifiesto de la carga de trabajo. Para obtener más información sobre cómo usar las reservas con Autopilot, consulta el artículo Consumir reservas de capacidad en clústeres de Autopilot.
Por ejemplo, el siguiente manifiesto de Pod selecciona una reserva específica que tiene SSDs locales:
apiVersion: v1
kind: Pod
metadata:
name: local-ssd-pod
spec:
nodeSelector:
cloud.google.com/machine-family: MACHINE_SERIES
cloud.google.com/reservation-name: localssd-count-reservation
cloud.google.com/reservation-affinity: "specific"
containers:
- name: my-container
image: "k8s.gcr.io/pause"
resources:
requests:
cpu: 6
memory: "25Gi"
ephemeral-storage: "100Gi"
limits:
cpu: 12
memory: "50Gi"
ephemeral-storage: "200Gi"
Sustituye MACHINE_SERIES
por una serie de máquinas compatible que también admita los discos SSD locales. Si la serie de máquinas especificada no admite SSDs locales, la implementación falla y se produce un error.
Series de máquinas compatibles con SSD local en Autopilot
Los clústeres de Autopilot admiten el uso de SSDs locales para el almacenamiento efímero con las siguientes series de máquinas:
(solo con reserva de capacidad) |
(solo con reserva de capacidad) |
(solo con reserva de capacidad) |
(solo con reserva de capacidad) |
(solo con reserva de capacidad) |
(siempre agrupado) |
(solo con reserva de capacidad) |
(siempre agrupado) |
(siempre agrupado) |
Usar el parámetro de API antiguo
La opción --local-ssd-count
es un parámetro de API antiguo que admite SSD local SCSI.
La serie de máquinas de tercera generación de Compute Engine no admite SCSI y solo admite NVMe. Solo debes usar esta opción con clústeres de Windows Server.
Si actualmente usas el parámetro de la API antigua en clústeres Linux, te recomendamos que uses la opción --ephemeral-storage-local-ssd
.
SSD local en clústeres de Windows Server
Cuando usas SSD local con tus clústeres que ejecutan grupos de nodos de Windows Server, debes iniciar sesión en el nodo y formatear el volumen antes de usarlo. En el siguiente ejemplo, el volumen de SSD local se formatea 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
Acceder a volúmenes SSD locales
En el siguiente ejemplo se muestra cómo acceder al almacenamiento efímero respaldado por SSD local.
Almacenamiento efímero como volumen emptyDir
Un grupo de nodos de GKE se puede configurar para usar SSD local para el almacenamiento efímero, incluidos los volúmenes emptyDir
.
El siguiente manifiesto de Pod usa un emptyDir
y un selector de nodos cloud.google.com/gke-ephemeral-storage-local-ssd
. Puedes aplicar una técnica similar a los archivos de manifiesto de Deployment o StatefulSet.
Cuando elijas la solicitud de recursos 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: {}
Solución de problemas
Para obtener instrucciones sobre cómo solucionar problemas, consulta el artículo Solucionar problemas de almacenamiento en GKE.