啟動及停止 VM

本文說明如何在 Google Distributed Cloud (GDC) Air-gapped 中啟動、停止及重新啟動虛擬機器 (VM) 執行個體。

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

本文適用於平台管理員或應用程式作業人員群組的開發人員,這類人員需要在 Distributed Cloud 環境中啟動、停止及重新啟動 VM 執行個體。詳情請參閱 GDC 氣隙環境適用的目標對象說明文件

事前準備

如要使用 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 角色

請與專案 IAM 管理員聯絡,要求對方授予您專案的下列角色:

  • 虛擬機器專案管理員 (project-vm-admin):在專案命名空間中建立、修改、列出及刪除 VM。

  • 專案檢視者(project-viewer):查看專案命名空間中的所有資源。

所有 VM 角色都必須繫結至 VM 所在的專案命名空間。 按照步驟驗證存取權。

停止 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 \
       -n PROJECT \
       edit virtualmachines.virtualmachine.gdc.goog VM_NAME
    
  2. 在 VM 的 spec 中尋找 runningState 欄位,然後將欄位值變更為 Stopped。如果 runningState 不在 spec 中,請將 runningState 新增至 spec,並將值設為 Stopped

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

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

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

    變數定義
    MANAGEMENT_API_SERVER_KUBECONFIGManagement 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 \
      -n PROJECT \
      edit virtualmachines.virtualmachine.gdc.goog VM_NAME
    
  2. 在 VM 的 spec 中尋找 runningState 欄位,然後將該欄位的值變更為 Running

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

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

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

    變數定義
    MANAGEMENT_API_SERVER_KUBECONFIGManagement API 伺服器 kubeconfig 檔案。
    MANAGEMENT_API_SERVER_NAME管理 API 伺服器的名稱。
    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 \
      -n PROJECT \
      get virtualmachines.virtualmachine.gdc.goog VM_NAME
    

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

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