在 GDC 上的虚拟机运行时中修改虚拟机配置

本文档适用于使用 GDC 上的虚拟机运行时在 Google Distributed Cloud 中运行虚拟机 (VM) 的应用所有者。本文档介绍如何修改在 GKE on Bare Metal 集群中运行的虚拟机。例如,您可以修改 CPU 和内存等资源分配情况,或更改虚拟机连接的网络。

您可以修改 VirtualMachine 资源的 spec 部分中的任何字段。您还可以修改虚拟机的标签。您无法修改其他字段,例如虚拟机名称 (metadata.name)。默认情况下,虚拟机必须处于 Stopped 状态,才能修改该资源。但是,从 Google Distributed Cloud 1.13.0 版开始,您可以将 VirtualMachine 资源配置为在更改配置时自动重启

如果在保存对 VirtualMachine 资源的修改时包含错误,则更改会被拒绝,并且您会看到通知。请纠正错误,然后再次尝试保存 VirtualMachine 资源。如果在进行更改后虚拟机未启动,请使用 kubectl describe gvm VM_NAME 命令查看问题排查信息并更正错误。

准备工作

要完成本文档,您需要拥有以下资源的访问权限:

修改计算资源

如果计算工作负载需求发生变化,您可以更新分配给虚拟机的虚拟 CPU 数量和虚拟内存量。如需修改计算工作负载,请完成以下步骤:

  1. 停止您要修改的虚拟机:

    kubectl virt stop VM_NAME
    

    VM_NAME 替换为要停止的虚拟机的名称。

  2. 使用 kubectl 修改虚拟机:

    kubectl edit gvm VM_NAME
    

    VM_NAME 替换为您要修改的虚拟机的名称。

  3. 在编辑器中,更新要更改的计算资源值。

    例如,以下示例 VirtualMachine 清单显示虚拟机资源已分配有 2 vCPU:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      compute:
        cpu:
          vcpus: 2
    ...
    

    如果要更新分配的 vCPU 的数量,请在编辑器中更改相应的值,如以下示例所示:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      compute:
        cpu:
          vcpus: 4
    ...
    
  4. 保存并关闭虚拟机清单。

  5. 启动您修改的虚拟机:

    kubectl virt start VM_NAME
    

    VM_NAME 替换为您修改的虚拟机的名称。

  6. 检查虚拟机的 STATUS

    kubectl get gvm VM_NAME
    

    确保虚拟机处于 Running 状态。如果虚拟机请求的计算资源超出主机能够提供的计算资源,虚拟机将无法启动。如果虚拟机未处于 Running 状态,请检查 VirtualMachine 资源清单和主机上的计算资源可用性。

    以下示例输出显示了处于 Running 状态的虚拟机:

    NAME   STATUS    AGE   IP
    vm1    Running   1m    192.168.2.72
    
  7. 使用 kubectl describe gvm 查看有关虚拟机的详细信息:

    kubectl describe gvm VM_NAME
    

    VM_NAME 替换为您修改的虚拟机的名称。

    以下示例输出显示了虚拟机的概要信息,其中成功应用了 vCPU 数量更改:

    Name:         vm1
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    API Version:  vm.cluster.gke.io/v1
    Kind:         VirtualMachine
    ...
    Spec:
      Compute:
        Cpu:
          Vcpus:  4
    ...
    

如需了解详情,请参阅如何创建具有特定 vCPU 和内存计算配置的虚拟机

修改磁盘资源

如果存储要求发生变化,您可以向虚拟机添加或移除虚拟磁盘。如需修改挂接到虚拟机的磁盘,请完成以下步骤:

  1. 停止您要修改的虚拟机:

    kubectl virt stop VM_NAME
    

    VM_NAME 替换为要停止的虚拟机的名称。

  2. 使用 kubectl 修改虚拟机:

    kubectl edit gvm VM_NAME
    

    VM_NAME 替换为您要修改的虚拟机的名称。

  3. 在编辑器中,更新 spec.disks 部分以挂接或分离磁盘。

    例如,以下示例 VirtualMachine 清单显示虚拟机只挂接了一个启动磁盘:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      disks:
        - boot: true
          virtualMachineDiskName: vm1-boot-dv
      ...
    

    如果要添加现有的空磁盘,请在编辑器中更新磁盘配置,如以下示例所示:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      disks:
        - boot: true
          virtualMachineDiskName: vm1-boot-dv
        - virtualMachineDiskName: DISK_NAME
      ...
    

    DISK_NAME 替换为要挂接的磁盘的名称。

  4. 保存并关闭虚拟机清单。

  5. 启动您修改的虚拟机:

    kubectl virt start VM_NAME
    

    VM_NAME 替换为您修改的虚拟机的名称。

  6. 检查虚拟机的 STATUS

    kubectl get gvm VM_NAME
    

    确保虚拟机处于 Running 状态。如果虚拟机请求主机无法提供的 StorageClass 或磁盘分配,虚拟机将无法启动。如果虚拟机未处于 Running 状态,请检查 VirtualMachineVirtualMachineDisk 资源清单以及主机存储支持。

  7. 使用 kubectl describe gvm 查看有关虚拟机的详细信息:

    kubectl describe gvm VM_NAME
    

    VM_NAME 替换为您修改的虚拟机的名称。

    以下示例输出显示了虚拟机的概要信息,其中成功应用了对挂接磁盘的更改:

    Name:         vm1
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    API Version:  vm.cluster.gke.io/v1
    Kind:         VirtualMachine
    ...
    Spec:
      Disks:
        Name:  vm1-boot-dv
        Name:  data-disk-01
    ...
    

