У меня есть 2 виртуальные машины GCP, подключенные к балансировщику нагрузки (это неуправляемая группа экземпляров).
Я хотел бы запускать новую виртуальную машину всякий раз, когда получаю оповещение об использовании ЦП (использование выше 70%). Это настраиваемый сценарий, и я не могу использовать встроенное автоматическое масштабирование GCP.
Возможны ли следующие 2 сценария? Ищу направление здесь.
- Мой пользовательский код создаст новую виртуальную машину и развернет пользовательский код на экземпляре.
- Могу ли я впоследствии подключить новую виртуальную машину к LB?
решение1
На машине, где вы запускаете свой пользовательский код, который отслеживает использование ЦП для управляемых виртуальных машин группы экземпляров, вы можете использоватьAPI вычислительного движка, или gcloud
(изОблачный SDK), пройдя аутентификацию с помощьюключизучетная запись службысвычислить.админроли или просто через метаданные экземпляра, если вы запускаете его в виртуальной машине GCE в своем проекте свычислить-rwпсевдоним области доступа для создания сценария создания экземпляра и добавления его в вашу неуправляемую группу экземпляров.
Если вы не используете пользовательские образы, вы можете иметь желаемую среду для виртуальной машины вскрипт запускакоторые вы сохранили вGCS-ковшв проекте, если вы также дадите своим виртуальным машинамхранение-roпсевдоним области доступа.
Например, с Bash в виртуальной машине GCE свычислить-rwкоторый отслеживает использование ЦП:
#!/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"