Usar discos persistentes dedicados como volúmenes efímeros

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 emptyDir en la especificación del pod y solicita la capacidad que necesites.

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

  • La solicitud debe tener entre 10 MiB y 10 GiB.
  • El tipo de hardware de almacenamiento está preconfigurado.

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
  1. Crea un grupo de nodos con discos SSD locales conectados y una serie de máquinas compatible.
  2. Monta un volumen con emptyDir y la capacidad necesaria.
  3. Usa un nodeSelector para colocar pods en nodos con discos SSD locales conectados.

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
  1. De forma opcional, crea un StorageClass de Kubernetes para el hardware.
  2. Monta un volumen con el tipo ephemeral en la especificación del pod.

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:

  • Hasta 64 TiB en los modos Autopilot y Standard.
  • La solicitud de almacenamiento efímero de Pod puede ser de hasta 64 TiB.
  • Se admite hardware especializado, como volúmenes con SSD.
  • Almacenamiento conectado a una red.
  • Usa volúmenes de Kubernetes para obtener almacenamiento en lugar de usar emptyDir para compartir el disco de arranque del nodo.

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.

  1. 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, como pd-ssd. Para ver una lista de los tipos admitidos, consulta Tipos de disco persistente en la documentación de Compute Engine.

  2. 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.

  1. 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 volumen ephemeral.
    • .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 usa ReadWriteOnce, 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á un pd-balanced disco persistente.
    • .spec.resources.requests.storage: la capacidad de almacenamiento que quieras.
  2. 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

  1. Crea una sesión de shell en el pod:

    kubectl exec -it deploy/ephemeral-deployment -- bash
    
  2. 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
    ...
    
  3. Sal de la sesión de shell:

    exit
    

Siguientes pasos