En esta página se explica cómo crear y usar una instancia de máquina virtual (VM) interrumpible. Las máquinas virtuales interrumpibles están disponibles con un descuento de hasta el 60-91% en comparación con el precio de las máquinas virtuales estándar. Sin embargo, Compute Engine puede detener (interrumpir temporalmente) estas VMs si necesita recuperar esos recursos para otras tareas. Las VMs interrumpibles siempre se detienen al cabo de 24 horas. Las máquinas virtuales interrumpibles solo se recomiendan para aplicaciones tolerantes a fallos que puedan gestionar la interrupción temporal de máquinas virtuales. Asegúrate de que tu aplicación pueda gestionar las suspensiones antes de crear una VM preemptible. Para conocer los riesgos y el valor de las VMs interrumpibles, consulta la documentación sobre instancias de VMs interrumpibles.
Antes de empezar
- Consulta la documentación sobre instancias de máquinas virtuales no garantizadas.
-
Si aún no lo has hecho, configura la autenticación.
La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:
gcloud init
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
- Set a default region and zone.
Go
Para usar las Go muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.
Instala Google Cloud CLI.
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
Para obtener más información, consulta Set up authentication for a local development environment.
Java
Para usar las Java muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.
Instala Google Cloud CLI.
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
Para obtener más información, consulta Set up authentication for a local development environment.
Node.js
Para usar las Node.js muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.
Instala Google Cloud CLI.
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
Para obtener más información, consulta Set up authentication for a local development environment.
Python
Para usar las Python muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.
Instala Google Cloud CLI.
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
Para obtener más información, consulta Set up authentication for a local development environment.
REST
Para usar las muestras de la API REST de esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la CLI de gcloud.
Instala Google Cloud CLI.
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .
Crear una VM no garantizada
Crea una máquina virtual interrumpible con la CLI de gcloud o la API de Compute Engine. Para usar la consolaGoogle Cloud , crea una máquina virtual de acceso puntual.
gcloud
Con
gcloud compute
, usa el mismo comandoinstances create
que usarías para crear una VM normal, pero añade la marca--preemptible
.gcloud compute instances create [VM_NAME] --preemptible
donde
[VM_NAME]
es el nombre de la VM.Go
Java
Node.js
Python
REST
En la API, crea una solicitud normal para crear una VM, pero incluye la propiedad
preemptible
enscheduling
y asigna el valortrue
. Por ejemplo:POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances { 'machineType': 'zones/[ZONE]/machineTypes/[MACHINE_TYPE]', 'name': '[INSTANCE_NAME]', 'scheduling': { 'preemptible': true }, ... }
Cuotas de CPUs prioritarias
Las máquinas virtuales interrumpibles requieren cuotas de CPU disponibles, al igual que las máquinas virtuales estándar. Para evitar que las VMs no garantizadas consuman las cuotas de CPU de tus VMs estándar, puedes solicitar una cuota especial de "CPU no garantizada". Cuando Compute Engine te conceda la cuota de CPUs interrumpibles en esa región, todas las VMs interrumpibles se contabilizarán en esa cuota y todas las VMs estándar seguirán contabilizándose en la cuota de CPUs estándar.
En las regiones en las que no tengas cuota de CPU interrumpible, puedes usar la cuota de CPU estándar para lanzar máquinas virtuales interrumpibles. También necesitas suficiente cuota de IP y de disco, como de costumbre. La cuota de CPUs interrumpibles no se puede ver en la CLI de gcloud ni en las páginas de cuota de la consolaGoogle Cloud , a menos que Compute Engine haya concedido la cuota.
Para obtener más información sobre las cuotas, consulta la página Cuotas de recursos.
Iniciar una VM interrumpida
Al igual que cualquier otra VM, si una VM interrumpible se detiene o se interrumpe, puedes iniciarla de nuevo y volver a ponerla en el estado
RUNNING
. Al iniciar una VM interrumpible, se reinicia el contador de 24 horas, pero, como sigue siendo una VM interrumpible, Compute Engine puede interrumpirla antes de que transcurran 24 horas. No se puede convertir una VM interrumpible en una VM estándar mientras está en ejecución.Si Compute Engine detiene una VM interrumpible en un grupo de instancias administrado (MIG) con autoescalado o en un clúster de Google Kubernetes Engine (GKE), el grupo reinicia la VM cuando los recursos vuelven a estar disponibles.
Gestionar la expropiación con una secuencia de comandos de apagado
Cuando Compute Engine expulsa una VM, puedes usar una secuencia de comandos de apagado para intentar realizar acciones de limpieza antes de que se expulse la VM. Por ejemplo, puedes detener correctamente un proceso en ejecución y copiar un archivo de punto de control en Cloud Storage. Cabe destacar que la duración máxima del periodo de apagado es menor en el caso de un aviso de desalojo que en el de un apagado iniciado por el usuario. Para obtener más información sobre el periodo de inactividad de una notificación de desalojo, consulta la sección Proceso de desalojo de la documentación conceptual.
A continuación, se muestra un script de apagado que puedes añadir a una VM preemptible en ejecución o a una nueva VM preemptible cuando la crees. Esta secuencia de comandos se ejecuta cuando la VM empieza a apagarse, antes de que el comando
kill
normal del sistema operativo detenga todos los procesos restantes. Después de detener correctamente el programa deseado, la secuencia de comandos sube en paralelo un archivo de punto de control a un segmento de Cloud Storage.#!/bin/bash MY_PROGRAM="[PROGRAM_NAME]" # For example, "apache2" or "nginx" MY_USER="[LOCAL_USERNAME]" CHECKPOINT="/home/$MY_USER/checkpoint.out" BUCKET_NAME="[BUCKET_NAME]" # For example, "my-checkpoint-files" (without gs://) echo "Shutting down! Seeing if ${MY_PROGRAM} is running." # Find the newest copy of $MY_PROGRAM PID="$(pgrep -n "$MY_PROGRAM")" if [[ "$?" -ne 0 ]]; then echo "${MY_PROGRAM} not running, shutting down immediately." exit 0 fi echo "Sending SIGINT to $PID" kill -2 "$PID" # Portable waitpid equivalent while kill -0 "$PID"; do sleep 1 done echo "$PID is done, copying ${CHECKPOINT} to gs://${BUCKET_NAME} as ${MY_USER}" su "${MY_USER}" -c "gcloud storage cp $CHECKPOINT gs://${BUCKET_NAME}/" echo "Done uploading, shutting down."
Para añadir esta secuencia de comandos a una VM, configúrela para que funcione con una aplicación en su VM y añádala a los metadatos de la VM.
- Copia o descarga la secuencia de comandos de apagado en tu estación de trabajo local.
- Abre el archivo para editarlo y cambia las siguientes variables:
[PROGRAM_NAME]
es el nombre del proceso o programa que quieres cerrar. Por ejemplo,apache2
onginx
.[LOCAL_USER]
es el nombre de usuario con el que has iniciado sesión en la máquina virtual.[BUCKET_NAME]
es el nombre del segmento de Cloud Storage en el que quieres guardar el archivo de punto de control del programa. Ten en cuenta que, en este caso, el nombre del segmento no empieza porgs://
.
- Guarda los cambios.
- Añade la secuencia de comandos de apagado a una VM nueva o a una VM que ya tengas.
En esta secuencia de comandos se da por hecho lo siguiente:
La VM se ha creado con al menos acceso de lectura y escritura a Cloud Storage. Consulta la documentación de autenticación para obtener instrucciones sobre cómo crear una VM con los permisos adecuados.
Tienes un segmento de Cloud Storage y permiso para escribir en él.
Identificar máquinas virtuales interrumpibles
Para comprobar si una VM es una VM interrumpible, sigue los pasos para identificar el modelo de aprovisionamiento y la acción de finalización de una VM.
Determinar si se ha interrumpido una VM
Determina si una VM se ha retirado con laGoogle Cloud console, la CLI de gcloud o la API.
Consola
Puedes comprobar si se ha retirado una VM consultando los registros de actividad del sistema.
En la Google Cloud consola, ve a la página Registros.
Selecciona el proyecto y haz clic en Continuar.
Añade
compute.instances.preempted
al campo Filtrar por etiqueta o buscar texto.También puedes introducir el nombre de una VM si quieres ver las operaciones de desalojo de una VM específica.
Pulsa Intro para aplicar los filtros especificados. La Google Cloud consola actualiza la lista de registros para mostrar solo las operaciones en las que se ha retirado una VM.
Selecciona una operación de la lista para ver los detalles de la VM que se ha retirado.
gcloud
Usa el comandogcloud compute operations list
con un parámetro filter para obtener una lista de eventos de preferencia en tu proyecto.gcloud compute operations list \ --filter="operationType=compute.instances.preempted"
Puedes usar el parámetro de filtro para acotar aún más los resultados. Por ejemplo, para ver solo los eventos de desalojo de las VMs de un grupo de instancias gestionado, haz lo siguiente:
gcloud compute operations list \ --filter="operationType=compute.instances.preempted AND targetLink:instances/[BASE_VM_NAME]"
gcloud
devuelve una respuesta similar a la siguiente:NAME TYPE TARGET HTTP_STATUS STATUS TIMESTAMP systemevent-xxxxxxxx compute.instances.preempted us-central1-f/instances/example-vm-xxx 200 DONE 2015-04-02T12:12:10.881-07:00
El tipo de operación
compute.instances.preempted
indica que la VM se ha desalojado. Puedes usar el comandooperations describe
para obtener más información sobre una operación de desalojo específica.gcloud compute operations describe \ systemevent-xxxxxxxx
gcloud
devuelve una respuesta similar a la siguiente:... operationType: compute.instances.preempted progress: 100 selfLink: https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/operations/systemevent-xxxxxxxx startTime: '2015-04-02T12:12:10.881-07:00' status: DONE statusMessage: Instance was preempted. ...
REST
Para obtener una lista de las operaciones recientes del sistema, envía una solicitudGET
al URI de las operaciones de la zona.GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/operations
La respuesta contiene una lista de operaciones recientes.
{ "kind": "compute#operation", "id": "15041793718812375371", "name": "systemevent-xxxxxxxx", "zone": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f", "operationType": "compute.instances.preempted", "targetLink": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-vm", "targetId": "12820389800990687210", "status": "DONE", "statusMessage": "Instance was preempted.", ... }
Para acotar la respuesta y mostrar solo las operaciones de preferencia, puedes añadir un filtro a tu solicitud a la API:
operationType="compute.instances.preempted"
. Para ver las operaciones de desalojo de una VM específica, añade el parámetrotargetLink
al filtro:operationType="compute.instances.preempted" AND targetLink="https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[VM_NAME]"
.También puedes determinar si se ha retirado una VM desde la propia VM. Esto es útil si quieres gestionar un cierre debido a una suspensión de Compute Engine de forma diferente a un cierre normal en una secuencia de comandos de cierre. Para ello, comprueba el valor
preempted
en los metadatos de instancia predeterminados de tu VM.Por ejemplo, usa
curl
en tu máquina virtual para obtener el valor depreempted
:curl "http://metadata.google.internal/computeMetadata/v1/instance/preempted" -H "Metadata-Flavor: Google" TRUE
Si este valor es
TRUE
, Compute Engine ha desalojado la máquina virtual; de lo contrario, esFALSE
.Si quieres usarlo fuera de un script de cierre, puedes añadir ?wait_for_change=true a la URL. Envía una solicitud HTTP GET pendiente que solo devuelve un valor cuando los metadatos han cambiado y la máquina virtual se ha retirado.
curl "http://metadata.google.internal/computeMetadata/v1/instance/preempted?wait_for_change=true" -H "Metadata-Flavor: Google" TRUE
Probar la configuración de la preferencia
Puedes ejecutar eventos simulados de mantenimiento en tus VMs para forzar su interrupción. Usa esta función para probar cómo gestionan tus aplicaciones las máquinas virtuales interrumpibles. Consulta cómo probar tus políticas de disponibilidad para saber cómo probar los eventos de mantenimiento en tus VMs.
También puedes simular la interrupción de una máquina virtual deteniéndola. Esta opción se puede usar en lugar de simular un evento de mantenimiento y no tiene límites de cuota.
Prácticas recomendadas
A continuación, te ofrecemos algunas prácticas recomendadas para sacar el máximo partido a las instancias de VM preemptivas.
Usar la API de instancias en bloque
En lugar de crear VMs individuales, puedes usar la API de instancias en bloque.
Elige formas de máquina más pequeñas
Los recursos de las VMs interrumpibles proceden del exceso y de la capacidad de copia de seguridad. Google Cloud Suele ser más fácil obtener capacidad para los tipos de máquinas más pequeños, es decir, los tipos de máquinas con menos recursos, como vCPUs y memoria. Si seleccionas un tipo de máquina personalizada más pequeño, es posible que encuentres más capacidad para las máquinas virtuales no garantizadas, pero es aún más probable que haya capacidad para los tipos de máquinas predefinidos más pequeños. Por ejemplo, en comparación con la capacidad del
n2-standard-32
tipo de máquina predefinido, es más probable que haya capacidad para eln2-custom-24-96
tipo de máquina personalizada, pero es aún más probable que haya capacidad para eln2-standard-16
tipo de máquina predefinido.Ejecutar clústeres de máquinas virtuales interrumpibles grandes durante las horas de menor actividad
La carga de los centros de datos de Google Cloud varía en función de la ubicación y la hora del día, pero suele ser menor por las noches y los fines de semana. Por lo tanto, las noches y los fines de semana son los mejores momentos para ejecutar clústeres de máquinas virtuales interrumpibles grandes.
Diseña tus aplicaciones para que toleren fallos e interrupciones
Es importante estar preparado para los cambios en los patrones de preferencia en diferentes momentos. Por ejemplo, si una zona sufre una interrupción parcial, se pueden desalojar un gran número de VMs preemptivas para dejar espacio a las VMs estándar que deban moverse como parte de la recuperación. En ese breve periodo, la tasa de preferencia sería muy diferente a la de cualquier otro día. Si tu aplicación da por hecho que las apropiaciones siempre se realizan en grupos pequeños, es posible que no esté preparada para este tipo de eventos. Puedes probar el comportamiento de tu aplicación en un evento de expropiación deteniendo la instancia de VM.
Volver a crear VMs que se han interrumpido
Si tu instancia de VM se ha interrumpido, prueba a crear VMs interrumpibles una o dos veces antes de volver a las VMs estándar. En función de tus requisitos, puede que te convenga combinar VMs estándar y VMs preemptivas en tus clústeres para asegurarte de que el trabajo se lleva a cabo a un ritmo adecuado.
Usar secuencias de comandos de apagado
Gestiona las notificaciones de apagado y de preferencia con un script de apagado que pueda guardar el progreso de un trabajo para que pueda continuar donde lo dejó, en lugar de empezar de cero.
Siguientes pasos
- Consulta la documentación sobre instancias de máquinas virtuales no garantizadas.
- Consulta información sobre los guiones de apagado.
- Conéctate a tu VM.
A menos que se indique lo contrario, el contenido de esta página está sujeto a la licencia Reconocimiento 4.0 de Creative Commons y las muestras de código están sujetas a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio web de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2025-09-12 (UTC).
-