9.14. 控制虚拟机状态
您可使用 virtctl 管理虚拟机状态并从 CLI 执行其他操作。例如,您可以使用 virtctl 来强制停止虚拟机或公开端口。
您可从 web 控制台停止、启动、重启、重置、暂停和取消暂停虚拟机。
9.14.1. 使用 Web 控制台配置用于管理虚拟机状态的 RBAC 权限 复制链接链接已复制到粘贴板!
要允许用户使用 OpenShift Container Platform web 控制台管理虚拟机(VM)状态,您必须创建一个 RBAC 集群角色和集群角色绑定。集群角色使用 subresources.kubevirt.io API 来定义哪些资源可由某些用户或组控制。
先决条件
- 具有集群管理员对安装 OpenShift Virtualization 的 OpenShift Container Platform 集群的访问权限。
-
已安装 OpenShift CLI(
oc)。
流程
创建允许目标用户或组管理虚拟机状态的
ClusterRole对象:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: vm-manager-access rules: - apiGroups: - subresources.kubevirt.io resources: - virtualmachines/start - virtualmachines/stop verbs: - update # ...运行以下命令以应用集群角色:
$ oc apply -f <filename>.yaml运行以下命令并确认集群角色已创建好,并观察其输出:
$ oc get clusterrole <name>输出示例:
NAME AGE vm-manager-access 15s检查集群角色的详情,并确保存在
subresources.kubevirt.io的预期规则,特别是virtualmachines/start和virtualmachines/stop子资源。运行以下命令并观察输出:
$ oc describe clusterrole <name>输出示例:
Name: vm-manager-access Labels: <none> Annotations: <none> PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- virtualmachines/start, virtualmachines/stop with subresources.kubevirt.io group [] [] [update]创建
ClusterRoleBinding对象来将您创建的集群角色绑定到目标用户或组:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: vm-manager-access-binding subjects: - kind: User name: test-user apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: vm-manager-access apiGroup: rbac.authorization.k8s.io运行以下命令以应用集群角色绑定:
$ oc apply -f <filename>.yaml运行以下命令并观察输出,确认已创建了集群角色绑定:
$ oc get clusterrolebinding <name>输出示例:
NAME AGE vm-manager-access-binding 15s
验证
运行以下命令,检查用户是否可以启动虚拟机:
$ oc auth can-i update virtualmachines/start --namespace=<namespace> --as=<user_name> --subresource=subresources.kubevirt.io输出示例:
yes运行以下命令,检查用户是否可以停止虚拟机:
$ oc auth can-i update virtualmachines/stop --namespace=<namespace> --as=<user_name> --group=subresources.kubevirt.io输出示例:
yes