En esta página, se muestra cómo mejorar la latencia de inicio de la carga de trabajo con discos de arranque secundarios en Google Kubernetes Engine (GKE). Con los discos de arranque secundarios, puedes precargar datos o imágenes de contenedores en nodos nuevos. Esto permite que las cargas de trabajo alcancen un inicio en frío rápido y mejoren el uso general de los recursos aprovisionados.
Descripción general
A partir de la versión 1.28.3-gke.1067000, puedes configurar el grupo de nodos con discos de arranque secundarios. Puedes indicar a GKE que aprovisione los nodos y los cargue previamente con datos, como un modelo de aprendizaje automático o una imagen de contenedor. El uso de datos precargados o una imagen de contenedor en un disco secundario tiene los siguientes beneficios para tus cargas de trabajo:
- Ajuste de escala automático más rápido
- Menor latencia cuando se extraen imágenes grandes
- Recuperación más rápida ante interrupciones, como eventos de mantenimiento y errores del sistema
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.
Habilita la API del sistema de archivos de contenedor.
Asegúrate de que tu clúster tenga acceso a la imagen de disco que se cargará en los nodos.
Requisitos
Los siguientes requisitos se aplican al uso del disco de arranque secundario:
- La función está disponible en la versión 1.28.3-gke.106700 de GKE y versiones posteriores.
Cuando modificas la imagen de disco, debes crear un grupo de nodos nuevo. No puedes actualizar la imagen de disco en los nodos existentes.
Debes configurar la transmisión de imágenes para usar la función de disco de arranque secundario.
Configura el disco de arranque secundario
En las siguientes secciones, se describe cómo configurar el disco de arranque secundario:
Precarga datos
Antes de crear el clúster de GKE y el grupo de nodos con un disco de arranque secundario, te recomendamos que prepares la imagen de disco cuando los datos estén listos durante la compilación, lo ideal sería automatizado en una canalización de CI/CD.
Prepara la imagen de disco que contiene los datos
Para crear una imagen de disco personalizada como fuente de datos, completa los siguientes pasos:
- Crea una VM con un disco en blanco.
- Conéctate a la VM a través de SSH.
- Crea una imagen personalizada a partir del disco.
Crea el clúster de GKE y el grupo de nodos con un disco de arranque secundario
Puedes configurar un disco de arranque secundario con la gcloud CLI:
Crea un clúster de GKE Standard con la transmisión de imágenes habilitada mediante la marca
--enable-image-streaming
:gcloud container clusters create CLUSTER_NAME \ --location LOCATION \ --cluster-version=CLUSTER_VERSION \ --enable-image-streaming
Reemplaza lo siguiente:
- CLUSTER_NAME: Es el nombre del clúster.
- LOCATION: Es la ubicación del clúster
- CLUSTER-VERSION: la versión de GKE que se usará. Debe ser
1.28.3-gke.106700
o una versión posterior.
Crea un grupo de nodos con un disco de arranque secundario mediante la marca
--secondary-boot-disk=disk-image
:gcloud beta container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location LOCATION \ --enable-image-streaming \ --secondary-boot-disk=disk-image=global/images/DATA_DISK IMAGE
Reemplaza DISK_IMAGE_NAME por el nombre de tu imagen de disco.
GKE crea un grupo de nodos en el que cada nodo tiene un disco secundario con datos precargados. Esto conecta y activa el disco de arranque secundario en el nodo.
De forma opcional, puedes activar la imagen de disco secundaria en los contenedores del Pod mediante una activación de volumen hostPath. Usa el siguiente manifiesto para definir los recursos de un Pod y usa una activación de volumen hostPath para precargar el disco de datos en sus contenedores:
apiVersion: v1 kind: Pod metadata: name: pod-name spec: containers: ... volumeMounts: - mountPath: /usr/local/data_path_sbd name: data_path_sbd ... volumes: - name: data_path_sbd hostPath: path: /mnt/disks/gke-secondary-disks/gke-DISK_IMAGE_NAME-disk
Reemplaza DISK_IMAGE_NAME por el nombre de tu imagen de disco.
Precarga la imagen de contenedor
En esta guía, usarás gke-disk-image-builder
para crear una instancia de VM y extraer las imágenes de contenedor en un disco. El
gke-disk-image-builder
crea una imagen de disco a partir de ese disco. Te recomendamos que
prepares la imagen de disco justo después del paso de compilación de la imagen del contenedor, lo ideal
sería automatizada en una canalización de CI/CD.
- Crea un bucket de Cloud Storage
para almacenar los registros de ejecución de
gke-disk-image-builder
. Crea una imagen de disco con imágenes de contenedor precargadas.
go run ./cli \ --project-name=PROJECT_ID \ --image-name=DISK_IMAGE_NAME \ --zone=LOCATION \ --gcs-path=gs://LOG_BUCKET_NAME \ --disk-size-gb=10 \ --container-image=docker.io/library/python:latest \ --container-image=docker.io/library/nginx:latest
Reemplaza lo siguiente:
- PROJECT_ID: Es el nombre de tu proyecto de Google Cloud.
- DISK_IMAGE_NAME: Es el nombre de la imagen del disco. Por ejemplo:
nginx-python-image
- LOCATION: Es la ubicación del clúster
LOG_BUCKET_NAME: el nombre del bucket de Cloud Storage para almacenar los registros de ejecución. Por ejemplo,
gke-secondary-disk-image-logs/
Crea un clúster de GKE Standard con la transmisión de imágenes habilitada:
gcloud container clusters create CLUSTER_NAME \ --location=LOCATION \ --cluster-version=CLUSTER_VERSION \ --enable-image-streaming
Crea un grupo de nodos con un disco de arranque secundario:
gcloud beta container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ \ --enable-image-streaming \ --secondary-boot-disk=disk-image=global/images/DISK_IMAGE_NAME,mode=CONTAINER_IMAGE_CACHE
Agrega un
nodeSelector
a tu plantilla de Pods:nodeSelector: cloud.google.com/gke-nodepool: NODE_POOL_NAME
Confirma que la caché del disco de arranque secundario esté en uso:
kubectl get events --all-namespaces
El resultado es similar al siguiente:
75s Normal SecondaryDiskCachin node/gke-pd-cache-demo-default-pool-75e78709-zjfm Image gcr.io/k8s-staging-jobsejt/pytorch-mnist:latest is backed by secondary disk cache
La latencia de extracción de la imagen esperada para la imagen de contenedor almacenada en caché no debe ser de más de unos segundos, sin importar el tamaño de la imagen. Para verificar la latencia de extracción de imágenes, ejecuta el siguiente comando:
kubectl describe pod POD_NAME
Reemplaza
POD_NAME
con el nombre del pod.El resultado es similar al siguiente:
… Normal Pulled 15m kubelet Successfully pulled image "docker.io/library/nginx:latest" in 0.879149587s …
¿Qué sigue?
- Usa Usa la transmisión de imágenes para extraer imágenes de contenedor para extraer imágenes de contenedor mediante la transmisión de datos de imágenes según tus cargas de trabajo.
- Consulta Mejora la eficiencia de la carga de trabajo con Fast Socket de NCCL para obtener información sobre cómo usar el complemento Fast Socket de bibliotecas de comunicación colectiva (NCCL) de NVIDIA.