同时创建多个GCE VM的脚本

时间:2018-08-22 14:33:35

标签: google-compute-engine

我有一个基本的SH脚本,可用于在GCP上创建多个VM,它工作正常,但顺序正常。如果说多个VM数量大于4或5,则这将成为实质性的时间延迟。我注意到在诸如Dataflow或Dataproc的平台中,几乎同时创建了任意数量的VM。有没有办法模仿GCE中的功能? (毕竟,无论如何,这些似乎都是基本的GCE机器)。

现在,我使用以下(简化的)脚本:

vms=4
for i in `seq 1 $vms`
do

    gcloud compute --project PROJECT disks create VM"$i" --size 50 --zone ZONE --type "pd-ssd"
    gcloud beta compute --project=PROJECT instances create VM"$i" --zone=ZONE --machine-type=MACHINE_TYPE --subnet=default --maintenance-policy=MIGRATE --scopes=https://www.googleapis.com/auth/cloud-platform --disk=name=VM"$i",device-name=VM"$i",mode=rw,boot=yes,auto-delete=yes

done

谢谢您的建议!

3 个答案:

答案 0 :(得分:2)

您可以通过creating a group of managed VMs更快地创建多个相似的VM。

首先,create an instance template,指定所需的VM配置:

gcloud compute instance-templates create TEMPLATE_NAME \
  --machine-type MACHINE_TYPE \
  --image-project IMAGE_PROJECT \  # project where your boot disk image is stored
  --image IMAGE \  # boot disk image name
  --boot-disk-type pd-ssd \
  --boot-disk-size 50GB \
  --boot-disk-auto-delete \
  --boot-disk-device-name DEVICE_NAME \  # boot disk device name, the same for all VMs
  --subnet default \ 
  --maintenance-policy MIGRATE \
  [...]

注意:

  • 您将启动磁盘指定为实例模板的一部分。
  • 无需为实例模板指定区域。您将在创建实例组时指定所需的区域。
  • 该组中所有VM的启动磁盘的设备名称均相同。这不是冲突,因为特定磁盘的设备名称是每个特定VM的seen from guest OS,并且在该VM本地。
  • 其他参数与创建虚拟机的参数相同。

然后,基于此模板,创建4个(或100个或1000+个)VM组:

gcloud compute instance-groups managed create GROUP_NAME \
  --zone ZONE \
  --template TEMPLATE_NAME \ # name of the instance template that you have just created
  --size 4 \ number of VMs that you need to create

该小组根据您的模板创建多个类似的VM,其速度比通过迭代创建独立VM的创建速度快得多。

答案 1 :(得分:1)

直接行进

一个捷径就是将--async参数添加到gcloud命令中。 此外,您可以使用wait&在bash中添加并行化:

for i in `seq 1 4`
do
  gcloud compute instances [...] --async &
done
wait

替代

您可以使用terraform以不同的方式进行操作

答案 2 :(得分:0)

bulk instance creation APIs 允许您使用单个 API 请求创建多个 VM:

gcloud compute instances bulk create \
  --name-pattern="VM#" \
  --count=4 \
  --region=REGION \
  --machine-type=MACHINE_TYPE \
  --image-project=IMAGE_PROJECT \  # project where your boot disk image is stored
  --image=IMAGE \  # boot disk image name
  --boot-disk-type=pd-ssd \
  --boot-disk-size=50GB \
  --boot-disk-auto-delete \
  --boot-disk-device-name=DEVICE_NAME \  # boot disk device name, the same for all VMs
  --subnet=default \ 
  --maintenance-policy=MIGRATE \
  [...]

注意:

  • 所有虚拟机都是并行创建的
  • 它会根据可用的位置自动选择要在其中创建 VM 的区域
  • 如果它检测到一些阻止创建完整请求的问题(例如,如果没有足够的容量),它将预先失败
  • 它可以自动为你生成名字