本页面介绍了如何管理在运行 Google Distributed Cloud 上的虚拟机运行时的 Google Distributed Cloud Connected 机架上的虚拟机。在完成本页面上的步骤之前,您必须熟悉 VM Runtime on GDC。如需查看受支持的客机操作系统列表,请参阅适用于 VM Runtime on GDC 的经过验证的客机操作系统。
如需了解虚拟机如何作为分布式云互联平台的重要组成部分,请参阅扩展 GKE Enterprise 以管理本地边缘虚拟机。
Distributed Cloud 连接集群支持虚拟机 webhook。 这样一来,连接的 Distributed Cloud 就可以验证向本地 Kubernetes API 服务器发出的用户请求。遭拒的要求会生成有关拒绝原因的详细信息。
在 Distributed Cloud Connected 上启用 VM Runtime on GDC 支持
默认情况下,Distributed Cloud Connected 上的 VM Runtime on GDC 虚拟机支持处于停用状态。如需启用该功能,请完成本部分中的步骤。本部分中的说明假定您已拥有一个功能完善的 Distributed Cloud connected 集群。
使用以下内容修改
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" # Set node grace period to 55 seconds; haPolicy: defaultRecoveryStrategy: Reschedule nodeHeartbeatInterval: 15s nodeMonitorGracePeriod: 55s
请勿更改
vmImageFormat参数的值。 Distributed Cloud Connected 不支持任何其他虚拟磁盘格式。此过程通常需要几分钟才能完成。
请勿更改
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
安装 virtctl 管理工具
您需要使用 virtctl 客户端工具来管理 Distributed Cloud connected 集群上的虚拟机。如需安装该工具,请完成以下步骤:
以
kubectl插件的形式安装virtctl客户端工具:export VERSION=v0.59.0-anthos1.28-gke.8 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 上预配虚拟机
本部分提供了一些配置示例,展示了如何使用 Symcloud Storage 抽象层在已连接的分布式云集群上预配 Linux 虚拟机和 Windows 虚拟机。
请注意,您无法使用 kubectl virt 命令直接在 Distributed Cloud Connected 集群上创建虚拟机,因为 Distributed Cloud Connected 不会为虚拟机提供文件系统存储。
在完成本部分中的步骤之前,您必须先完成为 Symcloud Storage 配置 Distributed Cloud connected 中的步骤。如果您稍后在集群上停用 Symcloud Storage,则配置为使用 Symcloud Storage 的虚拟机将失败。
在 Distributed Cloud connected 上预配 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: my-network default: true disks: - virtualMachineDiskName: ubuntu-main-disk boot: true - virtualMachineDiskName: ubuntu-iso-disk
您还必须在集群上配置以下功能:
在虚拟机上安装 Ubuntu Server:
- 等待
importerPod 下载 Ubuntu Server 安装光盘映像。 检查虚拟机的状态:
kubectl get gvm VM_NAME
将
VM_NAME替换为虚拟机的名称,在本例中为ubu-vm。使用 SSH 或远程桌面登录虚拟机。
完成 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 上预配 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: my-network default: true disks: - virtualMachineDiskName: windows-main-disk boot: true - virtualMachineDiskName: windows-iso-disk - virtualMachineDiskName: win-virtio-driver
您还必须在集群上配置以下功能:
在虚拟机上安装 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 上运行的虚拟机
如需查看有关管理在 Distributed Cloud Connected 上运行的虚拟机的说明,请参阅以下 VM Runtime on GDC 文档:
如需管理在 Distributed Cloud Connected 上运行的虚拟机,您必须先配置 kubectl 连接。
在 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"
查看 AppArmor 沙盒审核日志
分布式云会自动使用 audit-mode 中的 AppArmor 政策对虚拟机工作负载进行沙盒处理。发生政策违规时,系统会发出一条审核日志条目。例如:
{
"jsonPayload": {
"_SOURCE_REALTIME_TIMESTAMP": "1734596844149104",
"SYSLOG_TIMESTAMP": "Dec 19 08:27:24 ",
"MESSAGE": "type=AVC msg=audit(1734596844.148:27742): apparmor=\"ALLOWED\" operation=\"open\" profile=\"virt-launcher-audit\" name=\"/etc/libvirt/virtlogd.conf\" pid=182406 comm=\"virtlogd\" requested_mask=\"r\" denied_mask=\"r\" fsuid=0 ouid=0 FSUID=\"root\" OUID=\"root\"",
"PRIORITY": "6",
...
"SYSLOG_RAW": "<14>Dec 19 08:27:24 audisp-syslog: type=AVC msg=audit(1734596844.148:27742): apparmor=\"ALLOWED\" operation=\"open\" profile=\"virt-launcher-audit\" name=\"/etc/libvirt/virtlogd.conf\" pid=182406 comm=\"virtlogd\" requested_mask=\"r\" denied_mask=\"r\" fsuid=0 ouid=0 FSUID=\"root\" OUID=\"root\"\n",
"SYSLOG_IDENTIFIER": "audisp-syslog",
"_GID": "0",
},
"timestamp": "2024-12-19T08:27:24.149109Z",
"labels": {
"gke.googleapis.com/log_type": "system"
},
"receiveTimestamp": "2024-12-19T08:27:24.721842807Z"
...
...
后续步骤
- 管理 Distributed Cloud 已连接服务器上的虚拟机
- 在 Distributed Cloud connected 上部署工作负载
- 管理 GPU 工作负载
- 管理地区
- 管理机器
- 管理集群
- 管理节点池