Ich habe 2 GCP-VMs, die mit einem Load Balancer verbunden sind (es ist eine nicht verwaltete Instanzgruppe).
Ich möchte eine neue VM starten, wenn ich eine CPU-Auslastungswarnung erhalte (Auslastung höher als 70 %). Dies ist ein benutzerdefiniertes Szenario und ich kann die integrierte automatische Skalierung von GCP nicht verwenden.
Sind die folgenden beiden Szenarien möglich? Ich suche hier nach einer Orientierung.
- Mein benutzerdefinierter Code startet eine neue VM und stellt benutzerdefinierten Code auf der Instanz bereit.
- Kann ich die neue VM nachträglich an den LB anhängen?
Antwort1
Auf dem Computer, auf dem Sie Ihren benutzerdefinierten Code ausführen, der die CPU-Auslastung für die verwalteten Instanzgruppen-VMs überwacht, können Sie denCompute Engine-APIoder gcloud
(aus demCloud SDK), indem Sie sich mit demSchlüsseleinesDienstkontomit demrechen.adminRolle oder einfach über die Instanzmetadaten, wenn Sie es in einer GCE-VM in Ihrem Projekt mit derComputer-RWZugriffsbereichsalias, um die Erstellung der Instanz und das Hinzufügen zu Ihrer nicht verwalteten Instanzgruppe per Skript zu steuern.
Wenn Sie keine benutzerdefinierten Images verwenden, können Sie die gewünschte Umgebung für die VM möglicherweise in einemStartskriptdie Sie gespeichert haben in einemGCS-Bucketim Projekt, wenn Sie Ihren VMs auch dielagerung-roZugriffsbereichsalias.
Zum Beispiel mit Bash in einer GCE VM mitComputer-RWdas die CPU-Auslastung verfolgt:
#!/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"