建立單一用戶群節點

單一用戶群節點是實體伺服器,專門託管特定專案中的 VM 執行個體。只要在單一用戶群節點上託管 VM,即可確保您的 VM 執行個體不會與其他專案的 VM 執行個體共用實體硬體。如要進一步瞭解單一用戶群節點的運作方式,請參閱單一用戶群節點總覽頁面。

節點隸屬於您建立的節點群組。單一節點群組可以包含各種大小的多個執行個體,全部都與其他專案隔離開來。您可以設定節點相依性,以確保 VM 執行個體會在特定節點群組中運作。

請參閱單一用戶群節點計價方式一文,瞭解單一用戶群節點的計價與折扣方式。

事前準備

限制

建立及使用個別用戶群節點之前,請先參閱個別用戶群節點總覽中的限制一節。

建立與使用個別用戶群節點

如要在個別用戶群節點上建立執行個體,一般而言需按照下列程序操作:

  1. 建立節點範本,並指定節點類型或 vCPUC 以及記憶體需求。除此之外,也需指定地區以及選用的節點相依性標籤。建立 VM 時,您可以指定 VM 只在符合節點相依性標籤的節點上運作。
  2. 使用該範本以一或多個單一用戶群節點來建立節點群組。當您不再需要節點時,可以將節點數減少為零。
  3. 在節點群組上建立執行個體:
    • 使用任一預先定義的機器類型或自訂機器類型,在節點群組上建立個別的 VM 執行個體。該機器類型必須具有兩個以上的 vCPU。
    • 使用執行個體範本,在節點群組上建立代管執行個體群組。雖然自動配置器可以控制節點上代管執行個體群組的大小,但無法控制節點群組的大小。

建立節點群組和執行個體

建立節點範本,為節點群組中的節點定義屬性。建立範本後,請使用該範本建立一或多個節點群組,然後在節點群組上建立新的執行個體。

主控台

使用 Google Cloud Platform Console 建立節點及其執行個體:

  1. 前往個別用戶群節點頁面。

    前往個別用戶群節點頁面

  2. 按一下 [Create node template] (建立節點範本) 開始建立節點範本。
  3. 指定您要執行節點群組的地區。
  4. 指定您想讓節點群組使用的節點類型。您也可以指定最小可用節點,這可讓節點群組在任何可用節點類型上執行。
  5. 選擇性地新增節點相依性標籤,定義哪些執行個體會自動將其本身排程到節點群組。如果您將相依性標籤保留空白,仍可於稍後按節點群組名稱或個別節點名稱,將執行個體排程到節點群組。
  6. 按一下 [Create] (建立),完成建立節點範本。

使用節點範本建立節點群組。

  1. 前往個別用戶群節點頁面。

    前往個別用戶群節點頁面

  2. 按一下 [Create node group] (建立節點群組) 開始建立節點群組。
  3. 指定您要執行節點群組的區域。您必須在相同地區中擁有節點範本。
  4. 指定您要使用的節點範本。
  5. 指定您要在群組中執行的節點數。您可於稍後變更此數值。
  6. 按一下 [Create] (建立),完成建立節點群組。

建立在節點群組內或特定節點上執行的執行個體。如果您使用特定節點相依性標籤,可使用一般程序建立執行個體,並在「Sole Tenancy」(單獨租用) 設定下指定節點相依性。在這個範例中,您將直接在節點群組詳細資料頁面中建立執行個體。

  1. 前往個別用戶群節點頁面。

    前往個別用戶群節點頁面

  2. 按一下您要在其中建立執行個體之節點群組的名稱。
  3. 按一下 [Create instance] (建立執行個體),在此節點群組的任何位置建立執行個體。如果您想讓執行個體在群組的特定節點上執行,請按一下此群組中個別節點的名稱,查看該個別節點的詳細資料。然後,按一下 [Create instance] (建立執行個體),在該個別節點上建立執行個體。
  4. 設定執行個體。由於您已選取節點群組或特定節點,因此,系統已為您指定地區、區域和預設節點相依性標籤。
  5. 按一下 [Create] (建立),完成建立執行個體。

