本页面介绍了如何管理在 Google Distributed Cloud Connected 上运行的 VM Runtime on Google Distributed Cloud 中的虚拟机。在完成本页面上的步骤之前,您必须熟悉 VM Runtime on GDC。如需查看受支持的客机操作系统列表,请参阅适用于 VM Runtime on GDC 的经过验证的客机操作系统。
如需了解虚拟机如何作为分布式云互联平台的重要组成部分,请参阅扩展 GKE Enterprise 以管理本地边缘虚拟机。
本地控制平面集群支持虚拟机 webhook。这样一来,连接的 Distributed Cloud 就可以验证向本地 Kubernetes API 服务器发出的用户请求。遭拒的要求会生成有关拒绝原因的详细信息。
在 Distributed Cloud Connected 上启用 VM Runtime on GDC 支持
默认情况下,Distributed Cloud Connected 上的 VM Runtime on GDC 虚拟机支持处于停用状态。如需启用该功能,请完成本部分中的步骤。本部分中的说明假定您已拥有一个功能完善的 Distributed Cloud connected 集群。
用于在连接的 Distributed Cloud 上配置 VM Runtime on GDC 支持的 VMRuntime 资源还可通过使用 enableGPU 参数在集群上配置 GPU 支持。请务必根据工作负载需求配置这两个参数。您无需启用 GPU 支持,即可在已连接的 Distributed Cloud 集群上启用 VM Runtime on GDC 支持。
下表介绍了可用的配置:
enable 值 |
enableGPU 值 |
生成的配置 |
|---|---|---|
false |
false |
工作负载仅在容器中运行,无法使用 GPU 资源。 |
false |
true |
工作负载仅在容器中运行,并且可以使用 GPU 资源。 |
true |
true |
工作负载可以在虚拟机上运行,也可以在容器中运行。 这两种类型的工作负载都可以使用 GPU 资源。 |
true |
false |
工作负载可以在虚拟机上运行,也可以在容器中运行。 这两种类型的工作负载都无法使用 GPU 资源。 |
如果您已启用 GPU 支持,请修改 VMRuntime 资源以添加 enable 参数,将其值设置为 true,然后将其应用于 Distributed Cloud 集群。
启用 VM Runtime on GDC 虚拟机子系统
根据您要在哪个类型的集群上启用 GDC 虚拟机子系统上的虚拟机运行时,执行以下操作之一:
- 对于 Cloud 控制平面集群,您必须手动创建
VMRuntime资源。 - 对于本地控制平面集群,您必须修改现有的
VMRuntime资源。
如需在 GDC 虚拟机子系统上启用 VM Runtime,请完成以下步骤:
根据目标集群类型,创建或修改具有以下内容的
VMRuntime自定义资源,并将其应用于您的集群:apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: # Enable Anthos VM Runtime support enabled: true # vmImageFormat defaults to "raw" if not set vmImageFormat: "raw"
请勿更改
vmImageFormat参数的值。 Distributed Cloud Connected 不支持任何其他虚拟磁盘格式。此过程通常需要几分钟才能完成。
使用以下命令验证
VMRuntime自定义资源是否已应用于集群:kubectl get vmruntime -o yaml
该命令会返回类似于以下示例的输出:
- apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime ... spec: enabled: true vmImageFormat: raw status: ... ready: true ...使用以下命令验证您的集群是否已启用 VM Runtime on GDC 虚拟机支持:
kubectl get pods -n vm-system
该命令会返回输出,显示在集群上运行的 GDC 子系统 Pod 中的虚拟机运行时,类似于以下示例:
NAME READY STATUS RESTARTS AGE cdi-apiserver-6c76c6cf7b-n68wn 1/1 Running 0 132m cdi-deployment-f78fd599-vj7tv 1/1 Running 0 132m cdi-operator-65c4df9647-fcb9d 1/1 Running 0 134m cdi-uploadproxy-7765ffb694-6j7bf 1/1 Running 0 132m macvtap-fjfjr 1/1 Running 0 134m virt-api-77dd99dbbb-bs2fb 1/1 Running 0 132m virt-api-77dd99dbbb-pqc27 1/1 Running 0 132m virt-controller-5b44dbbbd7-hc222 1/1 Running 0 132m virt-controller-5b44dbbbd7-p8xkk 1/1 Running 0 132m virt-handler-n76fs 1/1 Running 0 132m virt-operator-86565697d9-fpxqh 2/2 Running 0 134m virt-operator-86565697d9-jnbt7 2/2 Running 0 134m vm-controller-controller-manager-7844d5fb7b-72d8m 2/2 Running 0 134m vmruntime-controller-manager-845649c847-m78r9 2/2 Running 0 175m
向目标命名空间授予对 Distributed Cloud connected 注册表的访问权限
本部分中的步骤仅适用于云控制平面集群。如果您要在本地控制平面集群上配置 VM Runtime on GDC 虚拟机子系统,请跳过此部分。
您必须先向命名空间授予对 Distributed Cloud 连接注册表的访问权限,然后才能在该命名空间中创建虚拟机。注册表包含在目标命名空间中创建和部署虚拟机所需的组件。请注意,您无法在为 Distributed Cloud connected 系统管理预留的命名空间中运行虚拟机。如需了解详情,请参阅管理命名空间限制。
完成以下步骤,以向目标命名空间授予对 Distributed Cloud 连接注册表的访问权限:
使用名为
gcr-pull的imagePullSecret密钥修补目标命名空间中的默认服务账号:kubectl patch sa default -p "{\"imagePullSecrets\": [{\"name\": \"gcr-pull\"}]}" -n NAMESPACE
将
NAMESPACE替换为目标命名空间的名称。刷新目标命名空间中的关联 Secret:
# Delete existing secret. kubectl delete secret gcr-pull -n NAMESPACE --ignore-not-found # Copy the new secret to the target namespace. kubectl get secret gcr-pull -n vm-system -o yaml | sed "s/namespace: vm-system/namespace: NAMESPACE/g" | kubectl apply -f -
将
NAMESPACE替换为目标命名空间的名称。密钥会在 1 小时后过期。过期后,您必须手动刷新。
安装 virtctl 管理工具
您需要使用 virtctl 客户端工具来管理 Distributed Cloud connected 集群上的虚拟机。如需安装该工具,请完成以下步骤:
以
kubectl插件的形式安装virtctl客户端工具:export VERSION=v0.49.0-anthos1.12-gke.7 gcloud storage cp gs://anthos-baremetal-release/virtctl/${VERSION}/linux-amd64/virtctl /usr/local/bin/virtctl cd /usr/local/bin sudo ln -s virtctl kubectl-virt sudo chmod a+x virtctl cd -
验证
virt插件是否已安装:kubectl plugin list
如果插件已成功安装,则该命令的输出会将
kubectl-virt列为其中一个插件。
在 Distributed Cloud Connected 上预配具有原始块存储空间的虚拟机
本部分提供了一些配置示例,用于说明如何在连接到原始块存储的分布式云集群上预配 Linux 虚拟机和 Windows 虚拟机。这些示例使用实例化为 PersistentVolume 的块存储。
使用原始块存储的限制
在连接到 Distributed Cloud Connected 的虚拟机上运行原始块存储时,存在以下限制:
- 在云控制平面集群上,
VirtualMachine资源规范不支持OSType字段。因此,只有console和vnc方法支持访问在云控制平面集群上运行的虚拟机。 - 您无法直接使用
kubectl virt命令在 Distributed Cloud Connected 集群上创建虚拟机,因为 Distributed Cloud Connected 不会为虚拟机提供文件系统存储。 - 块存储
PersistentVolumeClaim资源不支持qcow2磁盘映像格式。 - 容器化数据导入器 (CDI) 插件不支持块存储上的
DataVolume资源,因为该插件的临时空间仅适用于文件系统存储。如需了解详情,请参阅临时空间。
在 Distributed Cloud Connected 上预配具有原始块存储的 Linux 虚拟机
以下示例说明了如何预配一个运行 Ubuntu Server 22.04 的 Linux 虚拟机,该虚拟机具有原始块存储。安装源是 Ubuntu Server 22.04 ISO 光盘映像。
为 Ubuntu Server 安装光盘映像创建一个包含以下内容的
PersistentVolumeClaim资源,然后将其应用于集群:apiVersion: v1 kind: PersistentVolumeClaim metadata: labels: app: containerized-data-importer name: iso-ubuntu annotations: cdi.kubevirt.io/storage.import.endpoint: "https://releases.ubuntu.com/jammy/ubuntu-22.04.3-live-server-amd64.iso" spec: accessModes: - ReadWriteOnce storageClassName: local-block volumeMode: Block resources: requests: storage: 5Gi
为虚拟机的虚拟硬盘创建具有以下内容的
PersistentVolumeClaim资源,然后将其应用到集群:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: ubuntuhd spec: accessModes: - ReadWriteOnce resources: requests: storage: 15Gi storageClassName: local-block volumeMode: Block
为 Ubuntu Server 安装光盘映像创建一个包含以下内容的
VirtualMachineDisk资源,然后将其应用于集群:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: "ubuntu-iso-disk" spec: persistentVolumeClaimName: iso-ubuntu diskType: cdrom
为虚拟机的虚拟硬盘创建一个包含以下内容的
VirtualMachineDisk资源,然后将其应用于您的集群:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: "ubuntu-main-disk" spec: persistentVolumeClaimName: ubuntuhd
创建包含以下内容的
VirtualMachineType资源,以指定虚拟机的配置,然后将其应用于集群:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineType metadata: name: small-2-20 spec: cpu: vcpus: 2 memory: capacity: 20Gi
创建一个包含以下内容的
VirtualMachine资源,该资源可在集群上实例化并启动虚拟机,然后将其应用于您的集群:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: labels: kubevirt.io/vm: ubu-vm name: ubu-vm # Propagate the virtual machine name to the VMI spec: osType: Linux compute: virtualMachineTypeName: small-2-20 interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: ubuntu-main-disk boot: true - virtualMachineDiskName: ubuntu-iso-disk
osType字段仅适用于本地控制平面集群。在本地控制平面集群上,必须使用此参数来配置以下功能:在虚拟机上安装 Ubuntu Server:
- 等待
importerPod 下载 Ubuntu Server 安装光盘映像。 检查虚拟机的状态:
kubectl get gvm VM_NAME
将
VM_NAME替换为虚拟机的名称,在本例中为ubu-vm。登录到虚拟机:
kubectl virt vnc VM_NAME
将
VM_NAME替换为虚拟机的名称,在本例中为ubu-vm。完成 Ubuntu Linux 安装步骤。
- 等待
清理:
停止虚拟机:
kubectl virt stop VM_NAME
将
VM_NAME替换为虚拟机的名称,在本例中为ubu-vm。修改虚拟机的 YAML 文件,以移除对安装光盘映像的引用:
kubectl edit gvm VM_NAME
将
VM_NAME替换为虚拟机的名称,在本例中为ubu-vm。启动虚拟机:
kubectl virt start VM_NAME
将
VM_NAME替换为虚拟机的名称,在本例中为ubu-vm。删除安装光盘映像的
VirtualMachineDisk和PersistentVolumeClaim资源:kubectl delete virtualmachinedisk ubuntu-iso-disk kubectl delete pvc iso-ubuntu
在 Distributed Cloud Connected 上预配具有原始块存储空间的 Windows 虚拟机
以下示例展示了如何预配具有原始块存储的 Windows 虚拟机。这些步骤与预配 Linux 虚拟机类似,但需要额外添加 virtio 驱动程序磁盘映像,这是安装 Windows 所必需的。
获取 Windows 的许可副本及其安装介质映像。
为 Windows 安装光盘映像创建一个包含以下内容的
PersistentVolumeClaim资源,然后将其应用于集群。如需查看相关说明,请参阅从映像。为
virtio驱动程序创建一个包含以下内容的PersistentVolumeClaim资源,然后将其应用于您的集群:apiVersion: v1 kind: PersistentVolumeClaim metadata: labels: app: containerized-data-importer name: virtio-driver annotations: cdi.kubevirt.io/storage.import.endpoint: "https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso" spec: accessModes: - ReadWriteOnce storageClassName: local-block volumeMode: Block resources: requests: storage: 1Gi
为虚拟机的虚拟硬盘创建一个包含以下内容的
PersistentVolumeClaim资源,然后将其应用于您的集群:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: windowshd spec: accessModes: - ReadWriteOnce resources: requests: storage: 15Gi storageClassName: local-block volumeMode: Block
为 Windows 安装光盘映像创建一个包含以下内容的
VirtualMachineDisk资源,然后将其应用于集群:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: "windows-iso-disk" spec: persistentVolumeClaimName: iso-windows diskType: cdrom
为
virtio驱动程序创建一个包含以下内容的VirtualMachineDisk资源,然后将其应用于您的集群:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: "win-virtio-driver" spec: persistentVolumeClaimName: virtio-driver diskType: cdrom
为虚拟机的虚拟硬盘创建一个包含以下内容的
VirtualMachineDisk资源,然后将其应用于您的集群:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: "windows-main-disk" spec: persistentVolumeClaimName: windowshd
创建包含以下内容的
VirtualMachineType资源,以指定虚拟机的配置,然后将其应用于集群:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineType metadata: name: small-2-20 spec: cpu: vcpus: 2 memory: capacity: 20Gi
创建一个包含以下内容的
VirtualMachine资源,该资源可在集群上实例化并启动虚拟机,然后将其应用于您的集群:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: labels: kubevirt.io/vm: win-vm name: win-vm # Propagate the virtual machine name to the VMI spec: osType: Windows compute: virtualMachineTypeName: my-vmt interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: windows-main-disk boot: true - virtualMachineDiskName: windows-iso-disk - virtualMachineDiskName: win-virtio-driver
osType字段仅适用于本地控制平面集群。在本地控制平面集群上,必须使用此参数来配置以下功能:在虚拟机上安装 Windows:
- 等待
importerPod 下载 Windows 安装光盘映像。 检查虚拟机的状态:
kubectl get gvm VM_NAME
将
VM_NAME替换为虚拟机的名称,在本例中为win-vm。按照连接到 Windows 虚拟机并完成操作系统安装中的步骤完成 Windows 安装。
- 等待
清理:
停止虚拟机:
kubectl virt stop VM_NAME
将
VM_NAME替换为虚拟机的名称,在本例中为win-vm。完成分离 ISO 映像和驱动程序磁盘中的步骤。
在 Distributed Cloud Connected 上预配具有 Symcloud Storage 的虚拟机
本部分提供了一些配置示例,展示了如何使用 Symcloud Storage 抽象层在已连接的分布式云集群上预配 Linux 虚拟机和 Windows 虚拟机。
在完成本部分中的步骤之前,您必须先完成为 Symcloud Storage 配置 Distributed Cloud connected 中的步骤。 如果您稍后在集群上停用 Symcloud Storage,则配置为使用 Symcloud Storage 的虚拟机将失败。
在 Distributed Cloud Connected 上预配具有 Symcloud Storage 的 Linux 虚拟机
以下示例展示了如何预配运行 Ubuntu Server 22.04 的 Linux 虚拟机和 Symcloud Storage。安装源是 Ubuntu Server 22.04 ISO 光盘映像。
为 Ubuntu Server 安装光盘映像创建一个包含以下内容的
VirtualMachineDisk资源,然后将其应用于集群:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: ubuntu-iso-disk spec: size: 20Gi storageClassName: robin diskType: cdrom source: http: url: https://releases.ubuntu.com/jammy/ubuntu-22.04.3-live-server-amd64.iso
为虚拟机的虚拟硬盘创建一个包含以下内容的
VirtualMachineDisk资源,然后将其应用于您的集群:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: "ubuntu-main-disk" spec: size: 200Gi storageClassName: robin
创建包含以下内容的
VirtualMachineType资源,以指定虚拟机的配置,然后将其应用于集群:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineType metadata: name: small-2-20 spec: cpu: vcpus: 2 memory: capacity: 20Gi
创建一个包含以下内容的
VirtualMachine资源,该资源可在集群上实例化并启动虚拟机,然后将其应用于您的集群:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: labels: kubevirt.io/vm: ubu-vm name: ubu-vm # Propagate the virtual machine name to the VMI spec: osType: Linux compute: virtualMachineTypeName: small-2-20 interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: ubuntu-main-disk boot: true - virtualMachineDiskName: ubuntu-iso-disk
osType字段仅适用于本地控制平面集群。在本地控制平面集群上,必须使用此参数来配置以下功能:在虚拟机上安装 Ubuntu Server:
- 等待
importerPod 下载 Ubuntu Server 安装光盘映像。 检查虚拟机的状态:
kubectl get gvm VM_NAME
将
VM_NAME替换为虚拟机的名称,在本例中为ubu-vm。登录到虚拟机:
kubectl virt vnc VM_NAME
将
VM_NAME替换为虚拟机的名称,在本例中为ubu-vm。完成 Ubuntu Linux 安装步骤。
- 等待
清理:
停止虚拟机:
kubectl virt stop VM_NAME
将
VM_NAME替换为虚拟机的名称,在本例中为ubu-vm。修改虚拟机的 YAML 文件,以移除对安装光盘映像的引用:
kubectl edit gvm VM_NAME
将
VM_NAME替换为虚拟机的名称,在本例中为ubu-vm。启动虚拟机:
kubectl virt start VM_NAME
将
VM_NAME替换为虚拟机的名称,在本例中为ubu-vm。删除安装光盘映像的
VirtualMachineDisk资源:kubectl delete virtualmachinedisk ubuntu-iso-disk
在 Distributed Cloud Connected 上预配具有 Symcloud Storage 的 Windows 虚拟机
以下示例展示了如何使用 Symcloud Storage 预配 Windows 虚拟机。这些步骤与预配 Linux 虚拟机类似,但需要额外添加 virtio 驱动程序磁盘映像,这是安装 Windows 所必需的。
获取 Windows 的许可副本及其安装介质映像。
为 Windows 安装光盘映像创建一个包含以下内容的
VirtualMachineDisk资源,然后将其应用于集群:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: windows-iso-disk namespace: default spec: size: 5Gi storageClassName: robin diskType: cdrom source: http: url: WINDOWS_ISO_URL
将
NAT_GATEWAY替换为目标 Windows 安装 ISO 光盘映像的完整网址。为
virtio驱动程序创建一个包含以下内容的VirtualMachineDisk资源,然后将其应用于您的集群:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: windows-virtio-driver namespace: default spec: size: 1Gi storageClassName: robin diskType: cdrom source: http: url: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
为虚拟机的虚拟硬盘创建一个包含以下内容的
VirtualMachineDisk资源,然后将其应用于您的集群:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: windows-main-disk namespace: default spec: size: 15Gi storageClassName: robin
创建包含以下内容的
VirtualMachineType资源,以指定虚拟机的配置,然后将其应用于集群:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineType metadata: name: small-2-20 spec: cpu: vcpus: 2 memory: capacity: 20Gi
创建一个包含以下内容的
VirtualMachine资源,该资源可在集群上实例化并启动虚拟机,然后将其应用于您的集群:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: labels: kubevirt.io/vm: win-vm name: win-vm # Propagate the virtual machine name to the VMI spec: osType: Windows compute: virtualMachineTypeName: my-vmt interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: windows-main-disk boot: true - virtualMachineDiskName: windows-iso-disk - virtualMachineDiskName: win-virtio-driver
osType字段仅适用于本地控制平面集群。在本地控制平面集群上,必须使用此参数来配置以下功能:在虚拟机上安装 Windows:
- 等待
importerPod 下载 Windows 安装光盘映像。 检查虚拟机的状态:
kubectl get gvm VM_NAME
将
VM_NAME替换为虚拟机的名称,在本例中为win-vm。按照连接到 Windows 虚拟机并完成操作系统安装中的步骤完成 Windows 安装。
- 等待
清理:
停止虚拟机:
kubectl virt stop VM_NAME
将
VM_NAME替换为虚拟机的名称,在本例中为win-vm。完成分离 ISO 映像和驱动程序磁盘中的步骤。
使用 virtctl 在 Distributed Cloud Connected 上预配虚拟机
如果您不需要通过为虚拟机编写自己的资源规范来进行自定义,则可以使用 virtctl 命令行工具在 Distributed Cloud 上预配虚拟机,如创建虚拟机中所述。
管理在 Distributed Cloud Connected 上运行的虚拟机
如需查看有关管理在 Distributed Cloud Connected 上运行的虚拟机的说明,请参阅以下 VM Runtime on GDC 文档:
如需管理在本地控制平面集群上运行的虚拟机,您必须先配置 kubectl 连接。
配置 ttyS0 设备,以通过串行控制台访问 Linux 虚拟机
如果您计划使用串行控制台 (kubectl virt console) 访问 Linux 虚拟机,请确保已在 guest 操作系统上配置 ttyS0 串行控制台设备。如需配置此设备,请完成以下步骤:
在系统中实例化
ttyS0串行设备:setserial -g /dev/ttyS0
通过将以下行添加到
/etc/default/grub配置文件,将grub引导加载程序配置为使用ttyS0串行设备。第一行会替换现有的GRUB_CMDLINE_LINUX变量。GRUB_CMDLINE_LINUX='console=tty0 console=ttyS0,19200n8' GRUB_TERMINAL=serial GRUB_SERIAL_COMMAND="serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1"
将新的
grub配置应用到启动扇区:update-grub
重启虚拟机。
在 Distributed Cloud Connected 上停用 VM Runtime on GDC
按照本部分中的步骤操作,可在 Distributed Cloud Connected 上停用 VM Runtime on GDC。在已连接的 Distributed Cloud 上停用 VM Runtime on GDC 之前,您必须停止并删除已连接的 Distributed Cloud 集群上的所有虚拟机,如删除虚拟机中所述。
如需在 Distributed Cloud Connected 上停用 VM Runtime on GDC,请修改 VMRuntime 自定义资源,将 enabled spec 参数设置为 false,如下所示,然后将其应用到您的集群:
apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: # Disable Anthos VM Runtime enabled: false # vmImageFormat defaults to "raw" if not set vmImageFormat: "raw"