在 Anthos VM Runtime 中修改虚拟机配置

本文档适用于运行 Anthos clusters on Bare Metal 的应用所有者。本文档介绍如何修改使用 Anthos VM Runtime 运行的虚拟机。例如,您可以修改 CPU 和内存等资源分配,或更改虚拟机所连接的网络。

您可以修改 VirtualMachine 资源的 spec 部分中的任何字段。您还可以修改虚拟机的标签。您无法修改其他字段,例如虚拟机名称 (metadata.name)。虚拟机必须处于 Stopped 状态,才能修改该资源。

如果在保存对 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
    ...
    

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

后续步骤