gcloud

使用 gcloud 指令列工具來建立節點及其執行個體:

  1. 使用 compute sole-tenancy node-types list 指令來識別您可以使用的節點類型:

    gcloud compute sole-tenancy node-types list
    

    Compute Engine 會定期將舊的節點類型更換為新的。更換節點類型時,即無法使用舊的節點類型來建立節點群組。必須更新節點範本才能使用新的節點類型,

  2. 使用 compute sole-tenancy node-templates create 指令來建立新的節點範本。由於可用的節點類型清單可能會隨著時間而變更,因此,請設定您的節點範本以使用彈性節點類型需求。舉例來說,請指定 --node-requirements vCPU=any,memory=any,localSSD=0,讓節點在無本機 SSD 容量的情況下,在任一可用的節點類型上運作。

    gcloud compute sole-tenancy node-templates create [TEMPLATE_NAME] \
        --region [REGION] --node-requirements vCPU=any,memory=any,localSSD=0
    

    其中:

    • [TEMPLATE_NAME] 是新節點範本的名稱。
    • [REGION] 是您日後使用此範本的所在區域。

    您也可以在範本中選取特定的節點類型來使用。此範本較無彈性,但可確保能根據您確切的 vCPU 及記憶體需求來建立節點。

     gcloud compute sole-tenancy node-templates create [TEMPLATE_NAME] \
         --node-type [NODE_TYPE] --region [REGION]
    

    其中:

    • [TEMPLATE_NAME] 是新節點範本的名稱。
    • [NODE_TYPE] 是您想用於此範本的節點類型。例如,您可以指定 n1-node-96-624 節點類型建立具有 96 個 vCPU 和 624 GB 記憶體的節點。
    • [REGION] 是您日後使用此範本的所在區域。
  3. 建立節點範本後,請建立節點群組。 請使用 compute sole-tenancy node-groups create 指令:

    gcloud compute sole-tenancy node-groups create [GROUP_NAME] --zone [ZONE] \
        --node-template [TEMPLATE_NAME] --target-size [TARGET_SIZE]
    

    其中:

    • [GROUP_NAME] 是新節點群組的名稱。
    • [ZONE] 是此節點群組的所在區域。所在區域必須與您使用的節點範本所在區域相同。
    • [TEMPLATE_NAME] 是您想用於建立此群組的節點範本的名稱。
    • [TARGET_SIZE] 是您想在此群組建立的節點數。
  4. 建立節點群組後,您可以在節點群組中使用 compute instances create 指令來建立執行個體。指定 --node-group 標記來指出您的節點群組名稱。舉例來說,您可以使用自訂機器類型來建立執行個體:

    gcloud compute instances create [INSTANCE_NAME] --zone [ZONE] \
        --image-family [IMAGE_FAMILY] --image-project [IMAGE_PROJECT] \
        --node-group [GROUP_NAME] --custom-cpu [VCPUS] --custom-memory [MEMORY]
    

    其中:

    • [INSTANCE_NAME] 是新執行個體的名稱。
    • [ZONE] 是您節點群組的所在區域。
    • [IMAGE_FAMILY] 是其中一個可用映像檔系列
    • [IMAGE_PROJECT] 是映像檔系列所屬的映像檔專案
    • [GROUP_NAME] 是您想在其中尋找此執行個體的節點群組的名稱。
    • [VCPUS] 是您想要與此執行個體搭配使用的 vCPU 數。
    • [MEMORY] 是執行個體的記憶體量,以 256 MB 為單位遞增。舉例來說,您可以指定 5.25GB5376MB

    您也可以在節點群組中建立代管執行個體群組。使用 instance-templates create 指令來建立執行個體範本,並加入 --node-group 標記來指出您的節點群組名稱:

    gcloud compute instance-templates create [INSTANCE_TEMPLATE] \
        --image-family [IMAGE_FAMILY] --image-project [IMAGE_PROJECT] \
        --node-group [GROUP_NAME] \
        --custom-cpu [VCPUS] --custom-memory [MEMORY]
    

    其中:

    • [INSTANCE_TEMPLATE] 是新執行個體範本的名稱。
    • [IMAGE_FAMILY] 是其中一個可用映像檔系列
    • [IMAGE_PROJECT] 是映像檔系列所屬的映像檔專案
    • [GROUP_NAME] 是您想在其中尋找此執行個體的節點群組的名稱。
    • [VCPUS] 是您想要與此執行個體搭配使用的 vCPU 數。
    • [MEMORY] 是執行個體的記憶體量,以 256 MB 為單位遞增。舉例來說,您可以指定 5.25GB5376MB

    使用 compute instance-groups managed create 指令來建立執行個體群組:

    gcloud compute instance-groups managed create [INSTANCE_GROUP_NAME] \
        --zone [ZONE] --size [SIZE] --template [INSTANCE_TEMPLATE]
    

    其中:

    • [INSTANCE_GROUP_NAME] 是此執行個體的名稱。
    • [SIZE] 是您想加進此執行個體的 VM 執行個體數。您的節點群組必須具備足夠的資源,才能在代管執行個體群組中容納執行個體。
    • [INSTANCE_TEMPLATE] 是您想用於建立此群組的執行個體範本的名稱。此範本必須具備能夠指出所需節點群組的節點相依性標籤。
    • [ZONE] 是您節點群組的所在區域。

