Как использовать оповещение об использовании ЦП от GCP для запуска нового экземпляра виртуальной машины (реализация пользовательского автомасштабирования)

Как использовать оповещение об использовании ЦП от GCP для запуска нового экземпляра виртуальной машины (реализация пользовательского автомасштабирования)

У меня есть 2 виртуальные машины GCP, подключенные к балансировщику нагрузки (это неуправляемая группа экземпляров).

Я хотел бы запускать новую виртуальную машину всякий раз, когда получаю оповещение об использовании ЦП (использование выше 70%). Это настраиваемый сценарий, и я не могу использовать встроенное автоматическое масштабирование GCP.

Возможны ли следующие 2 сценария? Ищу направление здесь.

  1. Мой пользовательский код создаст новую виртуальную машину и развернет пользовательский код на экземпляре.
  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"

Связанный контент