如需了解详情,请参阅如何创建和管理磁盘

修改网络资源

随着基础架构的变化,您可能需要更改虚拟机的网络配置。例如,您可能希望将虚拟机连接到其他虚拟网络或手动分配 IP 地址。如需修改虚拟机的网络配置,请完成以下步骤:

  1. 停止您要修改的虚拟机:

    kubectl virt stop VM_NAME
    

    VM_NAME 替换为要停止的虚拟机的名称。

  2. 使用 kubectl 修改虚拟机:

    kubectl edit gvm VM_NAME
    

    VM_NAME 替换为您要修改的虚拟机的名称。

  3. 在编辑器中,更新要更改的网络配置设置。

    例如,以下示例 VirtualMachine 清单显示虚拟机连接到名为 backend-vlan100 的网络并使用 DHCP(因为未定义 IP 地址):

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      interfaces:
        - name: eth0
          networkName: backend-vlan100
          default: true
    ...
    

    如果要更改虚拟机连接到的网络或分配手动 IP 地址,请在编辑器中更新网络配置,如以下示例所示:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      interfaces:
        - name: eth0
          networkName: NETWORK_NAME
            ipAddresses:
              - IP_ADDRESS
          default: true
    ...
    

    NETWORK_NAME 替换为要连接的网络的名称,或添加 ipAddresses 部分并指定供虚拟机使用的 IP_ADDRESS

  4. 保存并关闭虚拟机清单。

  5. 启动您修改的虚拟机:

    kubectl virt start VM_NAME
    

    VM_NAME 替换为您修改的虚拟机的名称。

  6. 检查虚拟机的 STATUS

    kubectl get gvm VM_NAME
    

    确保虚拟机处于 Running 状态。如果虚拟机请求主机无法提供的网络连接,虚拟机将无法启动。如果虚拟机未处于 Running 状态,请检查 VirtualMachine 资源清单和主机网络支持。

  7. 使用 kubectl describe gvm 查看有关虚拟机的详细信息:

    kubectl describe gvm VM_NAME
    

    VM_NAME 替换为您修改的虚拟机的名称。

    以下示例输出显示了虚拟机的概要信息,其中成功应用了对网络和 IP 地址配置的更改:

    Name:         vm1
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    API Version:  vm.cluster.gke.io/v1
    Kind:         VirtualMachine
    ...
    Spec:
      Compute:
      Interfaces:
        Name:          eth0
        Network Name:  backend-vlan200
    ...
    Status:
      ...
      Interfaces:
        Dns Config:
          Nameservers:
            8.8.8.8
        gateway4:  10.200.0.9
        Ip Addresses:
          10.200.0.22/24
        Mac Address:    22:b4:e3:d2:ef:fb
        Name:           eth0
        Resource Name:  vm1-eth0-f2468
    ...
    

如需了解详情,请参阅如何创建和管理虚拟网络

将虚拟机配置为自动重启

许多虚拟机配置更改(例如对 compute 设置的更改)需要停止并重启虚拟机,以使更改与相应的虚拟机实例 (VirtualMachineInstance) 同步。您可以将 Google Distributed Cloud 1.13.0 或更高版本中运行的虚拟机配置为在您更改配置时自动重启。将虚拟机配置为使用此功能时,在修改自定义资源时无需停止和重启虚拟机。GDC 上的虚拟机运行时会监控虚拟机,如果检测到配置更改,则会自动重启虚拟机以同步更改。

如果您使用 Config Sync 管理 YAML 配置文件,则此功能特别有用。如果没有此功能,您必须先手动停止虚拟机,然后才能对 VirtualMachine 自定义资源进行任何更改,并在完成更改后手动启动虚拟机。

如需启用自动重启功能,请执行以下操作:

  1. 使用 kubectl 修改虚拟机:

    kubectl edit gvm VM_NAME
    
  2. 在编辑器中,添加 autoRestartOnConfigurationChange 字段并将其设置为 true

    您可以对虚拟机进行其他更改,例如更新 vcpus 值。如果您修改 compute 设置,则 GDC 上的虚拟机运行时会在您保存更改时自动重启您的虚拟机。

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      ...
      name: vm-sample-01
      namespace: default
      resourceVersion: "16711824"
      uid: ed623879-0cfa-52de-ad2c-b63308e6116c
    spec:
      autoRestartOnConfigurationChange: true
      compute:
        cpu:
          vcpus: 2
          ...
    
  3. 保存并关闭虚拟机清单。

    如果您对需要与相应虚拟机实例同步的虚拟机进行了任何其他更改,GDC 上的虚拟机运行时会重启该虚拟机。如果您只是对启用自动重启进行了更改,则无需重启虚拟机。

  4. 检查虚拟机的 status

    kubectl get gvm VM_NAME
    

    根据虚拟机获取的速度,您可能会在虚拟机重启时看到 state: Starting。虚拟机成功重启后,您会看到 state: Running。 对 VirtualMachine 自定义资源的后续配置更改不需要您手动停止并启动虚拟机。对自定义资源的后续更改会一致地反映在虚拟机实例中。

请注意以下环境特征行为:

  • 如果您在修改 VirtualMachine 自定义资源之前手动停止虚拟机,则配置更改不会触发重启。配置更改前虚拟机的停止状态将保持不变。

  • 如果您在启用自动重启功能之前对虚拟机进行了标签或调度更改,则立即添加 autoRestartOnConfigurationChange 而不进行任何其他更改不会触发重启。理想情况下,此功能可使虚拟机实例与虚拟机配置保持一致。但是,GDC 上的虚拟机运行时无法检测之前的不一致情况。

后续步骤