API

Compute Engine API 中使用下列方式建立節點及其執行個體:

  1. 在 API 中,建構 GET 要求以使用 compute.nodetypes.list 方式擷取可用的節點類型清單:

    GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/nodeTypes
    

    其中:

    • [PROJECT_ID] 是您的專案 ID。
    • [ZONE] 是您想從中擷取可用節點類型的區域。
  2. 建構 POST 要求以使用 compute.nodetemplates.insert 方式建立新的節點範本。如要取得最大彈性,請將 nodeTypeFlexibility 屬性中 cpusmemory 的值設為 any,讓節點在無本機 SSD 容量的情況下,在任一可用的節點類型上運作。

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/nodeTemplates
    
    {
     "name": "[TEMPLATE_NAME]",
     "nodeTypeFlexibility": {
      "cpus": "any",
      "memory": "any"
     }
    }
    

    其中:

    • [PROJECT_ID] 是您的專案 ID。
    • [REGION] 是您想從中擷取可用節點類型的區域。
    • [TEMPLATE_NAME] 是新節點範本的名稱。

    您也可以在範本中選取特定的節點類型來使用。此範本較無彈性,但可確保能根據您確切的 vCPU 及記憶體需求來建立節點。

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/nodeTemplates
    
    {
     "name": "[TEMPLATE_NAME]",
     "nodeType": "[NODE_TYPE]"
    }
    

    其中:

    • [PROJECT_ID] 是您的專案 ID。
    • [TEMPLATE_NAME] 是新節點範本的名稱。
    • [NODE_TYPE] 是您想用於此範本的節點類型。例如,您可以指定 n1-node-96-624 節點類型建立具有 96 個 vCPU 和 624 GB 記憶體的節點。
    • [REGION] 是您日後使用此範本的所在區域。
  3. 建立節點範本後,請建立節點群組。請使用 compute.nodeGroups.insert 方式:

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/nodeGroups?initialNodeCount=[TARGET_SIZE]
    
    {
     "nodeTemplate": "regions/[REGION]/nodeTemplates/[TEMPLATE_NAME]",
     "name": "[GROUP_NAME]"
    }
    

    其中:

    • [PROJECT_ID] 是您的專案 ID。
    • [ZONE] 是此節點群組的所在區域。所在區域必須與您使用的節點範本所在區域相同。
    • [TARGET_SIZE] 是您想在此群組建立的節點數。
    • [REGION] 是節點範本的所在區域。
    • [TEMPLATE_NAME] 是新節點範本的名稱。
    • [GROUP_NAME] 是新節點群組的名稱。
    • [TEMPLATE_NAME] 是您想用於建立此群組的節點範本的名稱。
  4. 建立節點群組後,您可以在節點群組中使用 compute.instances.insert 方法來建立執行個體。請指定 nodeAffinities 項目來指出您的節點群組名稱。舉例來說,您可以使用自訂機器類型來建立執行個體:

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances
    
    {
     "machineType": "zones/[ZONE]/machineTypes/custom-[VCPUS]-[MEMORY]",
     "name": "[INSTANCE_NAME]",
     "scheduling": {
      "nodeAffinities": [
       {
        "key": "compute.googleapis.com/node-group-name",
        "operator": "IN",
        "values": [
         "[GROUP_NAME]"
        ]
       }
      ]
     },
     "networkInterfaces": [
      {
       "network": "global/networks/[NETWORK]",
       "subnetwork": "regions/[REGION]/subnetworks/[SUBNETWORK]"
      }
     ],
     "disks": [
      {
       "boot": true,
       "initializeParams": {
        "sourceImage": "projects/[IMAGE_PROJECT]/global/images/family/[IMAGE_FAMILY]"
       }
      }
     ]
    }
    

    其中:

    • [PROJECT_ID] 是您的專案 ID。
    • [INSTANCE_NAME] 是新執行個體的名稱。
    • [ZONE] 是您節點群組的所在區域。
    • [REGION] 是節點範本與您子網路的所在區域。
    • [IMAGE_FAMILY] 是其中一個可用映像檔系列
    • [IMAGE_PROJECT] 是映像檔系列所屬的映像檔專案
    • [GROUP_NAME] 是您想在其中尋找此執行個體的節點群組的名稱。
    • [VCPUS] 是您想要與此執行個體搭配使用的 vCPU 數。
    • [MEMORY] 是執行個體的記憶體量,以 MB 為單位。舉例來說,您可以指定 5376MB
    • [NETWORK] 是您想與執行個體連線的網路名稱。
    • [SUBNETWORK] 是您的執行個體要連線的子網路名稱。

    您也可以在節點群組中建立代管執行個體群組。使用 compute.instanceTemplates.insert 方法來建立執行個體範本,並指定 nodeAffinities 項目來指出您的節點群組名稱:

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instance-templates
    
    {
    "name": "[TEMPLATE_NAME]",
    "properties": {
       "machineType": "custom-[VCPUS]-[MEMORY]",
       "name": "[INSTANCE_NAME]",
       "scheduling": {
        "nodeAffinities": [
         {
          "key": "compute.googleapis.com/node-group-name",
          "operator": "IN",
          "values": [
           "[GROUP_NAME]"
          ]
         }
        ]
       },
       "networkInterfaces": [
        {
         "network": "global/networks/[NETWORK]",
         "subnetwork": "regions/[REGION]/subnetworks/[SUBNETWORK]"
        }
       ],
       "disks": [
        {
         "boot": true,
         "initializeParams": {
          "sourceImage": "projects/[IMAGE_PROJECT]/global/images/family/[IMAGE_FAMILY]"
         }
        }
       ]
      }
    }
    

    其中:

    • [PROJECT_ID] 是您的專案 ID。
    • [INSTANCE_NAME] 是新執行個體的名稱。
    • [ZONE] 是您節點群組的所在區域。
    • [REGION] 是節點範本與您子網路的所在區域。
    • [TEMPLATE_NAME] 是新執行個體範本的名稱。
    • [IMAGE_FAMILY] 是其中一個可用映像檔系列
    • [IMAGE_PROJECT] 是映像檔系列所屬的映像檔專案
    • [GROUP_NAME] 是您想在其中尋找此執行個體的節點群組的名稱。
    • [VCPUS] 是您想要與此執行個體搭配使用的 vCPU 數。
    • [MEMORY] 是執行個體的記憶體量,以 MB 為單位。舉例來說,您可以指定 5376MB
    • [NETWORK] 是您想與執行個體連線的網路名稱。
    • [SUBNETWORK] 是您的執行個體要連線的子網路名稱。

    使用 compute.instanceGroupManagers.insert 方法來建立執行個體群組:

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers
    
    {
     "baseInstanceName": "default",
     "name": "[INSTANCE_GROUP_NAME]",
     "targetSize": [SIZE],
     "instanceTemplate": "global/instanceTemplates/[INSTANCE_TEMPLATE]"
    }
    

    其中:

    • [PROJECT_ID] 是您的專案 ID。
    • [ZONE] 是您節點群組的所在區域。
    • [INSTANCE_GROUP_NAME] 是此執行個體的名稱。
    • [BASE_INSTANCE_NAME] 是在您的代管執行個體群組中,每個執行個體的前置字串名稱。
    • [SIZE] 是您想加進此執行個體的 VM 執行個體數。您的節點群組必須具備足夠的資源,才能在代管執行個體群組中容納執行個體。
    • [INSTANCE_TEMPLATE] 是您想用於建立此群組的執行個體範本的名稱。此範本必須具備能夠指出所需節點群組的節點相依性標籤。

