本文說明如何大量建立虛擬機器 (VM) 時,指定執行個體彈性。指定這項設定時,您會指定適合 VM 的機型清單,而 Compute Engine 會根據區域中的容量和配額可用性,使用任何指定的機型佈建 VM。
如要進一步瞭解大量建立的 VM 執行個體彈性,請參閱「大量建立的 VM 執行個體彈性簡介」。
事前準備
- 如要建立 VM 和任何相關資源,請確認您有足夠的配額和必要權限。
-
如果尚未設定驗證,請先完成設定。
驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:
選取這個頁面上的分頁,瞭解如何使用範例:
gcloud
-
安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:
gcloud init若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
- 設定預設地區和區域。
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」。
必要的角色
如要取得大量建立 VM 的權限,請要求管理員授予您專案的 Compute 執行個體管理員 (v1) (roles/compute.instanceAdmin.v1) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這個預先定義的角色具備大量建立 VM 的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
如要大量建立 VM,您必須具備下列權限:
-
專案的
compute.instances.create -
如要使用自訂映像檔建立 VM:
compute.images.useReadOnly在映像檔上 -
如要使用快照建立 VM:
compute.snapshots.useReadOnly快照 -
如要使用執行個體範本建立 VM,請按照下列步驟操作:
compute.instanceTemplates.useReadOnly在執行個體範本上 -
如要為 VM 指定子網路,請在專案或所選子網路上授予
compute.subnetworks.use權限。 -
如要為 VM 指定靜態 IP 位址:
專案的
compute.addresses.use -
使用虛擬私有雲網路時,如要將外部 IP 位址指派給 VM:
compute.subnetworks.useExternalIp專案或所選子網路的權限 -
如要將舊版網路指派給 VM,請按照下列步驟操作:
compute.networks.use專案的 -
使用舊版網路時,如要將外部 IP 位址指派給 VM,請在專案中設定
compute.networks.useExternalIp。 -
如要為 VM 設定 VM 執行個體中繼資料,請在專案中執行下列指令:
compute.instances.setMetadata -
如要為 VM 設定標記,請按照下列步驟操作:
compute.instances.setTags在 VM 上 -
如要為 VM 設定標籤,請按照下列步驟操作:
compute.instances.setLabels在 VM 上 -
如要設定 VM 使用的服務帳戶,請按照下列步驟操作:
compute.instances.setServiceAccount在 VM 上 -
為 VM 建立新磁碟:
compute.disks.create專案 -
如要以唯讀或讀寫模式附加現有磁碟:
磁碟的
compute.disks.use -
如要以唯讀模式連接現有磁碟:
compute.disks.useReadOnly磁碟的權限
建立偏好程度相同的多個機型 VM
如果工作負載可使用多種不同的機器類型,您可以在單一執行個體選取項目中,指定所有相容的機器類型清單。以下範例說明如何指定多個偏好程度相同的機型。
gcloud
如要透過單一執行個體選取作業大量建立 VM,請使用 gcloud compute instances bulk create 指令搭配 --instance-selection-machine-types 旗標。
gcloud compute instances bulk create \
--name-pattern=NAME_PATTERN \
--region=REGION \
--count=COUNT \
--instance-selection-machine-types=MACHINE_TYPE_1,MACHINE_TYPE_2
更改下列內容:
COUNT:要建立的 VM 數量NAME_PATTERN:VM 的名稱模式MACHINE_TYPE_1、MACHINE_TYPE_2:用於 VM 的機器類型REGION:要建立 VM 的區域
範例
gcloud compute instances bulk create \
--name-pattern=test-bulk-# \
--region=us-central1 \
--count=10 \
--instance-selection-machine-types=c3-standard-8,n2-standard-8,c2-standard-8
REST
在 Compute Engine API 中,向 regionInstances.bulkInsert 方法發出 POST 要求。在要求主體中,請納入 instanceFlexibilityPolicy,並包含列出機器類型的 instanceSelections 項目。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
"count": COUNT,
"namePattern": "NAME_PATTERN",
"instanceProperties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"selection-1": {
"machineTypes": [
"MACHINE_TYPE_1",
"MACHINE_TYPE_2"
]
}
}
}
}
更改下列內容:
COUNT:要建立的 VM 數量NAME_PATTERN:VM 的名稱模式MACHINE_TYPE_1、MACHINE_TYPE_2:用於 VM 的機器類型IMAGE_PROJECT:包含圖片的專案IMAGE:要使用的映像檔或映像檔系列名稱PROJECT_ID:專案 IDREGION:要建立 VM 的區域
範例
POST https://compute.googleapis.com/compute/v1/projects/my-project/regions/us-central1/instances/bulkInsert
{
"count": 10,
"namePattern": "test-bulk-#",
"instanceProperties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/debian-cloud/global/images/debian-12"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"selection-1": {
"machineTypes": [
"c3-standard-8",
"n2-standard-8",
"c2-standard-8"
]
}
}
}
}
建立 VM,並按照偏好順序排列多個機型
如要讓 Compute Engine 依特定順序選擇機器類型,可以設定多個執行個體選項。每個執行個體選項都包含機型清單和等級 (定義機型偏好的整數)。排名越低,偏好程度越高。 Compute Engine 會嘗試使用偏好順序較高 (排名較低) 的機器類型建立 VM。如果這些機器類型無法使用,Compute Engine 會使用偏好程度較低的機器類型 (排名較高)。
下列範例說明如何使用等級指定多個執行個體選項。
gcloud
如要使用多個執行個體選項大量建立 VM,請使用 gcloud compute instances bulk create 指令,並多次指定 --instance-selection 旗標。
gcloud compute instances bulk create \
--name-pattern=NAME_PATTERN \
--region=REGION \
--count=COUNT \
--instance-selection "name=INSTANCE_SELECTION_1,rank=0,machine-type=MACHINE_TYPE_1,machine-type=MACHINE_TYPE_2" \
--instance-selection "name=INSTANCE_SELECTION_2,rank=1,machine-type=MACHINE_TYPE_3,machine-type=MACHINE_TYPE_4"
更改下列內容:
COUNT:要建立的 VM 數量NAME_PATTERN:VM 的名稱模式INSTANCE_SELECTION_1:第一個執行個體選取的名稱INSTANCE_SELECTION_2:第二個執行個體選取項的名稱MACHINE_TYPE_1、MACHINE_TYPE_2:第一個執行個體選取的機器類型MACHINE_TYPE_3、MACHINE_TYPE_4:第二個執行個體選取的機器類型REGION:要建立 VM 的區域
範例
gcloud compute instances bulk create \
--name-pattern=test-bulk-# \
--region=us-central1 \
--count=10 \
--instance-selection "name=most-preferred,rank=0,machine-type=c3-standard-16,machine-type=n2-standard-16, machine-type=c2-standard-16" \
--instance-selection "name=least-preferred,rank=1,machine-type=c3-standard-8,machine-type=n2-standard-8, machine-type=c2-standard-8"
REST
在 Compute Engine API 中,向 regionInstances.bulkInsert 方法發出 POST 要求。在要求主體中加入 instanceFlexibilityPolicy,並在 instanceSelections 中指定多個項目,每個項目都包含機器類型清單和 rank。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
"count": COUNT,
"namePattern": "NAME_PATTERN",
"instanceProperties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"INSTANCE_SELECTION_1": {
"machineTypes": [
"MACHINE_TYPE_1",
"MACHINE_TYPE_2"
],
"rank": 1
},
"INSTANCE_SELECTION_2": {
"machineTypes": [
"MACHINE_TYPE_3",
"MACHINE_TYPE_4"
],
"rank": 2
}
}
}
}
更改下列內容:
COUNT:要建立的 VM 數量NAME_PATTERN:VM 的命名模式INSTANCE_SELECTION_1:第一個執行個體選取的名稱INSTANCE_SELECTION_2:第二個執行個體選取項的名稱MACHINE_TYPE_1、MACHINE_TYPE_2:第一個執行個體選取的機器類型MACHINE_TYPE_3、MACHINE_TYPE_4:第二個執行個體選取的機器類型IMAGE_PROJECT:包含圖片的專案IMAGE:要使用的映像檔或映像檔系列名稱PROJECT_ID:專案 IDREGION:要建立 VM 的區域
範例
POST https://compute.googleapis.com/compute/v1/projects/my-project/regions/us-central1/instances/bulkInsert
{
"count": 10,
"namePattern": "test-bulk-#",
"instanceProperties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/debian-cloud/global/images/debian-12"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"most-preferred": {
"machineTypes": [
"c3-standard-16",
"c2-standard-16"
],
"rank": 1
},
"least-preferred": {
"machineTypes": [
"n2-standard-16",
"c3-standard-8",
"n2-standard-8",
"c2-standard-8"
],
"rank": 2
}
}
}
}
在選取的執行個體中指定磁碟覆寫
根據預設,大量要求建立的 VM 會使用 instanceProperties 中的磁碟設定。不過,您可以在執行個體選取範圍內指定磁碟設定。如果您在執行個體選取項目中指定磁碟,該磁碟設定會覆寫 instanceProperties 中使用該執行個體選取項目的 VM 磁碟設定。
以下範例說明如何在執行個體選取項目中指定磁碟。
REST
在 Compute Engine API 中,向 regionInstances.bulkInsert 方法發出 POST 要求。在要求主體中加入 instanceFlexibilityPolicy,並為任何 instanceSelections 項目加入 disks 欄位,以覆寫 instanceProperties.disks。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
"count": COUNT,
"namePattern": "NAME_PATTERN",
"instanceProperties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"INSTANCE_SELECTION_1": {
"machineTypes": [
"MACHINE_TYPE_1",
"MACHINE_TYPE_2"
],
"disks": [
{
"type": "PERSISTENT",
"initializeParams": {
"diskType": "pd-ssd",
"diskSizeGb": 50,
"sourceImage": "projects/IMAGE_PROJECT_1/global/images/IMAGE_1"
},
"boot": true
},
{
"type": "SCRATCH",
"initializeParams": {
"diskType": "local-ssd"
}
}
]
},
"INSTANCE_SELECTION_2": {
"machineTypes": [
"MACHINE_TYPE_3"
],
"disks": [
{
"type": "PERSISTENT",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 50,
"sourceImage": "projects/IMAGE_PROJECT_2/global/images/IMAGE_2"
},
"boot": true
},
{
"type": "PERSISTENT",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 128,
"sourceImage": "projects/IMAGE_PROJECT_3/global/images/IMAGE_1"
}
}
]
}
}
}
}
更改下列內容:
COUNT:要建立的 VM 數量NAME_PATTERN:VM 的命名模式INSTANCE_SELECTION_1:第一個執行個體選取的名稱INSTANCE_SELECTION_2:第二個執行個體選取項的名稱MACHINE_TYPE_1、MACHINE_TYPE_2、MACHINE_TYPE_3:用於 VM 的機型IMAGE_PROJECT:包含圖片的專案IMAGE:要使用的映像檔或映像檔系列名稱PROJECT_ID:專案 IDREGION:要建立 VM 的區域