En esta página, se muestra cómo usar hardware de almacenamiento externo, como los 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 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 para las canalizaciones de procesamiento de datos, los trabajos de aprendizaje automático, el procesamiento por lotes, el almacenamiento en caché local o las estadísticas. De forma predeterminada, parte del disco de arranque del nodo de GKE está disponible para usarse como almacenamiento efímero en tus Pods. Este enfoque a menudo requiere una planificación cuidadosa del espacio.
Los volúmenes efímeros genéricos de Kubernetes te permiten solicitar de forma explícita almacenamiento efímero para tus Pods con PersistentVolumeClaims. GKE aprovisiona de forma dinámica los Persistent Disk de Compute Engine y conecta los discos a tus nodos. Este tipo de almacenamiento efímero es útil en situaciones como las siguientes que se describen:
- Tus cargas de trabajo tienen requisitos de alto rendimiento, por lo que debes controlar el hardware de almacenamiento.
- Necesitas almacenamiento efímero a corto plazo y específico para contenedores.
- Deseas evitar usar
emptyDir
para aprovisionar almacenamiento efímero.emptyDir
Los volúmenes son útiles en situaciones en las que deseas que varios contenedores compartan los datos en el almacenamiento efímero - Deseas obtener más capacidad de almacenamiento efímero que los valores predeterminados integrados de GKE.
- Deseas evitar tener que planificar el tamaño y el tipo de disco de arranque del nodo de forma anticipada para los clústeres de GKE de modo estándar.
Tipos de almacenamiento efímero en GKE
En general, puedes usar la capacidad de almacenamiento en el disco de arranque o los Persistent Disks dedicados como almacenamiento efímero en tus pods y contenedores. En la siguiente tabla, se describen las diferencias:
Tipo de almacenamiento | Cómo usarla | Descripción |
---|---|---|
Disco de arranque: Persistent Disks | Activa un volumen con Para obtener instrucciones, consulta la siguiente información Crear volúmenes. |
El almacenamiento efímero solicitado se toma de una parte reservada del disco de arranque del nodo. Este es el valor predeterminado en los clústeres de Autopilot y en los estándar. Úsalo cuando los Pods tienen solicitudes de almacenamiento efímero pequeñas o cuando quieras compartir los datos efímeros entre varios contenedores del Pod. Autopilot
Standard No hay límite de tamaño, pero requiere una planificación cuidadosa del tamaño del disco de arranque del nodo y el tipo de hardware de almacenamiento. Para obtener detalles sobre cómo GKE calcula 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 la siguiente información Aprovisionar almacenamiento efímero con SSD locales. |
Los discos SSD locales usan incrementos fijos de 375 GB que son compatibles con los clústeres de GKE de modo estándar y los nodos de Autopilot que ejecutan GPU A100 (80 GB).
Úsalo cuando necesites almacenamiento efímero con alta capacidad de procesamiento. Para obtener detalles, consulta Acerca de las SSD locales para GKE. |
Persistent Disks dedicados |
En este documento, se proporcionan instrucciones para solicitar este tipo de almacenamiento efímero. |
Google Cloud aprovisiona de forma dinámica el hardware externo solicitado, lo adjunta a tus nodos y activa el volumen solicitado en tu Pod. Úsalo cuando los Pods tengan grandes solicitudes de almacenamiento efímero o cuando desees controlar el tipo de Persistent Disk 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
Almacenamiento que aprovisionas con los volúmenes efímeros genéricos, como se describe en esta guía se factura según los precios de discos de Compute Engine.
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.
- Asegúrate de tener un clúster de GKE Autopilot o Standard que ejecute la versión 1.23 o posterior.
- Asegúrate de tener suficiente cuota en tu proyecto de Google Cloud para el hardware de almacenamiento. Para administrar tu cuota, consulta Visualiza las cuotas de tu proyecto.
Crea un StorageClass
Crear una StorageClass de Kubernetes personalizada te permite especificar el tipo de almacenamiento que se aprovisionará según tus requisitos de precio y rendimiento. Este paso es opcional, pero se recomienda. Si deseas usar la StorageClass predeterminada de GKE, que tiene el tipo de Persistent Disk pd-balanced
, omite este paso.
Guarda el siguiente 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
Reemplaza
STORAGE_TYPE
por el nombre del tipo de Persistent Disk que desees, comopd-ssd
. Para ver una lista de los tipos admitidos, consulta Tipos de Persistent Disks en la documentación de Compute Engine.Crea la StorageClass:
kubectl create -f ephemeral-pd-class.yaml
Solicita la capacidad de almacenamiento efímero en un Pod
Para aprovisionar, adjuntar y usar hardware externo como almacenamiento efímero, agrega el volumen correspondiente al manifiesto del Pod y agrega una activación de volumen a la especificación del contenedor.
Guarda el siguiente 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
En este manifiesto, se crea una nueva PersistentVolumeClaim de Kubernetes que solicita un PersistentVolume nuevo llamado
ephemeral-volume
con las siguientes propiedades:spec.volumes.ephemeral
: El tipo de volumenephemeral
..spec.accessModes
: El modo de acceso de 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 activa el PersistentVolume en un solo nodo para acceder a uno o más Pods en el nodo. Para obtener detalles, consulta Modos de acceso..spec.storageClassName
: De manera opcional, el nombre de la StorageClass que creaste. Si omites este campo, GKE usa la StorageClass predeterminada y aprovisiona un Persistent Diskpd-balanced
..spec.resources.requests.storage
: La capacidad de almacenamiento que deseas.
Crea el Deployment:
kubectl create -f ephemeral-ssd-deployment.yaml
GKE aprovisiona un disco de Compute Engine que cumple con los requisitos de la PersistentVolumeClaim y adjunta el disco al nodo. GKE activa el volumen en el Pod y proporciona la capacidad solicitada al contenedor.
Verifica que GKE haya activado un volumen efímero
Crea una sesión de shell en el Pod:
kubectl exec -it deploy/ephemeral-deployment -- bash
Verifica los volúmenes activados:
df -h
El resultado es similar a este:
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