單一用戶群節點選項

以下列出您可為節點範本指定的其他選項。

最少部伺服器的重新啟動選項

設定這個選項可指定在發生維護事件時,這個節點群組中的 VM 會盡可能在同一部實體伺服器上重新啟動。如果無法使用同一部實體伺服器,系統將會建立新的實體伺服器,並將其新增至節點群組。

這與節點相依性標籤不同,原因在於這個選項只會確保系統會在具有特定標籤的節點上建立特定 VM;對於在該節點群組生命週期內是否維持使用同一部基礎實體伺服器,則不會產生任何影響。

如何指定這個選項:

主控台

在「Create a node template」(建立節點範本) 頁面上,展開 [Advanced node restart configuration] (進階節點重新啟動設定) 並選取 [Minimal servers] (最少部伺服器)。

gcloud

建立節點範本時,使用 gcloud 工具指定 --server-binding restart-node-on-minimal-servers 標記。

API

直接發出 HTTP 要求時提供 serverBinding 物件,並在要求中指定 type: restart-node-on-minimal-servers 字串以建立節點範本:

{
  "serverBinding":
    {
      "type": "RESTART_NODE_ON_MINIMAL_SERVERS"
    }
}

設定節點相依性

您可以設定節點相依性或反相依性,以決定執行個體和代管執行個體群組要使用哪些節點做為託管系統。設定節點相依性時,您必須明確選擇哪些單一用戶群節點託管哪些 VM。

