Ejecuta VM interrumpibles

En esta página se proporciona una descripción general de la asistencia de VM interrumpibles en Google Kubernetes Engine.

Descripción general

Las VM interrumpibles son instancias de VM de Google Compute Engine que duran un máximo de 24 horas y no proporcionan garantías de disponibilidad. Las VM interrumpibles tienen un precio más bajo que las VM estándar de Compute Engine y ofrecen los mismos tipos de máquinas y opciones.

Puedes usar VM interrumpibles en tus clústeres de GKE o grupos de nodos para ejecutar trabajos en lotes o tolerantes a errores que sean menos sensibles a la naturaleza efímera y no garantizada de las VM interrumpibles.

Para obtener más información sobre las VM interrumpibles, consulta VM interrumpibles en la documentación de Compute Engine.

Funcionamiento de las VM interrumpibles

Cuando los clústeres o grupos de nodos de GKE crean VM de Compute Engine, las VM se comportan como un grupo de instancias administrado. Las VM interrumpibles en GKE están sujetas a las mismas limitaciones que las instancias interrumpibles en un grupo de instancias administrado. Las instancias interrumpibles finalizan 30 segundos después de recibir una notificación de interrupción.

Además, a estas VM interrumpibles se les proporciona una etiqueta de Kubernetes: cloud.google.com/gke-preemptible=true. Las etiquetas de Kubernetes se pueden usar en el campo nodeSelector para programar pods en nodos es.

A continuación, se muestra un selector de ejemplo para filtrar VM interrumpibles:

apiVersion: v1
kind: Pod
spec:
  nodeSelector:
    cloud.google.com/gke-preemptible: "true"

Incumplimientos de las restricciones de Kubernetes

Usar VM interrumpibles en GKE invalida algunas garantías de Kubernetes. Las VM interrumpibles modifican a las restricciones siguientes:

  • La interrupción del nodo apaga los pods de forma incorrecta y también ignora el período de gracia del pod configurado. Esto significa que los pods se apagan sin previo aviso.

  • De acuerdo con la documentación del presupuesto de interrupción del pod, “El presupuesto solo puede proteger contra expulsiones voluntarias, pero no todas las causas de indisponibilidad”. La interrupción no es voluntaria, por lo que es posible que experimentes una falta de disponibilidad superior a la especificada en el presupuesto de interrupción del pod.

Prácticas recomendadas

Debido a que las VM interrumpibles no tienen garantías de disponibilidad, debes diseñar tu sistema a partir de la suposición de que cualquiera o todas tus instancias de Compute Engine se pueden interrumpir y no estar disponibles. No hay garantías en cuanto al momento en que las instancias nuevas están disponibles.

Además, no hay garantía de que los pods que se ejecutan en VM interrumpibles siempre puedan cerrarse con facilidad. GKE puede tardar varios minutos en detectar que el nodo se interrumpió y que los pods ya no están en ejecución, lo que retrasará la reprogramación de los pods a un nuevo nodo.

Si quieres asegurarte de que tus trabajos o cargas de trabajo se procesen incluso si no hay VM interrumpibles disponibles, puedes crear grupos de nodos interrumpibles y no interrumpibles en tu clúster.

Aunque los nombres de nodos en general permanecen iguales, siempre y cuando se reemplacen después de la interrupción, las direcciones IP de VM interrumpibles internas y externas pueden cambiar cuando se produce la interrupción.

No uses VM interrumpibles con pods con estados porque podrían infringir la semántica (de uno como máximo) inherente a StatefulSets, lo que podría provocar la pérdida de datos.

Usa taints de nodos para evitar la programación de nodos de VM interrumpibles

Debes evitar tener pods críticos programados en un nodo de una VM interrumpible. Puedes usar un taint de nodo y tolerancia para evitar programar pods en nodos con VM interrumpibles.

Agrega un taint de nodo para VM interrumpibles

Si quieres agregar un taint de nodo para un nodo con VM interrumpibles, ejecuta el siguiente comando:

kubectl taint nodes [NODE_NAME] cloud.google.com/gke-preemptible="true":NoSchedule

Ahora, solo los Pods que toleran el taint de nodo están programados para el nodo.

Agrega tolerancia a los pods

Para agregar la tolerancia relevante a tus pods, agrega lo siguiente a la especificación de tu pod o a la especificación de la plantilla de pod de tu objeto:

tolerations:
- key: cloud.google.com/gke-preemptible
  operator: Equal
  value: "true"
  effect: NoSchedule

Taints de nodos de GPU interrumpibles

Debes crear el clúster con nodos no interrumpibles antes de agregar un grupo de nodos de GPU interrumpibles. Esto garantiza que siempre haya un grupo de nodos de VM estándar para ejecutar componentes del sistema como DNS antes de agregar grupos de nodos de GPU interrumpibles.

Si no hay otros grupos de nodos en el clúster cuando se agrega un grupo de nodos interrumpibles con GPU, incluso si un clúster se crea en principio con un grupo de nodos de GPU interrumpibles, no tendrá asignado el taint "nvidia.com/gpu":NoSchedule normal. Esto significa que los pods del sistema se programarán en los nodos interrumpibles, lo que puede ser perjudicial cuando se interrumpen. Los pods también consumen recursos en los nodos de GPU. Esto desperdicia capacidad y dinero porque los nodos de GPU son más caros que los que no son de GPU.

Crea un clúster o un grupo de nodos con VM interrumpibles

Puedes usar la herramienta de línea de comandos de gcloud o Cloud Console para crear un clúster o grupo de nodos con VM interrumpibles.

gcloud

Puedes crear un clúster o grupo de nodos con VM interrumpibles mediante la marca --preemptible.

Para crear un clúster con VM interrumpibles, ejecuta el siguiente comando:

gcloud container clusters create [CLUSTER_NAME] --preemptible

En el ejemplo anterior, se ilustra lo siguiente: [COMPUTE_ZONE] es la zona de procesamiento del clúster.

Para crear un grupo de nodos con VM interrumpibles, sigue estos pasos:

gcloud container node-pools create [POOL_NAME] --preemptible \
--cluster [CLUSTER_NAME]

Console

  1. Visita el menú de Google Kubernetes Engine en Cloud Console.

    Ir al menú Google Kubernetes Engine

  2. Haz clic en Crear clúster.

  3. Elige la plantilla Clúster estándar o elige una plantilla adecuada para tu carga de trabajo.

  4. Configura tu clúster como desees. Luego, haz clic en Más opciones para el grupo de nodos que deseas configurar.

  5. En la sección Nodos interrumpibles, selecciona Habilitar nodos interrumpibles.

  6. Haz clic en Guardar para cerrar la superposición de modificación del grupo de nodos.

  7. Haz clic en Crear.

Próximos pasos

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Documentación de Kubernetes Engine