本文档适用于使用 GDC 上的 VM Runtime 在 GKE on Bare Metal 中运行虚拟机 (VM) 的应用所有者。本文档介绍如何修改在 GKE on Bare Metal 集群中运行的虚拟机。例如,您可以修改 CPU 和内存等资源分配,或者更改虚拟机连接到的网络。
您可以修改 VirtualMachine
资源的 spec
部分中的任何字段。您还可以修改虚拟机的标签。您无法修改其他字段,例如虚拟机名称 (metadata.name
)。默认情况下,虚拟机必须处于 Stopped
状态,才能修改该资源。但是,从 GKE on Bare Metal 1.13.0 版开始,您可以将 VirtualMachine
资源配置为每次更改配置时自动重启。
如果在保存对 VirtualMachine
资源的修改时包含错误,则更改会被拒绝,并且您会看到通知。请纠正错误,然后再次尝试保存 VirtualMachine
资源。如果在进行更改后虚拟机未启动,请使用 kubectl describe gvm VM_NAME
命令查看问题排查信息并更正错误。
准备工作
要完成本文档,您需要拥有以下资源的访问权限:
- 在其中一个集群中运行的虚拟机。如果需要,请在 GKE on Bare Metal 中创建虚拟机。
- 作为
kubectl
的插件安装的virtctl
客户端工具。如果需要,请安装 virtctl 客户端工具。
修改计算资源
如果计算工作负载需求发生变化,您可以更新分配给虚拟机的虚拟 CPU 数量和虚拟内存量。如需修改计算工作负载,请完成以下步骤:
停止您要修改的虚拟机:
kubectl virt stop VM_NAME
将
VM_NAME
替换为要停止的虚拟机的名称。使用
kubectl
修改虚拟机:kubectl edit gvm VM_NAME
将
VM_NAME
替换为您要修改的虚拟机的名称。在编辑器中,更新要更改的计算资源值。
例如,以下示例
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 ...
保存并关闭虚拟机清单。
启动您修改的虚拟机:
kubectl virt start VM_NAME
将
VM_NAME
替换为您修改的虚拟机的名称。检查虚拟机的
STATUS
:kubectl get gvm VM_NAME
确保虚拟机处于
Running
状态。如果虚拟机请求的计算资源超出主机能够提供的计算资源,虚拟机将无法启动。如果虚拟机未处于Running
状态,请检查VirtualMachine
资源清单和主机上的计算资源可用性。以下示例输出显示了处于
Running
状态的虚拟机:NAME STATUS AGE IP vm1 Running 1m 192.168.2.72
使用
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 和内存计算配置的虚拟机。
修改磁盘资源
如果存储要求发生变化,您可以向虚拟机添加或移除虚拟磁盘。如需修改挂接到虚拟机的磁盘,请完成以下步骤:
停止您要修改的虚拟机:
kubectl virt stop VM_NAME
将
VM_NAME
替换为要停止的虚拟机的名称。使用
kubectl
修改虚拟机:kubectl edit gvm VM_NAME
将
VM_NAME
替换为您要修改的虚拟机的名称。在编辑器中,更新
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
替换为要挂接的磁盘的名称。保存并关闭虚拟机清单。
启动您修改的虚拟机:
kubectl virt start VM_NAME
将
VM_NAME
替换为您修改的虚拟机的名称。检查虚拟机的
STATUS
:kubectl get gvm VM_NAME
确保虚拟机处于
Running
状态。如果虚拟机请求主机无法提供的StorageClass
或磁盘分配,虚拟机将无法启动。如果虚拟机未处于Running
状态,请检查VirtualMachine
和VirtualMachineDisk
资源清单以及主机存储支持。使用
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 地址。如需修改虚拟机的网络配置,请完成以下步骤:
停止您要修改的虚拟机:
kubectl virt stop VM_NAME
将
VM_NAME
替换为要停止的虚拟机的名称。使用
kubectl
修改虚拟机:kubectl edit gvm VM_NAME
将
VM_NAME
替换为您要修改的虚拟机的名称。在编辑器中,更新要更改的网络配置设置。
例如,以下示例
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
。保存并关闭虚拟机清单。
启动您修改的虚拟机:
kubectl virt start VM_NAME
将
VM_NAME
替换为您修改的虚拟机的名称。检查虚拟机的
STATUS
:kubectl get gvm VM_NAME
确保虚拟机处于
Running
状态。如果虚拟机请求主机无法提供的网络连接,虚拟机将无法启动。如果虚拟机未处于Running
状态,请检查VirtualMachine
资源清单和主机网络支持。使用
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
) 同步。在 GKE on Bare Metal 1.13.0 版或更高版本中运行的虚拟机可以配置为每次更改其配置时自动重启。将虚拟机配置为使用此功能时,在修改自定义资源时无需停止和重启虚拟机。GDC 上的虚拟机运行时会监控虚拟机,如果检测到配置更改,它会自动重启虚拟机以同步更改。
如果您使用 Config Sync 管理 YAML 配置文件,此功能特别有用。如果没有此功能,您必须先手动停止虚拟机,然后才能对 VirtualMachine
自定义资源进行任何更改,并在完成更改后手动启动虚拟机。
如需启用自动重启功能,请执行以下操作:
使用
kubectl
修改虚拟机:kubectl edit gvm VM_NAME
在编辑器中,添加
autoRestartOnConfigurationChange
字段并将其设置为true
。您可以对虚拟机进行其他更改,例如更新
vcpus
值。如果您修改compute
设置,GDC 上的 VM Runtime 会在您保存更改时自动重启您的虚拟机。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 ...
保存并关闭虚拟机清单。
如果您对虚拟机进行了任何其他需要与相应虚拟机实例同步的更改,则 GDC 上的虚拟机运行时将重启该虚拟机。如果您只是对启用自动重启进行了更改,则无需重启虚拟机。
检查虚拟机的
status
:kubectl get gvm VM_NAME
根据虚拟机获取的速度,您可能会在虚拟机重启时看到
state: Starting
。虚拟机成功重启后,您会看到state: Running
。 对VirtualMachine
自定义资源的后续配置更改不需要您手动停止并启动虚拟机。对自定义资源的后续更改会一致地反映在虚拟机实例中。
请注意以下环境特征行为:
如果您在修改
VirtualMachine
自定义资源之前手动停止虚拟机,则配置更改不会触发重启。配置更改前虚拟机的停止状态将保持不变。如果您在启用自动重启功能之前对虚拟机进行了标签或调度更改,则立即添加
autoRestartOnConfigurationChange
而不进行任何其他更改不会触发重启。理想情况下,此功能可使虚拟机实例与虚拟机配置保持一致。但是,GDC 上的虚拟机运行时无法检测到之前的不一致情况。