根據預設,系統會為每個節點指派下列相依性標籤:

  • 群組中的每個節點都具有與節點群組名稱相符的相依性標籤:
    • 金鑰:compute.googleapis.com/node-group-name
    • 值:節點群組的名稱。
  • 每個節點都具有符合該節點名稱的相依性標籤。節點名稱會自動產生:
    • 金鑰:compute.googleapis.com/node-name
    • 值:個別節點的名稱。

您可以設定其他相依性或反相依性標籤,讓執行個體僅在指定節點群組上運作,或者只與具有相同相依性的執行個體共用節點。如此就能將機密資料集中保存在特定的節點群組上,並與在 Compute Engine 上運作的其他節點群組和 VM 執行個體隔離開來。

舉例來說,假設您想建立一個用於開發的節點群組,以及另一個用於實際工作環境工作負載的節點群組,您可以按照下列程序操作:

  1. 建立兩個具有不同標籤的節點範本:workload=frontend,environment=prodworkload=frontend,environment=devworkload 標籤代表這些節點群組用於 frontend 工作負載。environment 標籤則用於區分 prod 環境與 dev 環境:

    gcloud compute sole-tenancy node-templates create production-template \
       --node-requirements vCPU=any,memory=any,localSSD=0 --node-affinity-labels workload=frontend,environment=prod
    
    gcloud compute sole-tenancy node-templates create development-template \
       --node-requirements vCPU=any,memory=any,localSSD=0 --node-affinity-labels workload=frontend,environment=dev
    
  2. 使用實際工作環境與開發範本來建立數個節點群組。舉例來說,你可以同時擁有一個大的實際工作環境節點群組,以及數個較小的開發節點群組。您可以在不同的區域中,以不同的目標大小建立這些群組,來因應工作負載的規模。

    gcloud compute sole-tenancy node-groups create production-group \
        --node-template production-template --target-size 5 --zones us-west1-b
    
    gcloud compute sole-tenancy node-groups create development-group-east1 \
        --node-template development-template --target-size 1 --zones us-east1-d
    
    gcloud compute sole-tenancy node-groups create development-group-east2 \
        --node-template development-template --target-size 1 --zones us-east1-d
    
  3. 對於實際工作環境執行個體,請建立 node-affinity-prod.json 檔案,以更清楚地說明您希望在實際工作環境執行個體上運作相依性的方式。舉例來說,您可以建立檔案來指示執行個體只在具有 workload=frontendenvironment=prod 相依性的節點上運作。

    [{
    "key" : "workload",
    "operator" : "IN",
    "values" : ["frontend"]
    },
    {
    "key" : "environment",
    "operator" : "IN",
    "values" : ["prod"]
    }
    ]
    
  4. 使用 node-affinity-prod.json 檔案來建立執行個體範本,其中具有您希望實際工作環境 VM 執行個體要使用的屬性:

    gcloud compute instance-templates create production-template \
        --image-family production-images --image-project my-project \
        --node-affinity-file node-affinity-prod.json \
        --custom-cpu 3 --custom-memory 4096
    
  5. 使用在實際工作環境節點上運作的實際工作環境範本來啟動執行個體群組:

    gcloud compute instance-groups managed create production-group \
        --zone us-west1-b --size 4 --template production-template
    

    群組中的執行個體會啟動,並只在具有 workload=frontendenvironment=prod 相依性的節點群組中運作。

