En esta página se explica cómo usar hardware de almacenamiento externo, como discos persistentes de Compute Engine, como volúmenes efímeros en tus cargas de trabajo de Google Kubernetes Engine (GKE). Ya deberías estar familiarizado con los volúmenes y las StorageClasses de Kubernetes.
Cuándo usar el almacenamiento efímero en Kubernetes
El almacenamiento efímero es útil en cualquier situación en la que tus cargas de trabajo solo necesiten los datos durante el ciclo de vida de la aplicación, como en el caso de las canalizaciones de procesamiento de datos, las tareas de aprendizaje automático, el procesamiento por lotes, el almacenamiento en caché local o las analíticas. De forma predeterminada, una parte del disco de arranque del nodo de GKE se puede usar como almacenamiento efímero en tus pods. Este enfoque suele requerir una planificación cuidadosa del espacio.
Los volúmenes efímeros genéricos de Kubernetes te permiten solicitar explícitamente almacenamiento efímero para tus pods mediante PersistentVolumeClaims. GKE aprovisiona dinámicamente discos persistentes de Compute Engine y los conecta a tus nodos. Este tipo de almacenamiento efímero es útil en situaciones como las siguientes:
- Tus cargas de trabajo tienen requisitos de alto rendimiento, por lo que necesitas controlar el hardware de almacenamiento.
- Necesitas almacenamiento efímero a corto plazo específico para contenedores.
- Quieres evitar usar
emptyDir
para aprovisionar almacenamiento efímero.emptyDir
Los volúmenes siguen siendo útiles en situaciones en las que quieres que varios contenedores compartan los datos en el almacenamiento efímero. - Quieres tener más capacidad de almacenamiento efímero que los valores predeterminados integrados de GKE.
- Quieres evitar tener que planificar el tamaño y el tipo del disco de arranque de los nodos con antelación en los clústeres de GKE en modo Estándar.
Tipos de almacenamiento efímero en GKE
En general, puedes usar la capacidad de almacenamiento del disco de arranque o los discos persistentes dedicados como almacenamiento efímero en tus pods y contenedores. En la siguiente tabla se describen las diferencias:
Tipo de almacenamiento | Cómo se puede utilizar | Descripción |
---|---|---|
Disco de arranque: discos persistentes | Monta un volumen con Para obtener instrucciones, consulta el artículo sobre crear volúmenes. |
El almacenamiento efímero solicitado se toma de una parte reservada del disco de arranque del nodo. Esta es la opción predeterminada en los clústeres Autopilot y Standard. Úsalo cuando los pods tengan solicitudes de almacenamiento efímero pequeñas o cuando quieras compartir los datos efímeros entre varios contenedores del pod. Autopilot
Estándar No hay límite de tamaño, pero requiere una planificación cuidadosa del tamaño del disco de arranque del nodo y del tipo de hardware de almacenamiento. Para obtener información sobre cómo calcula GKE la reserva de almacenamiento efímero en el disco de arranque del nodo, consulta Reserva de almacenamiento efímero local. |
Discos SSD locales |
Para obtener instrucciones, consulta Aprovisionar almacenamiento efímero con SSDs locales. |
Los discos SSD locales usan incrementos fijos de 375 GB que son compatibles con los clústeres de GKE en modo estándar y con los nodos de Autopilot que ejecutan GPUs A100 (80 GB).
Úsalo cuando necesites un almacenamiento efímero con un rendimiento alto. Para obtener más información, consulta el artículo Acerca de las unidades SSD locales de GKE. |
Discos persistentes dedicados |
En este documento se explica cómo solicitar este tipo de almacenamiento efímero. |
Google Cloud proporciona dinámicamente el hardware externo solicitado, lo conecta a tus nodos y monta el volumen solicitado en tu pod. Úsalo cuando los pods tengan solicitudes de almacenamiento efímero grandes o cuando quieras controlar el tipo de disco persistente subyacente. Estos volúmenes tienen las siguientes propiedades:
Para obtener más información sobre este tipo de volumen efímero, consulta Volúmenes efímeros genéricos. |
Precios
El almacenamiento que aprovisiones a través de volúmenes efímeros genéricos, tal como se describe en esta guía, se factura según los precios de los discos de Compute Engine.
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.
- Asegúrate de que tienes un clúster de GKE Autopilot o Standard que ejecute la versión 1.23 o una posterior.
- Asegúrate de que tienes suficiente cuota en tu Google Cloud proyecto para el hardware de almacenamiento. Para gestionar tu cuota, consulta Ver y gestionar cuotas.
Crear un StorageClass
Si creas una StorageClass de Kubernetes personalizada, puedes especificar el tipo de almacenamiento que quieres aprovisionar en función de tus requisitos de precio y rendimiento. Este paso es opcional, pero recomendable. Si quieres usar la clase de almacenamiento predeterminada de GKE, que tiene el tipo pd-balanced
Persistent Disk, sáltate este paso.
Guarda el siguiente archivo de manifiesto como
ephemeral-pd-class.yaml
:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ephemeral-ssd provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: STORAGE_TYPE
Sustituye
STORAGE_TYPE
por el nombre del tipo de disco persistente que quieras, comopd-ssd
. Para ver una lista de los tipos admitidos, consulta Tipos de disco persistente en la documentación de Compute Engine.Crea el objeto StorageClass:
kubectl create -f ephemeral-pd-class.yaml
Solicitar capacidad de almacenamiento efímero en un pod
Para aprovisionar, adjuntar y usar hardware externo como almacenamiento efímero, añade el volumen correspondiente al manifiesto de tu pod y añade un montaje de volumen a la especificación del contenedor.
Guarda el siguiente archivo de manifiesto como
ephemeral-ssd-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: ephemeral-deployment spec: replicas: 1 selector: matchLabels: storage: ephemeral template: metadata: labels: storage: ephemeral spec: containers: - name: ephemeral-container image: nginx resources: requests: cpu: 500m memory: 2Gi ephemeral-storage: 2Gi volumeMounts: - mountPath: "/short-term" name: ephemeral-volume volumes: - name: ephemeral-volume ephemeral: volumeClaimTemplate: metadata: labels: type: ephemeral spec: accessModes: ["ReadWriteOnce"] storageClassName: "ephemeral-ssd" resources: requests: storage: 1Ti
Este manifiesto crea un nuevo PersistentVolumeClaim de Kubernetes que solicita un nuevo PersistentVolume llamado
ephemeral-volume
con las siguientes propiedades:spec.volumes.ephemeral
: el tipo de volumenephemeral
..spec.accessModes
: el modo de acceso al volumen, que determina el acceso de lectura y escritura desde los pods y el uso compartido de volúmenes entre nodos. En este ejemplo se usaReadWriteOnce
, que monta el PersistentVolume en un solo nodo para que uno o varios pods del nodo puedan acceder a él. Para obtener más información, consulta Modos de acceso..spec.storageClassName
: nombre de la StorageClass que has creado (opcional). Si omite este campo, GKE usará la StorageClass predeterminada y aprovisionará unpd-balanced
disco persistente..spec.resources.requests.storage
: la capacidad de almacenamiento que quieras.
Crea el despliegue:
kubectl create -f ephemeral-ssd-deployment.yaml
GKE aprovisiona un disco de Compute Engine que cumple los requisitos de PersistentVolumeClaim y lo conecta al nodo. GKE monta el volumen en el pod y proporciona la capacidad solicitada al contenedor.
Verificar que GKE ha montado un volumen efímero
Crea una sesión de shell en el pod:
kubectl exec -it deploy/ephemeral-deployment -- bash
Comprueba los volúmenes montados:
df -h
El resultado debería ser similar al siguiente:
Filesystem Size Used Available Use% Mounted on ... /dev/sdb 1006.9G 28.0K 1006.8G 0% /short-term /dev/sda1 94.3G 3.6G 90.6G 4% /etc/hosts /dev/sda1 94.3G 3.6G 90.6G 4% /dev/termination-log /dev/sda1 94.3G 3.6G 90.6G 4% /etc/hostname /dev/sda1 94.3G 3.6G 90.6G 4% /etc/resolv.conf ...
Sal de la sesión de shell:
exit