Usa discos persistentes dedicados como volúmenes efímeros


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 debes 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 necesitan los datos durante el ciclo de vida de la aplicación, como en 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 su uso 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 el almacenamiento efímero para tus pods mediante PersistentVolumeClaims. GKE aprovisiona discos persistentes de Compute Engine de forma dinámica y conecta los discos a los 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 debes controlar el hardware de almacenamiento.
  • Necesitas almacenamiento efímero a corto plazo específico para el contenedor.
  • Deseas evitar usar emptyDir para aprovisionar almacenamiento efímero. Los volúmenes emptyDir aún son útiles en situaciones en las que deseas que varios contenedores compartan los datos en el almacenamiento efímero.
  • Deseas una capacidad de almacenamiento más efímera que la configuración predeterminada integrada de GKE.
  • Si deseas evitar tener que planificar el tamaño del disco de arranque del nodo y escribir con anticipación para los clústeres de GKE del modo Standard.

Tipos de almacenamiento efímero en GKE

En general, puedes usar la capacidad de almacenamiento en el disco de arranque o los discos persistentes dedicados como almacenamiento efímero en los Pods y contenedores. En la siguiente tabla, se describen las diferencias:

Tipo de almacenamiento Cómo usarla Descripción
Discos de arranque: discos persistentes

Activa un volumen con emptyDir en la especificación del pod y solicita la capacidad que necesitas.

Para obtener instrucciones, consulta Crea 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 Autopilot y Standard.

Úsala cuando los Pods tengan solicitudes de almacenamiento efímeros pequeñas o cuando quieras compartir los datos efímeros entre varios contenedores en el Pod.

Autopilot

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

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

Para obtener instrucciones, consulta Aprovisiona 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).

Úsala cuando necesites un almacenamiento efímero que tenga una capacidad de procesamiento alta.

Para obtener detalles, consulta Acerca de las SSD locales para GKE.

Discos persistentes dedicados
  1. De forma opcional, crea un StorageClass de Kubernetes para el hardware.
  2. Activa un volumen con el tipo de volumen ephemeral en la especificación del pod.

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.

Úsala 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 modo Autopilot y modo estándar
  • Hardware especializado, como volúmenes compatibles con el respaldo de SSD
  • Almacenamiento conectado a la red
  • Usa volúmenes de Kubernetes para obtener almacenamiento, en lugar de usar emptyDir para compartir el disco de arranque del nodo.

Para obtener detalles sobre este tipo de volumen efímero, consulta Volúmenes efímeros genéricos.

Precios

El almacenamiento que aprovisionas a través de 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 Kubernetes Engine de Google.
  • Habilitar la API de Kubernetes Engine de Google
  • 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 la 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 los 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 disco persistente pd-balanced, omite este paso.

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

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

  1. 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 volumen ephemeral.
    • .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 usa ReadWriteOnce, que activa el PersistentVolume en un solo nodo para que uno o más pods accedan al nodo. Para obtener más detalles, consulta Modos de acceso.
    • .spec.storageClassName: De forma opcional, el nombre de la StorageClass que creaste. Si omites este campo, GKE usa el StorageClass predeterminado y aprovisiona un disco persistente pd-balanced.
    • .spec.resources.requests.storage: La capacidad de almacenamiento que deseas.
  2. Crea el Deployment:

    kubectl create -f ephemeral-ssd-deployment.yaml
    

GKE aprovisiona un disco de Compute Engine que cumple con los requisitos de PersistentVolumeClaim y conecta 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

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

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

    exit
    

¿Qué sigue?