設定反相依性標籤

上方範例說明了如何使用相依性標籤。您也可以利用反相依性標籤,確保 VM 不會在具有特定標籤的節點上運作。假設除了您已在上方建立的實際工作環境 VM 執行個體之外,您還想建立一些提供開發用途的 VM 執行個體,但不需要將它們託管在您託管實際工作環境執行個體的相同節點上。

  1. 對於開發執行個體,請建立 node-affinity-dev.json 檔案,以更清楚地說明您希望在開發執行個體上執行相依性的方式。舉例來說,您可以建立檔案來設定執行個體在任一具有 workload=frontend 相依性的節點群組上運作,但前提是該節點群組不具有 environment=prod

    [{
    "key" : "workload",
    "operator" : "IN",
    "values" : ["frontend"]
    },
    {
    "key" : "environment",
    "operator" : "NOT",
    "values" : ["prod"]
    }
    ]
    
  2. 如果是開發用途,您可以建立個別執行個體來進行測試,而不需建立整個執行個體群組。使用 node-affinity-dev.json 檔案來建立該執行個體。舉例來說,如果您想要測試名為 development-image-1 的特定開發映像檔,請建立執行個體,並以下列指令為其設定相依性:

    gcloud compute instances create dev-1 \
        --image development-image-1 --image-project my-project \
        --node-affinity-file node-affinity-dev.json \
        --custom-cpu 3 --custom-memory 4096 --zone us-east1-d
    

    執行個體會啟動,並只在具有 workload=frontend 的節點群組中運作,不會在設定為具有 environment=prod 相依性的任一節點群組中運作。

若要建立自己的相依性設定,請建立節點範本,並以您的相依性金鑰與值來運作節點。接著以您的 affinity.json 檔案設定執行個體,來決定您執行個體可以運作的節點。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Compute Engine 說明文件