Esta página explica cómo crear y utilizar una instancia de máquina virtual (VM) interrumpible. Las máquinas virtuales interrumpibles están disponibles con un descuento de hasta el 60 % y el 91 % en comparación con el precio de las máquinas virtuales estándar. Sin embargo, Compute Engine podría detener (adelantarse) a estas máquinas virtuales si necesita recuperar esos recursos para otras tareas. Las máquinas virtuales interrumpibles siempre se detienen después de 24 horas. Las VM interrumpibles solo se recomiendan para aplicaciones tolerantes a fallas que puedan soportar la preferencia de VM. Asegúrese de que su aplicación pueda manejar apropiaciones antes de decidir crear una VM apropiable. Para comprender los riesgos y el valor de las VM interrumpibles, lea la documentación sobre instancias de VM interrumpibles .
Antes de comenzar
- Lea la documentación de Instancias de VM interrumpibles .
- Si aún no lo has hecho, configura la autenticación. La autenticación es el proceso mediante el cual se verifica su identidad para acceder a Google Cloud servicios y API. Para ejecutar código o muestras 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
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- Set a default region and zone.
- Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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, confirm that you have configured the gcloud CLI to use Workforce Identity Federation.
- Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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, confirm that you have configured the gcloud CLI to use Workforce Identity Federation.
- Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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, confirm that you have configured the gcloud CLI to use Workforce Identity Federation.
- Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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, confirm that you have configured the gcloud CLI to use Workforce Identity Federation.
- Copie o descargue el script de apagado en su estación de trabajo local.
- Abra el archivo para editarlo y cambiar las siguientes variables:
-
[PROGRAM_NAME]
es el nombre del proceso o programa que desea cerrar. Por ejemplo,apache2
onginx
. -
[LOCAL_USER]
es el nombre de usuario con el que inició sesión en la máquina virtual. -
[BUCKET_NAME]
es el nombre del depósito de Cloud Storage donde deseas guardar el archivo de punto de control del programa. Tenga en cuenta que el nombre del depósito no comienza congs://
en este caso.
-
- Guarde sus cambios.
- Agregue el script de apagado a una máquina virtual nueva o existente .
La VM se creó con al menos acceso de lectura/escritura a Cloud Storage. Consulte la documentación de autenticación para obtener instrucciones sobre cómo crear una máquina virtual con los ámbitos adecuados.
Tienes un depósito de Cloud Storage existente y permiso para escribir en él.
En la consola de Google Cloud, vaya a la página Registros .
Seleccione su proyecto y haga clic en Continuar .
Agregue
compute.instances.preempted
al filtro por etiqueta o campo de búsqueda de texto .Opcionalmente, también puede ingresar un nombre de VM si desea ver las operaciones de preferencia para una VM específica.
Presione Intro para aplicar los filtros especificados. La consola de Google Cloud actualiza la lista de registros para mostrar solo las operaciones en las que se adelantó una VM.
Seleccione una operación en la lista para ver detalles sobre la VM que fue reemplazada.
- Lea la documentación de Instancias de VM interrumpibles .
- Lea acerca de los scripts de apagado .
- Conéctese a su máquina virtual .
Go
Para usar las muestras de Go de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.
Para obtener más información, consulta Set up authentication for a local development environment.
Java
Para usar las muestras de Java de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.
Para obtener más información, consulta Set up authentication for a local development environment.
Node.js
Para usar las muestras de Node.js de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.
Para obtener más información, consulta Set up authentication for a local development environment.
Python
Para usar las muestras de Python de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.
Para obtener más información, consulta Set up authentication for a local development environment.
REST
Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
Para obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud .
Crear una VM interrumpible
Cree una VM interrumpible mediante la CLI de gcloud o la API de Compute Engine. Para usar la consola de Google Cloud, cree una máquina virtual puntual .
nube de gcloud
Con
gcloud compute
, usa el mismo comandoinstances create
que usarías para crear una VM normal, pero agrega la marca--preemptible
.gcloud compute instances create [VM_NAME] --preemptible
donde
[VM_NAME]
es el nombre de la VM.Ir
Java
Nodo.js
Pitón
DESCANSAR
En la API, cree una solicitud normal para crear una VM , pero incluya la propiedad
preemptible
enscheduling
y configúrela entrue
. 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 CPU preferibles
Las máquinas virtuales interrumpibles requieren cuotas de CPU disponibles, como las máquinas virtuales estándar. Para evitar que las máquinas virtuales interrumpibles consuman las cuotas de CPU de sus máquinas virtuales estándar, puede solicitar una cuota especial de "CPU interrumpible". Después de que Compute Engine te otorga una cuota de CPU interrumpible en esa región, todas las VM interrumpibles cuentan para esa cuota y todas las VM estándar continúan contando para la cuota de CPU estándar.
En regiones donde no tiene una cuota de CPU interrumpible, puede usar una cuota de CPU estándar para iniciar máquinas virtuales interrumpibles. También necesita suficiente cuota de disco e IP, como de costumbre. La cuota de CPU preferente no es visible en la CLI de gcloud o en las páginas de cuotas de la consola de Google Cloud a menos que Compute Engine haya otorgado la cuota.
Para obtener más información sobre las cuotas, visite la página Cuotas de recursos .
Iniciar una VM con preferencia
Como cualquier otra máquina virtual, si una máquina virtual interrumpible se detiene o se interrumpe, puede iniciarla nuevamente y devolverla al estado
RUNNING
. Al iniciar una VM interrumpible se restablece el contador de 24 horas, pero como sigue siendo una VM interrumpible, Compute Engine puede hacerlo antes de las 24 horas. No es posible convertir una VM interrumpible en una VM estándar mientras se está ejecutando.Si Compute Engine detiene una VM interrumpible en un grupo de instancias administradas (MIG) de escalamiento automático o en un clúster de Google Kubernetes Engine (GKE), el grupo reinicia la VM cuando los recursos vuelven a estar disponibles.
Manejar la preferencia con un script de apagado
Cuando Compute Engine se apropia de una VM, puedes usar una secuencia de comandos de apagado para intentar realizar acciones de limpieza antes de que se apruebe la VM. Por ejemplo, puede detener cómodamente un proceso en ejecución y copiar un archivo de punto de control en Cloud Storage . En particular, la duración máxima del período de cierre es más corta para un aviso de preferencia que para un cierre iniciado por el usuario. Para obtener más información sobre el período de cierre de un aviso de preferencia, consulte Proceso de preferencia en la documentación conceptual.
El siguiente es un script de apagado que puede agregar a una VM interrumpible en ejecución o agregar a una nueva VM interrumpible cuando la crea. Este script se ejecuta cuando la VM comienza 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, el script realiza una carga paralela de un archivo de punto de control en un depósito 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 agregar este script a una VM, configúrelo para que funcione con una aplicación en su VM y agréguelo a los metadatos de la VM.
Este script asume lo siguiente:
Identificar máquinas virtuales interrumpibles
Para verificar si una VM es una VM interrumpible, siga los pasos para Identificar el modelo de aprovisionamiento y la acción de terminación de una VM .
Determinar si una VM fue reemplazada
Determina si una VM fue reemplazada con la consola de Google Cloud , la CLI de gcloud o la API .
Consola
Puede verificar si una VM fue reemplazada revisando los registros de actividad del sistema.
nube de gcloud
Usa el comandogcloud compute operations list
con un parámetro de filtro para obtener una lista de eventos de preferencia en tu proyecto.gcloud compute operations list \ --filter="operationType=compute.instances.preempted"
Puede utilizar el parámetro de filtro para ampliar el alcance de los resultados. Por ejemplo, para ver eventos de preferencia solo para VM dentro de un grupo de instancias administrado:
gcloud compute operations list \ --filter="operationType=compute.instances.preempted AND targetLink:instances/[BASE_VM_NAME]"
gcloud
devuelve una respuesta similar a: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
Un tipo de operación de
compute.instances.preempted
indica que la VM fue reemplazada. Puede utilizar el comandooperations describe
para obtener más información sobre una operación de preferencia específica.gcloud compute operations describe \ systemevent-xxxxxxxx
gcloud
devuelve una respuesta similar a:... 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. ...
DESCANSAR
Para obtener una lista de operaciones recientes del sistema, envíe una solicitudGET
al URI de operaciones de 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 que la respuesta muestre solo operaciones de preferencia, puede agregar un filtro a su solicitud de API:
operationType="compute.instances.preempted"
. Para ver las operaciones de preferencia para una VM específica, agregue un parámetrotargetLink
al filtro:operationType="compute.instances.preempted" AND targetLink="https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[VM_NAME]"
.Alternativamente, puede determinar si una VM fue reemplazada desde dentro de la propia VM. Esto es útil si deseas manejar un apagado debido a una preferencia de Compute Engine de manera diferente a un apagado normal en un script de apagado . Para hacer esto, simplemente verifique en el servidor de metadatos el valor
preempted
en los metadatos de instancia predeterminados de su VM.Por ejemplo, use
curl
desde su VM 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 se adelantó a la VM; de lo contrario, esFALSE
.Si desea utilizar esto fuera de un script de apagado, puede agregar ?wait_for_change=true a la URL. Esto realiza una solicitud HTTP GET bloqueada que solo regresa cuando los metadatos han cambiado y la VM ha sido reemplazada.
curl "http://metadata.google.internal/computeMetadata/v1/instance/preempted?wait_for_change=true" -H "Metadata-Flavor: Google" TRUE
Configuración de preferencia de prueba
Puede ejecutar eventos de mantenimiento simulados en sus máquinas virtuales para obligarlas a apropiarse. Utilice esta característica para probar cómo sus aplicaciones manejan las máquinas virtuales interrumpibles. Lea cómo probar sus políticas de disponibilidad para aprender cómo probar eventos de mantenimiento en sus máquinas virtuales.
También puede simular la preferencia de una máquina virtual deteniéndola , lo que se puede usar en lugar de simular un evento de mantenimiento y evita los límites de cuota.
Mejores prácticas
A continuación se presentan algunas prácticas recomendadas que le ayudarán a aprovechar al máximo las instancias de VM interrumpibles.
Usando la API de instancia masiva
En lugar de crear máquinas virtuales únicas, puede utilizar la API de instancia masiva .
Elija formas de máquinas más pequeñas
Los recursos para máquinas virtuales interrumpibles provienen del exceso y de la copia de seguridad Google Cloudcapacidad. La capacidad suele ser más fácil de conseguir para tipos de máquinas más pequeñas , es decir, tipos de máquinas con menos recursos, como vCPU y memoria. Es posible que encuentre más capacidad para máquinas virtuales interrumpibles seleccionando un tipo de máquina personalizada más pequeña, pero la capacidad es aún más probable para tipos de máquinas predefinidas más pequeñas. Por ejemplo, en comparación con la capacidad para el tipo de máquina predefinido
n2-standard-32
, la capacidad para el tipo de máquina personalizadan2-custom-24-96
es más probable, pero la capacidad para el tipo de máquina predefinidon2-standard-16
es aún más probable.Ejecute grandes clústeres de VM interrumpibles durante las horas de menor actividad
la carga en Google Cloud Los centros de datos varían según la ubicación y la hora del día, pero generalmente son más bajos durante las noches y los fines de semana. Como tal, las noches y los fines de semana son los mejores momentos para ejecutar grandes clústeres de VM interrumpibles.
Diseñe sus aplicaciones para que sean tolerantes a fallos y a la preferencia
Es importante estar preparado para el hecho de que hay cambios en los patrones de preferencia en diferentes momentos. Por ejemplo, si una zona sufre una interrupción parcial, se podría sustituir una gran cantidad de máquinas virtuales interrumpibles para dejar espacio a las máquinas virtuales estándar que deben trasladarse como parte de la recuperación. En ese pequeño lapso de tiempo, la tasa de preferencia sería muy diferente a la de cualquier otro día. Si su aplicación supone que las apropiaciones siempre se realizan en grupos pequeños, es posible que no esté preparado para tal evento. Puede probar el comportamiento de su aplicación en un evento de preferencia deteniendo la instancia de VM.
Reintentar la creación de máquinas virtuales que han sido reemplazadas
Si su instancia de VM ha sido reemplazada, intente crear nuevas VM interrumpibles una o dos veces antes de recurrir a las VM estándar. Dependiendo de sus requisitos, podría ser una buena idea combinar máquinas virtuales estándar e interrumpibles en sus clústeres para garantizar que el trabajo avance a un ritmo adecuado.
Usar scripts de apagado
Administre los avisos de apagado y prevención con una secuencia de comandos de apagado que puede guardar el progreso de un trabajo para que pueda continuar donde lo dejó, en lugar de comenzar desde cero.
¿Qué sigue?
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-04-17 (UTC).
-