我有 2 個 GCP 虛擬機器連接到負載平衡器(它是一個非託管實例組)。
每當收到 CPU 使用率警報(使用率高於 70%)時,我想啟動一個新的虛擬機器。這是一個自訂場景,我無法使用 GCP 的內建自動縮放功能。
以下2種情況可能嗎?在這裡尋找一些方向。
- 我的自訂程式碼將啟動一個新的虛擬機器並在實例上部署自訂程式碼。
- 之後我可以將新虛擬機器附加到負載平衡嗎?
答案1
在執行自訂程式碼來監視託管執行個體組虛擬機器的 CPU 使用情況的電腦上,您可以使用計算引擎API,或gcloud
(從雲端SDK),透過驗證鑰匙的一個服務帳戶與運算管理角色或僅透過實例元資料(如果您在專案中的 GCE VM 中執行它)電腦讀寫存取範圍別名,用於編寫實例建立和新增至非託管實例群組的腳本。
如果您不使用自訂映像,您可能能夠在下列位置擁有所需的 VM 環境:啟動腳本您已儲存在GCS鏟鬥在專案中,如果您還為您的虛擬機器提供了儲存RO訪問範圍別名。
例如,在 GCE VM 中使用 Bash電腦讀寫追蹤 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"