Usa Persistent Disks 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 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 emptyDir en la especificación del Pod y solicita la capacidad que necesitas.

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

  • 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 y con la capacidad requerida.
  3. Usa un nodeSelector para colocar Pods en nodos con discos SSD locales conectados.

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
  1. De manera opcional, crea una 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.

Ú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:

  • Hasta 64 TiB en modo Autopilot y modo estándar
  • Hardware especializado, como volúmenes respaldados por 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 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.

  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 Persistent Disk que desees, como pd-ssd. Para ver una lista de los tipos admitidos, consulta Tipos de Persistent Disks 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 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 Disk 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 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

  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?