本文档介绍如何通过更新 VMRuntime
自定义资源或运行 bmctl
命令来启用或停用 VM Runtime on Google Distributed Cloud。
准备工作
如需启用或停用 VM Runtime on GDC,您需要以下资源和工具的访问权限:
- Google Distributed Cloud 1.12.0 版 (
anthosBareMetalVersion: 1.12.0
) 或更高版本的集群。您可以使用任何能够运行工作负载的集群类型。如果需要,请在 Compute Engine 上试用 Google Distributed Cloud,或查看集群创建概览。 bmctl
命令行工具。如需了解详情,请参阅下载并安装bmctl
工具。
启用 VM Runtime on GDC
VM Runtime on GDC 自动安装在 Google Distributed Cloud 1.10 版或更高版本中,但默认情况下处于停用状态。您必须先启用 VM Runtime on GDC,然后才能在 Google Distributed Cloud 中运行虚拟机资源。
bmctl
如需启用运行时,请使用
bmctl
工具:bmctl enable vmruntime --kubeconfig KUBECONFIG_PATH
提供集群的 kubeconfig 文件的路径。当您创建集群时,Google Distributed Cloud 会在管理员工作站上生成 kubeconfig 文件。默认情况下,路径为
bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
。如果 VM Runtime on GDC 已启用,则该命令会返回错误。
您可以通过修改 VMRuntime
自定义资源来配置其他设置(例如模拟或图片格式)。
自定义资源
如需启用运行时,请更新 VMRuntime
自定义资源。此自定义资源是默认安装的。
修改
VMRuntime
自定义资源:kubectl edit vmruntime
在规范中设置
enabled:true
:apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: enabled: true # useEmulation defaults to "false" if not set. useEmulation: true # vmImageFormat defaults to "qcow2" if not set. vmImageFormat: qcow2
在前面的
spec
部分中,可以设置以下值:enabled
:设置为 true 以启用 VM Runtime on GDCuseEmulation
:如果您的节点不支持硬件虚拟化,或您不确定,请将值设置为 true。如果适用,硬件虚拟化可提供比软件模拟更好的性能。如果未指定useEmulation
字段,则默认为false
。vmImageFormat
:支持两个磁盘映像格式值:raw
和qcow2
。如果未设置vmImageFormat
,则 VM Runtime on GDC 使用raw
磁盘映像格式来创建虚拟机。raw
格式可以提供比qcow2
(一种写入时复制格式)更高的性能,但可以使用更多磁盘。如需详细了解虚拟机的映像格式,请参阅 QEMU 文档中的磁盘映像文件格式。
在编辑器中保存自定义资源。
验证
VMRuntime
自定义资源是否已启用:kubectl describe vmruntime vmruntime
VMRuntime
自定义资源的详细信息包含Status
部分。当VMRuntime.Status.Ready
显示为true
时,VM Runtime on GDC 已启用并正常运行。
停用 VM Runtime on GDC
如果您不再需要使用 VM Runtime on GDC,可以停用此功能。
bmctl
如需停用运行时,请使用
bmctl
工具:bmctl disable vmruntime --kubeconfig KUBECONFIG_PATH \ --force=true
提供集群的 kubeconfig 文件的路径和以下配置选项的值:
--force
:设置为true
以确认您要删除现有虚拟机资源。默认值为false
。
自定义资源
如需停用运行时,请更新 VMRuntime
自定义资源:
修改
VMRuntime
自定义资源:kubectl edit vmruntime
在规范中设置
enabled:false
:apiVersion: vm.cluster.gke.io/v1` kind: VMRuntime metadata: name: vmruntime spec: enabled: false useEmulation: true vmImageFormat: qcow2
在编辑器中保存更新后的自定义资源规范。
如需验证
VMRuntime
自定义资源已停用,请查看在vm-system
命名空间中运行的 Pod:kubectl get pods --namespace vm-system
如果只有属于
vmruntime-controller-manager
部署的 Pod 在命名空间中运行,则表明 VM Runtime on GDC 已停用。
了解运行虚拟机的行为
baremetal.cluster.gke.io/vmrumtime-force-disable
注解可用于 VM Runtime on GDC 资源,以定义在集群中运行虚拟机时运行时环境处于停用状态时的行为。
以下示例展示了此注释的值已默认设置为 false
:
// VM runtime yaml file
apiVersion: vm.cluster.gke.io/v1
kind: VMRuntime
metadata:
annotations:
baremetal.cluster.gke.io/vmrumtime-force-disable: "false"
name: vmruntime
[...]
当此注解设置为 false
时,VM Runtime on GDC 会尝试保护正在运行的虚拟机。在停用 VM Runtime on GDC 之前删除所有正在运行的虚拟机,或使用 bmctl disable vmruntime
命令指定 --force=true
参数,如上一部分所示。
下表说明了当此注释设置为 true
或 false
时正在运行的虚拟机会发生什么情况以及您是否指定了 --force=true
参数:
集群状态 | --force 参数 | vmrumtime-force-disable 注释 | 行为 |
---|---|---|---|
没有虚拟机 | 不适用 | 不适用 | 停用 VM Runtime on GDC。 |
现有虚拟机 | True | True | 删除所有正在运行的虚拟机和相关资源。停用 VM Runtime on GDC。 |
True | 错误 | 删除所有正在运行的虚拟机和相关资源。停用 VM Runtime on GDC。 | |
False | True | 提示删除正在运行的虚拟机和相关资源。删除所有正在运行的虚拟机后,停用 VM Runtime on GDC。 | |
False | 错误 | 请勿删除任何正在运行的现有虚拟机。不删除 VM Runtime on GDC。bmctl 命令会返回错误。 |
VM Runtime on GDC 预检检查
使用 VM Runtime on GDC 和虚拟机之前,VM Runtime on GDC 预检检查会验证机器环境的一组前提条件。如果 VM Runtime on GDC 预检检查失败,则阻止创建虚拟机。当 spec.enabled
设置为 true 时,VM Runtime on GDC 预检检查会自动运行。
kubectl label nodes NODE_NAME "kubevm.io/VM-SkipSchedule"= --kubeconfig KUBECONFIG_PATH
当您执行以下任一操作时,VM Runtime on GDC 预检检查会运行:
启用 VM Runtime on GDC
启用 VM Runtime on GDC 功能,例如 useEmulation
升级集群
移除节点的
kubevm.io/VM-SkipSchedule
标签通过运行
bmctl check vmruntimepfc --kubeconfig KUBECONFIG_PATH
命令或应用VMRuntimePreflightCheck
YAML 清单,独立创建 VM Runtime on GDC 预检检查对象。
您可以在最新的 VM Runtime on GDC 预检检查成功时启动虚拟机。如果预检检查失败,则系统会阻止创建虚拟机,并且您会收到预检检查错误。
验证预检检查成功
要验证预检检查是否成功,请运行以下命令:
查找上次执行的预检检查:
kubectl get vmruntimepfc -n vm-system --kubeconfig KUBECONFIG_PATH
输出应如下所示:
NAME PASS AGE vmruntime-preflight-check-6ee61513-ea5d-4340-9374-90396cac129e false 42s vmruntime-preflight-check-f8d71751-a01c-471e-bab5-3370fc2addd5 true 21s
要查找预检检查的状态,请运行以下命令:
kubectl get vmruntime vmruntime -o yaml --kubeconfig KUBECONFIG_PATH
... preflightCheckSummary: preflightCheckSummary: featureStatuses: CPU: passed: true KVM: passed: true preflightCheckName: vmruntime-preflight-check-f8d71751-a01c-471e-bab5-3370fc2addd5 preflightCheckPassed: true ...
调试预检检查失败
如果预检检查失败,请执行以下步骤进行调试:
查找上次执行的预检检查。
kubectl get vmruntimepfc -n vm-system
如需了解详情,请查看该预检检查的状态。
kubectl get vmruntimepfc -n vm-system \ vmruntime-preflight-check-6ee61513-ea5d-4340-9374-90396cac129e -o yaml \ --kubeconfig KUBECONFIG_PATH
... status: checks: worker-0--52229ee15841099-22c41577139a7b8c.lab.anthos: passed: false results: - checkName: CPU passed: true - checkName: KVM message: | command terminated with exit code 1 ls: /mnt/dev/kvm: No such file or directory passed: false ...
解决此问题并再次运行 VM Runtime on GDC 预检检查。下面显示了一个 VMRuntimePreflightCheck YAML 清单示例:
apiVersion: vm.cluster.gke.io/v1 kind: VMRuntimePreflightCheck metadata: name: vmruntime-preflight-check-manual namespace: vm-system