Tengo 2 máquinas virtuales de GCP conectadas a un equilibrador de carga (es un grupo de instancias no administrado).
Me gustaría activar una nueva máquina virtual cada vez que recibo una alerta de uso de CPU (uso superior al 70%). Este es un escenario personalizado y no puedo usar el ajuste de escala automático integrado de GCP.
¿Son posibles los siguientes 2 escenarios? Buscando alguna dirección aquí.
- Mi código personalizado generará una nueva máquina virtual e implementará un código personalizado en la instancia.
- ¿Puedo adjuntar la nueva VM al LB después?
Respuesta1
En la máquina donde ejecuta su código personalizado que monitorea el uso de CPU para las VM del grupo de instancias administrado, puede usar elAPI de motor de cálculo, o gcloud
(de laSDK en la nube), autenticándose con elllavede uncuenta de serviciocon elcalcular.adminrol o simplemente a través de los metadatos de la instancia si lo está ejecutando en una máquina virtual GCE en su proyecto con elcalcular-rwalias de alcance de acceso, para programar la creación de la instancia y su adición a su grupo de instancias no administrado.
Si no está utilizando imágenes personalizadas, es posible que pueda tener el entorno deseado para la máquina virtual en unguión de inicioque tienes almacenado en unCuchara GCSen el proyecto si también le da a sus VM laalmacenamiento-roalias de alcance de acceso.
Por ejemplo, con Bash en una máquina virtual GCE concalcular-rwque rastrea los usos de la CPU:
#!/bin/bash
set -e
# To be run when a scale-up is requested
IG=your-unmanaged-ig
ZONE=europe-west1-c # (or whichever zone you'd want to spin up the VMs in)
STARTUP_SCRIPT=gs://your-gcs-bucket/your-custom-startup-script.sh # (previously uploaded to a bucket the GCE instance can access)
# Gets the list of VMs in the IG, then increases/adds the suffix number for the new one:
lastVM="$(gcloud compute instance-groups unmanaged list-instances "$IG" --zone="$ZONE" --format='get(instance)' | grep -Po '(?<!\\)[[:alnum:]-]+$' | sort -n | tail -n1)"
lastVMno=$(grep -Eo '[0-9]+$' <<< "$lastVM" || true)
newVM="$(sed -r 's/[0-9]*$/'"$((lastVMno + 1))"'/' <<< "$lastVM")"
# Creates the new VM
gcloud compute instances create "$newVM" --zone="$ZONE" --metadata=startup-script-url="$STARTUP_SCRIPT"
# (wait for eg. the post-creation setup from your startup script to finish, then add it to the load-balanced IG)
sleep 5m
gcloud compute instance-groups unmanaged add-instances $IG --instances="$newVM"