本文說明如何建立並套用分散式配置政策,提高虛擬機器 (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權限 - 使用舊版網路時,如要將外部 IP 位址指派給 VM,請在專案中啟用
compute.networks.useExternalIp - 為 VM 指定子網路:專案或所選子網路的
compute.subnetworks.use - 使用虛擬私有雲網路時,如要將外部 IP 位址指派給 VM,請在專案或所選子網路上擁有
compute.subnetworks.useExternalIp權限 - 如要為專案中的 VM 設定 VM 執行個體中繼資料,請執行下列指令:
compute.instances.setMetadata - 如要為 VM 設定標記:
compute.instances.setTags在 VM 上 - 如要為 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。不過,虛擬機器可能需要遷移至其他可用性網域。在此程序中,Compute Engine 會根據 VM 的主機維護政策停止或即時遷移 VM。
VM 和分散配置政策必須位於相同區域。舉例來說,如果配置方式政策位於
us-central1區域,則 VM 必須位於us-central1區域的可用區。如要將 VM 遷移至其他地區,請參閱「在區域或地區之間移動 VM」。
如要指定放置 VM 的可用性網域,請更新 VM 的屬性,將放置政策套用至 VM。更新 VM 屬性時,請務必加入 resourcePolicies 和 scheduling.availabilityDomain 欄位。
如要將分散式放置政策套用至現有 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」(執行個體範本) 頁面。
按一下「建立執行個體範本」。「建立執行個體範本」頁面隨即顯示。
在「Region」(區域) 欄位中,指定要建立分散式放置群組政策和執行個體範本的區域。
在「機器設定」部分,指定機器系列和類型。
在「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 執行下列操作:
進一步瞭解維護事件期間的即時遷移程序。