启动和停止虚拟机

本文档介绍如何在 Google Distributed Cloud (GDC) 气隙环境中启动、停止和重启虚拟机 (VM) 实例。

您可以停止、启动和重启虚拟机,以支持应用的生命周期。例如,您可能需要更改分配的虚拟中央处理器 (vCPU) 数量或分配给虚拟机的内存量。您必须先停止虚拟机,然后才能修改配置。完成后,您必须重启电源状态以应用更改。

本文档适用于平台管理员或应用运维人员组中的开发者,他们需要在 Distributed Cloud 环境中启动、停止和重启虚拟机实例。如需了解详情,请参阅 GDC 网闸隔离配置文档的受众群体

准备工作

如需使用 gdcloud 命令行界面 (CLI) 命令,请确保您已下载、安装、 并配置 gdcloud CLI。 Distributed Cloud 的所有命令都使用 gdcloudkubectl CLI,并且需要操作系统 (OS) 环境。

获取 kubeconfig 文件路径

如需针对 Management API 服务器运行命令,请确保您拥有以下资源:

  1. 如果您没有 Management API 服务器的 kubeconfig 文件,请登录并生成该文件。

  2. 使用 Management API 服务器的 kubeconfig 文件的路径替换这些说明中的 MANAGEMENT_API_SERVER

如果您想缩短虚拟机启动时间,请在启动虚拟机之前按照 缩短虚拟机启动时间 中的说明操作。

请求 IAM 角色

请与您的项目 IAM 管理员联系,以请求对您的项目使用以下角色:

  • 虚拟机项目管理员 (project-vm-admin):在项目命名空间中创建、修改、列出和删除虚拟机。

  • 项目查看者(project-viewer):查看项目命名空间中的所有资源。

所有虚拟机角色都必须绑定到虚拟机所在项目的命名空间。 请按照以下步骤验证 您的访问权限。

停止虚拟机

停止虚拟机 (VM) 后,虚拟机监控程序会取消分配与该实例关联的所有资源。虚拟机已关机。

使用 GDC 控制台或 kubectl 停止处于运行状态的虚拟机。

控制台

  1. 在导航菜单中,点击虚拟机 > 实例

  2. 在虚拟机列表中,选中要停止的正在运行的虚拟机的复选框。

  3. 点击停止

  4. 在确认对话框中,点击停止

gdcloud

如需停止虚拟机,请执行以下操作:

gdcloud compute instances stop VM_NAME \
  --project PROJECT
  • VM_NAME 替换为虚拟机名称。
  • PROJECT 替换为虚拟机所在的 GDC 项目的名称。

kubectl

  1. 运行以下命令:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG \
       -n PROJECT \
       edit virtualmachines.virtualmachine.gdc.goog VM_NAME
    
  2. 在虚拟机的 spec 中查找字段 runningState,并将该字段的值更改为 Stopped。如果 spec 中没有 runningState,请将 runningState 添加到 spec 并将值设置为 Stopped

    spec:
       runningState: Stopped
    
  3. 验证虚拟机的状态:

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

    对前面的变量使用以下定义

    变量定义
    MANAGEMENT_API_SERVER_KUBECONFIGManagement API 服务器 kubeconfig 文件。
    VM_NAME虚拟机的名称。
    PROJECT虚拟机的项目名称。

启动虚拟机

使用控制台或 kubectl 从停止状态启动虚拟机。

控制台

  1. 在导航菜单中,点击虚拟机 > 实例

  2. 在虚拟机列表中,选中要启动的已停止虚拟机的复选框。

  3. 点击启动

  4. 在确认对话框中,点击启动

gdcloud

如需启动虚拟机,请执行以下操作:

gdcloud compute instances start VM_NAME --project PROJECT
  • VM_NAME 替换为虚拟机名称。
  • PROJECT 替换为虚拟机所在的 GDC 项目的名称。

kubectl

  1. 运行以下命令:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG \
      -n PROJECT \
      edit virtualmachines.virtualmachine.gdc.goog VM_NAME
    
  2. 在虚拟机的 spec 中查找字段 runningState,并将该字段的值更改为 Running

    spec:
       runningState: Running
    
  3. 验证虚拟机状态:

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

    对示例代码中的变量使用以下定义

    变量定义
    MANAGEMENT_API_SERVER_KUBECONFIGManagement API 服务器 kubeconfig 文件。
    MANAGEMENT_API_SERVER_NAMEManagement API 服务器的名称。
    VM_NAME虚拟机的名称。
    PROJECT虚拟机的项目名称。

重启虚拟机

重启虚拟机后,机器会重置为初始状态,并且机器的内存内容会被清除。

使用控制台或 kubectl 重启处于运行状态的虚拟机。

控制台

  1. 在导航菜单中,点击虚拟机 > 实例

  2. 在虚拟机列表中,选中要重启的正在运行的虚拟机的复选框。

  3. 点击重置

  4. 在确认对话框中,点击重置

gdcloud

如需重置虚拟机,请执行以下操作:

gdcloud compute instances reset VM_NAME --project PROJECT
  • VM_NAME 替换为虚拟机名称。
  • PROJECT 替换为虚拟机所在的 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 请求以重启虚拟机,并指定上一步中的证书和密钥:

    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. 验证虚拟机状态:

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

    对示例代码中的变量使用以下定义

    变量定义
    MANAGEMENT_API_SERVER_KUBECONFIGManagement API 服务器 kubeconfig 文件。
    MANAGEMENT_API_SERVER_NAMEManagement API 服务器的名称。
    VM_NAME虚拟机的名称。
    PROJECT虚拟机的项目名称。