啟動及停止 VM

您可以停止、啟動及重新啟動 VM,以支援應用程式的生命週期。舉例來說,您可能想變更指派的虛擬中央處理單元 (vCPU) 數量,或是分配給 VM 的記憶體量。您必須先停止 VM,才能編輯設定。完成後,您必須切換電源狀態,變更才會生效。本頁面提供相關操作說明,說明如何在這些程序中停止、啟動及重新啟動 VM。

事前準備

如要使用 gdcloud 指令列介面 (CLI) 指令,請務必下載、安裝及設定 gdcloud CLI。Distributed Cloud 的所有指令都使用 gdcloudkubectl CLI,且需要作業系統 (OS) 環境。

取得 kubeconfig 檔案路徑

如要對 Management API 伺服器執行指令,請確認您具備下列資源:

  1. 登入並產生 Management API 伺服器的 kubeconfig 檔案 (如果沒有)。

  2. 使用 Management API 伺服器的 kubeconfig 檔案路徑,取代這些操作說明中的 MANAGEMENT_API_SERVER

如要盡量縮短 VM 啟動時間,請先按照「盡量縮短 VM 啟動時間 」一文中的指示操作,再啟動 VM。

要求權限和存取權

如要執行本頁列出的工作,您必須具備專案虛擬機器管理員角色。請按照步驟驗證,或請專案 IAM 管理員在 VM 所在的專案命名空間中指派專案 VirtualMachine 管理員 (project-vm-admin) 角色給您。

如要使用 GDC 控制台或 gdcloud CLI 執行 VM 作業,請要求專案 IAM 管理員指派專案 VirtualMachine 管理員角色和專案檢視者 (project-viewer) 角色。xs

停止 VM

停止虛擬機器 (VM) 時,管理程序會取消分配與執行個體相關的所有資源。VM 已關機。

使用 GDC 控制台或 kubectl 停止處於執行狀態的 VM。

主控台

  1. 在導覽選單中,依序點選「Virtual Machines」>「Instances」

  2. 在 VM 清單中,找到要停止的執行中 VM,然後勾選對應的核取方塊。

  3. 按一下「停止」

  4. 在確認對話方塊中,按一下「停止」

gdcloud

如要停止 VM:

gdcloud compute instances stop VM_NAME --project PROJECT
  • VM_NAME 替換為 VM 名稱。
  • PROJECT 替換為 VM 所在的 GDC 專案名稱。

kubectl

  1. 執行下列指令:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG \
       edit virtualmachines.virtualmachine.gdc.goog VM_NAME \
       -n PROJECT
    
  2. 在 VM 的 spec 中尋找 runningState 欄位,然後將欄位值變更為 Stopped。如果 runningState 不在 spec 中,請將 runningState 新增至 spec,並將值設為 Stopped

    spec:
       runningState: Stopped
    
  3. 確認 VM 的狀態:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG \
       get virtualmachines.virtualmachine.gdc.goog VM_NAME \
       -n PROJECT
    

    請使用這些定義來設定上述變數

    變數定義
    MANAGEMENT_API_SERVER_KUBECONFIG管理 API 伺服器 kubeconfig 檔案。
    VM_NAMEVM 名稱。
    PROJECT虛擬機的專案名稱。

啟動 VM

使用控制台或 kubectl 從停止狀態啟動 VM。

主控台

  1. 在導覽選單中,依序點選「Virtual Machines」>「Instances」

  2. 在 VM 清單中,選取要啟動的已停止 VM 核取方塊。

  3. 按一下「啟動」

  4. 在確認對話方塊中,按一下「開始」

gdcloud

如要啟動 VM:

gdcloud compute instances start VM_NAME --project PROJECT
  • VM_NAME 替換為 VM 名稱。
  • PROJECT 替換為 VM 所在的 GDC 專案名稱。

kubectl

  1. 執行下列指令:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG \ 
       edit virtualmachines.virtualmachine.gdc.goog VM_NAME \ 
       -n PROJECT
    
  2. 在 VM 的 spec 中尋找 runningState 欄位,然後將欄位值變更為 Running

    spec:
       runningState: Running
    
  3. 確認 VM 狀態:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG \
       get virtualmachines.virtualmachine.gdc.goog VM_NAME \
       -n PROJECT
    

    請在範例程式碼中使用這些變數定義

    變數定義
    MANAGEMENT_API_SERVER_KUBECONFIG管理 API 伺服器 kubeconfig 檔案。
    MANAGEMENT_API_SERVER_NAME管理 API 伺服器的名稱。
    NAMESPACEVM 命名空間。
    VM_NAMEVM 名稱。
    PROJECT虛擬機的專案名稱。

重新啟動 VM

重新啟動 VM 時,機器會重設為初始狀態,並抹除機器的記憶體內容。

使用控制台或 kubectl 重新啟動處於執行狀態的 VM。

主控台

  1. 在導覽選單中,依序點選「Virtual Machines」>「Instances」

  2. 在 VM 清單中,選取要重新啟動的執行中 VM 核取方塊。

  3. 按一下「重設」

  4. 按一下確認對話方塊中的「重設」

gdcloud

如要重設 VM:

gdcloud compute instances reset VM_NAME --project PROJECT
  • VM_NAME 替換為 VM 名稱。
  • PROJECT 替換為 VM 所在的 GDC 專案名稱。

kubectl

  1. 取得用戶端憑證和金鑰資料,以及 Management API 伺服器。在後續步驟中使用這些值:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG config view --raw -o \
       jsonpath='{.users[?(@.name =="MANAGEMENT_API_SERVER_NAME-admin")].user.client-certificate-data}' | \
       base64 -d > cert
    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG config view --raw -o \
       jsonpath='{.users[?(@.name == "MANAGEMENT_API_SERVER_NAME-admin")].user.client-key-data}' | \
       base64 -d > key
    export APISERVER=`kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG \
       config view --raw -o \
       jsonpath='{.clusters[?(@.name == "MANAGEMENT_API_SERVER_NAME")].cluster.server}'`
    
  2. 使用 wget 指令提出 API 要求,重新啟動 VM,並指定上一步中的憑證和金鑰:

    wget --method=PUT -O- --no-check-certificate --certificate cert --private-key key --content-on-error=on $APISERVER/apis/virtualmachineoperations.gdc.goog/v1/namespaces/PROJECT/virtualmachines/VM_NAME/restart
    
  3. 確認 VM 狀態:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG \
       get virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT
    

    在範例程式碼中使用這些變數定義

    變數定義
    MANAGEMENT_API_SERVER_KUBECONFIG管理 API 伺服器 kubeconfig 檔案。
    MANAGEMENT_API_SERVER_NAME管理 API 伺服器的名稱。
    NAMESPACEVM 命名空間。
    VM_NAMEVM 名稱。
    PROJECT虛擬機的專案名稱。