启动和停止虚拟机

本文档介绍了如何在 Google Distributed Cloud (GDC) 网闸隔离配置中启动、停止和重启虚拟机 (VM) 实例。

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

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

准备工作

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

获取 kubeconfig 文件路径

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

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

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

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

申请 IAM 角色

请与您的 IAM 项目管理员联系,请求在您的项目中授予以下角色:

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

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

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

停止虚拟机

当您停止虚拟机 (VM) 时,Hypervisor 会取消分配与该实例关联的所有资源。虚拟机已关停。

使用 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。如果 runningState 不在 spec 中,请将 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 proxy --port=8001 &
    PROXY_PID=$!
    

    将 MANAGEMENT_API_SERVER_KUBECONFIG 替换为 Management API 服务器 kubeconfig 文件。

  2. 发出 API 请求,通过代理重启虚拟机:

    curl -s -i -X PUT \
      http://127.0.0.1:8001/apis/virtualmachineoperations.gdc.goog/v1/namespaces/PROJECT/virtualmachines/VM_NAME/restart | head -n 1
    
    • 将 VM_NAME 替换为虚拟机名称。
    • 将 PROJECT 替换为虚拟机所在的 GDC 项目的名称。

    如果请求成功,则会返回 HTTP/1.1 202 Accepted。

  3. 停止代理:

    kill $PROXY_PID
    
  4. 验证虚拟机状态:

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