本文說明如何建立分散配置政策並套用至虛擬機器 (VM) 執行個體,提高執行個體的可靠性。如要進一步瞭解配置方式政策,包括限制和定價,請參閱「配置方式政策總覽」。
分散配置政策會指定執行個體應分散在不同的可用性網域。這種分布方式有助於降低特定位置中斷 (例如硬體錯誤) 的影響,在執行大規模、分散式和複製的工作負載 (例如 Hadoop 分散式檔案系統 (HDFS)、Cassandra 或 Kafka) 時非常實用。
事前準備
-
如果尚未設定驗證,請先完成設定。驗證機制會確認您的身分,以便授予 Google Cloud 服務和 API 的存取權。如要從本機開發環境執行程式碼或範例,您可以選取下列其中一個選項,向 Compute Engine 進行驗證:
請根據您打算如何使用本頁範例,選取對應的分頁標籤:
控制台
使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,您不需要設定驗證機制。
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 進行驗證」一節。
必要的角色
如要取得建立分散配置政策並套用至執行個體所需的權限,請要求管理員授予您專案的 Compute 執行個體管理員 (v1) (roles/compute.instanceAdmin.v1) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這個預先定義的角色具備建立分散配置政策,並套用至執行個體所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
您必須具備下列權限,才能建立分散配置政策並套用至執行個體:
-
如要建立配置政策,必須具備專案的
compute.resourcePolicies.create權限 -
如要將配置政策套用至現有執行個體,請在專案中執行
compute.instances.addResourcePolicies -
如要建立執行個體,請按照下列步驟操作:
- 專案的
compute.instances.create權限 - 如要使用自訂映像檔建立 VM,請在映像檔上
compute.images.useReadOnly - 如要使用快照建立 VM,請在快照上
compute.snapshots.useReadOnly - 如要使用執行個體範本建立 VM,請在執行個體範本上按一下「
compute.instanceTemplates.useReadOnly」 - 如要將舊版網路指派給 VM,請在專案中執行
compute.networks.use - 如要為 VM 指定靜態 IP 位址,請在專案中執行
compute.addresses.use - 如要在使用舊版網路時,為 VM 指派外部 IP 位址,請在專案上執行
compute.networks.useExternalIp - 如要為 VM 指定子網路:
compute.subnetworks.use專案或所選子網路 - 如要在使用虛擬私有雲網路時,為 VM 指派外部 IP 位址,請在專案或所選子網路上,指派
compute.subnetworks.useExternalIp角色 - 如要為專案中的 VM
compute.instances.setMetadata設定 VM 執行個體中繼資料,請按照下列步驟操作: - 如要設定 VM 的標記,請在 VM 上執行
compute.instances.setTags - 如要設定 VM 的標籤,請在 VM 上執行
compute.instances.setLabels - 如要設定 VM 使用的服務帳戶,請在 VM 上執行
compute.instances.setServiceAccount - 如要為 VM 建立新磁碟,請在專案中執行
compute.disks.create - 如要以唯讀或讀寫模式連接現有磁碟,請在磁碟上
compute.disks.use - 如要以唯讀模式連接現有磁碟:在磁碟上
compute.disks.useReadOnly
- 專案的
-
如要建立執行個體範本,請在專案中執行
compute.instanceTemplates.create -
如要建立代管執行個體群組 (MIG):
compute.instanceGroupManagers.create專案
建立分散配置政策
除非您想測試分散配置政策在執行個體上的套用情形,否則 Google Cloud 建議您建立具有兩個以上可用性網域的分散配置政策。這可降低所有執行個體受到單一硬體錯誤影響的風險。詳情請參閱「關於分散配置政策」。
如要建立分散配置政策,請選取下列其中一個選項:
gcloud
如要建立分散配置政策,請使用 gcloud compute resource-policies create group-placement 指令並加上 --availability-domain-count 旗標。
gcloud compute resource-policies create group-placement POLICY_NAME \
--availability-domain-count=DOMAIN_COUNT \
--region=REGION
更改下列內容:
POLICY_NAME:分散配置政策的名稱。DOMAIN_COUNT:要放置執行個體的可用性網域數量。這個值必須介於1至8之間。REGION:要建立配置政策的區域。
REST
如要建立分散配置政策,請向 resourcePolicies.insert 方法發出 POST 要求。在要求主體中加入 availabilityDomainCount 欄位。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies
{
"name": "POLICY_NAME",
"groupPlacementPolicy": {
"availabilityDomainCount": DOMAIN_COUNT
}
}
更改下列內容:
PROJECT_ID:要建立配置政策的專案 ID。REGION:要建立配置政策的區域。POLICY_NAME:分散配置政策的名稱。DOMAIN_COUNT:要放置執行個體的可用性網域數量。這個值必須介於1至8之間。
套用分散配置政策
您可以將分散配置政策套用至現有的 VM 或 MIG,或是在建立執行個體、執行個體範本或 MIG 時套用。
如要將分散配置政策套用至 Compute Engine 資源,請選取下列其中一種方法:
將分散配置政策套用至 VM 後,您可以查看 VM 的詳細資料並檢查 availabilityDomain 欄位的值,藉此驗證 VM 所在的可用性網域。
將政策套用至現有 VM
將分散配置政策套用至現有 VM 之前,請考量下列事項:
如果分散配置政策指定多個可用性網域,您可以將政策套用至 VM,而不必停止 VM。不過,VM 可能需要重新分配至其他可用性網域。在這個過程中,Compute Engine 會根據 VM 的主機維護政策,停止或即時遷移 VM。
VM 和分散配置政策必須位於相同區域。舉例來說,如果配置政策位於
us-central1區域,則 VM 必須位於us-central1的可用區。如需將 VM 遷移至其他區域,請參閱「在可用區或區域之間移動 VM」。
如要指定 VM 的可用性網域,請更新 VM 屬性,將配置政策套用至 VM。在更新要求中,加入 resourcePolicies 和 scheduling.availabilityDomain 欄位,並將 REFRESH 指定為允許的最具破壞性動作。如果之後要變更已附加分散配置政策的 VM scheduling.availabilityDomain 欄位,則必須將 RESTART 指定為允許的最中斷性動作。
如要將分散配置政策套用至現有 VM,請選取下列其中一個選項:
gcloud
如要將分散配置政策套用至現有 VM,請使用 gcloud compute instances add-resource-policies 指令。
gcloud compute instances add-resource-policies VM_NAME \
--resource-policies=POLICY_NAME \
--zone=ZONE
更改下列內容:
VM_NAME:現有 VM 的名稱。POLICY_NAME:現有分散配置政策的名稱。ZONE:VM 所在的可用區。
REST
如要將分散配置政策套用至現有 VM,請向 instances.addResourcePolicies 方法傳送 POST 要求。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/addResourcePolicies
{
"resourcePolicies": [
"projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
]
}
更改下列內容:
PROJECT_ID:分散配置政策和 VM 所在的專案 ID。ZONE:VM 所在的可用區。VM_NAME:現有 VM 的名稱。REGION:分散配置政策所在的區域。POLICY_NAME:現有分散配置政策的名稱。
在建立 VM 時套用政策
建立 VM 時,只能指定與配置政策位於相同區域的分散配置政策。
如要建立指定分散配置政策的 VM,請選取下列其中一個選項:
gcloud
如要建立指定分散配置政策的 VM,請使用 gcloud compute instances create 指令搭配 --resource-policies 旗標。
gcloud compute instances create VM_NAME \
--machine-type=MACHINE_TYPE \
--resource-policies=POLICY_NAME \
--zone=ZONE
更改下列內容:
VM_NAME:要建立的 VM 名稱。MACHINE_TYPE:VM 的機器類型。POLICY_NAME:現有分散配置政策的名稱。ZONE:建立 VM 的可用區。
如要指定建立 VM 的可用性網域,可以加入 --availability-domain 旗標。
gcloud compute instances create VM_NAME \
--availability-domain=DOMAIN_NUMBER \
--machine-type=MACHINE_TYPE \
--resource-policies=POLICY_NAME \
--zone=ZONE
將 DOMAIN_NUMBER 替換為要放置 VM 的可用性網域編號。值必須介於 1 和分散配置政策中指定的網域數量之間。如要驗證分散配置政策中的網域數量,請查看配置政策的詳細資料。
REST
如要建立指定分散配置政策的 VM,請向 instances.insert 方法發出 POST 要求。在要求主體中加入 resourcePolicies 欄位。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
"name": "VM_NAME",
"machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [
{
"network": "global/networks/default"
}
],
"resourcePolicies": [
"projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
]
}
更改下列內容:
PROJECT_ID:分散配置政策所在的專案 ID。ZONE:要建立 VM 的可用區,以及機器類型所在的可用區。您只能指定分散配置政策區域內的可用區。VM_NAME:要建立的 VM 名稱。MACHINE_TYPE:VM 的機器類型。IMAGE_PROJECT:包含映文件的映文件專案,例如debian-cloud。如要進一步瞭解支援的映像檔專案,請參閱「公開映像檔」。IMAGE:指定下列其中一項:REGION:分散配置政策所在的區域。POLICY_NAME:現有分散配置政策的名稱。
如要指定建立 VM 的可用性網域,請在要求主體中加入 availabilityDomain 欄位。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
"name": "VM_NAME",
"machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [
{
"network": "global/networks/default"
}
],
"resourcePolicies": [
"projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
],
"scheduling": {
"availabilityDomain": DOMAIN_NUMBER
}
}
將 DOMAIN_NUMBER 替換為要放置 VM 的可用性網域編號。值必須介於 1 和分散配置政策中指定的網域數量之間。如要驗證分散配置政策中的網域數量,請查看配置政策的詳細資料。
如要進一步瞭解建立 VM 的設定選項,請參閱「建立及啟動 VM 執行個體」。
在大量建立執行個體時套用政策
大量建立指定分散配置政策的執行個體前,請務必確認下列事項:
您只能在與配置政策相同的區域中,大量建立指定分散配置政策的執行個體。
使用分散配置政策大量建立執行個體時,您可以視需要指定要在哪個可用性網域建立執行個體。請避免在單一網域中建立所有執行個體。否則,您無法降低單一硬體錯誤影響所有執行個體的風險。
如要大量建立指定分散配置政策的執行個體,請選取下列其中一個選項:
gcloud
如要大量建立指定分散配置政策的執行個體,請使用 gcloud compute instances bulk create 指令搭配 --resource-policies 旗標。
舉例來說,如要在單一可用區中大量建立執行個體,並指定執行個體的名稱模式,請執行下列指令:
gcloud compute instances bulk create \
--count=COUNT \
--machine-type=MACHINE_TYPE \
--name-pattern=NAME_PATTERN \
--resource-policies=POLICY_NAME \
--zone=ZONE
更改下列內容:
COUNT:要建立的執行個體數量。MACHINE_TYPE:執行個體的機型。NAME_PATTERN:執行個體的名稱模式。如要取代 VM 名稱中的一連串數字,請使用一連串井字號 (#) 字元。舉例來說,如果使用vm-#做為名稱模式,系統會產生名稱開頭為vm-1、vm-2的執行個體,並持續產生到COUNT指定的執行個體數量。POLICY_NAME:現有分散配置政策的名稱。ZONE:要大量建立執行個體的可用區。
如要指定大量建立執行個體的可用性網域,請加入 --availability-domain 旗標。
gcloud compute instances bulk create \
--availability-domain=DOMAIN_NUMBER \
--count=COUNT \
--machine-type=MACHINE_TYPE \
--name-pattern=NAME_PATTERN \
--resource-policies=POLICY_NAME \
--zone=ZONE
將 DOMAIN_NUMBER 替換為要放置 VM 的可用性網域編號。值必須介於 1 和分散配置政策中指定的網域數量之間。如要驗證分散配置政策中的網域數量,請查看配置政策的詳細資料。
REST
如要大量建立指定分散配置政策的執行個體,請向 instances.bulkInsert 方法發出 POST。在要求主體中加入 resourcePolicies 欄位。
舉例來說,如要在單一可用區中大量建立執行個體,並為執行個體指定名稱模式,請按照下列方式提出 POST 要求:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert
{
"count": "COUNT",
"namePattern": "NAME_PATTERN",
"instanceProperties": {
"machineType": "MACHINE_TYPE",
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [
{
"network": "global/networks/default"
}
],
"resourcePolicies": [
"POLICY_NAME"
]
}
}
更改下列內容:
PROJECT_ID:分散配置政策所在的專案 ID。ZONE:要大量建立執行個體的可用區。COUNT:要建立的執行個體數量。NAME_PATTERN:執行個體的名稱模式。如要取代 VM 名稱中的一連串數字,請使用一連串井字號 (#) 字元。舉例來說,如果使用vm-#做為名稱模式,系統會產生名稱開頭為vm-1、vm-2的執行個體,並持續產生到COUNT指定的執行個體數量。MACHINE_TYPE:執行個體的機型。IMAGE_PROJECT:包含映文件的映文件專案,例如debian-cloud。如要進一步瞭解支援的映像檔專案,請參閱「公開映像檔」。IMAGE:指定下列其中一項:POLICY_NAME:現有分散配置政策的名稱。
如要指定大量建立執行個體的可用性網域,請在要求主體中加入 availabilityDomain 欄位。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert
{
"count": "COUNT",
"namePattern": "NAME_PATTERN",
"instanceProperties": {
"machineType": "MACHINE_TYPE",
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [
{
"network": "global/networks/default"
}
],
"resourcePolicies": [
"POLICY_NAME"
],
"scheduling": {
"availabilityDomain": DOMAIN_NUMBER
}
}
}
將 DOMAIN_NUMBER 替換為要放置 VM 的可用性網域編號。值必須介於 1 和分散配置政策中指定的網域數量之間。如要驗證分散配置政策中的網域數量,請查看配置政策的詳細資料。
如要進一步瞭解整批建立執行個體的設定選項,請參閱「整批建立執行個體」。
在建立執行個體範本時套用政策
建立指定分散配置政策的執行個體範本前,請先考量下列事項:
如要建立區域執行個體範本,範本和分散配置政策必須位於相同區域。否則,建立執行個體範本會失敗。
避免在單一可用性網域中建立所有執行個體。否則,您無法降低單一硬體錯誤影響所有執行個體的風險。
建立指定分散配置政策的執行個體範本後,您可以使用該範本執行下列操作:
如要建立區域性執行個體範本,以及具有八個可用性網域的新分散配置政策,請使用 Google Cloud 控制台。如要建立全域或區域執行個體範本,並指定現有的分散配置政策,請使用 gcloud CLI 或 REST API:
控制台
前往 Google Cloud 控制台的「Instance templates」(執行個體範本) 頁面。
按一下「Create instance template」(建立執行個體範本)。「Create an instance template」(建立執行個體範本) 頁面隨即顯示。
在「Region」(區域) 欄位中,指定要建立分散配置政策和執行個體範本的區域。
在「Machine configuration」(機器設定) 部分,指定機器系列和類型。
在「Placement policy」(配置政策) 區段中,選取「Placement policy」(配置政策) 清單中的「Spread」(分散)。
點選「建立」。
gcloud
如要建立指定分散配置政策的執行個體範本,請使用 gcloud compute instance-templates create 指令並加上 --resource-policies 旗標。
舉例來說,如要建立指定分散配置政策的全域執行個體範本,請執行下列指令:
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
--machine-type=MACHINE_TYPE \
--resource-policies=POLICY_NAME
更改下列內容:
INSTANCE_TEMPLATE_NAME:執行個體範本的名稱。MACHINE_TYPE:使用執行個體範本建立的執行個體機器類型。POLICY_NAME:現有分散配置政策的名稱。
如要指定建立執行個體的可用性網域,請加入 --availability-domain 旗標。
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
--availability-domain=DOMAIN_NUMBER \
--machine-type=MACHINE_TYPE \
--resource-policies=POLICY_NAME
將 DOMAIN_NUMBER 替換為要建立執行個體的可用性網域編號。這個值必須介於 1 和配置政策中指定的網域數量之間。如要驗證分散配置政策中的網域數量,請查看配置政策的詳細資料。
REST
如要建立指定分散配置政策的執行個體範本,請向下列其中一種方法發出 POST 要求:
如要建立全域執行個體範本,請使用
instanceTemplates.insert方法。如要建立區域執行個體範本,請使用
regionInstanceTemplates.insert方法。
在要求主體中指定 resourcePolicies 欄位。
舉例來說,如要建立指定分散配置政策的全域執行個體範本,請提出 POST 要求,如下所示:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates
{
"name": "INSTANCE_TEMPLATE_NAME",
"properties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"machineType": "MACHINE_TYPE",
"networkInterfaces": [
{
"network": "global/networks/default"
}
],
"resourcePolicies": [
"POLICY_NAME"
]
}
}
更改下列內容:
PROJECT_ID:分散配置政策所在的專案 ID。INSTANCE_TEMPLATE_NAME:執行個體範本的名稱。IMAGE_PROJECT:包含映文件的映文件專案,例如debian-cloud。如要進一步瞭解支援的映像檔專案,請參閱「公開映像檔」。IMAGE:指定下列其中一項:MACHINE_TYPE:使用執行個體範本建立的執行個體機器類型。POLICY_NAME:現有分散配置政策的名稱。
如要指定建立執行個體的可用性網域,請在要求主體中加入 availabilityDomain 欄位。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates
{
"name": "INSTANCE_TEMPLATE_NAME",
"properties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"machineType": "MACHINE_TYPE",
"networkInterfaces": [
{
"network": "global/networks/default"
}
],
"resourcePolicies": [
"POLICY_NAME"
],
"scheduling": {
"availabilityDomain": DOMAIN_NUMBER
}
}
}
將 DOMAIN_NUMBER 替換為要建立執行個體的可用性網域編號。這個值必須介於 1 和配置政策中指定的網域數量之間。如要驗證分散配置政策中的網域數量,請查看配置政策的詳細資料。
如要進一步瞭解建立執行個體範本的設定選項,請參閱「建立執行個體範本」。
後續步驟
瞭解如何查看配置方式政策。
瞭解如何取代、移除或刪除刊登位置政策。
瞭解如何對指定配置方式政策的 VM 執行下列操作:
進一步瞭解維護事件期間的即時遷移程序。