我有 2 个 GCP VM 连接到负载均衡器(它是一个非托管实例组)。
我希望每当我收到 CPU 使用率警报(使用率高于 70%)时启动新的虚拟机。这是一个自定义场景,我无法使用 GCP 的内置自动扩展功能。
以下两种情况可能吗?在这里寻找一些方向。
- 我的自定义代码将启动一个新的 VM 并在实例上部署自定义代码。
- 之后我可以把新的 VM 附加到 LB 吗?
答案1
在运行自定义代码以监控托管实例组虚拟机的 CPU 使用率的计算机上,您可以使用计算引擎 API或gcloud
(从云端 SDK)通过钥匙的服务帐户与计算管理员角色,或者只是通过实例元数据(如果你在项目中的 GCE VM 中运行它)计算-rw访问范围别名,为实例创建和添加到非托管实例组编写脚本。
如果你不使用自定义镜像,你可能可以在启动脚本您已存储在GCS 铲斗在项目中,如果你还给你的虚拟机存储-RO访问范围别名。
例如,在 GCE VM 中使用 Bash计算-rw跟踪 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"