9.14. 控制虚拟机状态


您可使用 virtctl 管理虚拟机状态并从 CLI 执行其他操作。例如,您可以使用 virtctl 来强制停止虚拟机或公开端口。

您可从 web 控制台停止、启动、重启、重置、暂停和取消暂停虚拟机。

要允许用户使用 OpenShift Container Platform web 控制台管理虚拟机(VM)状态,您必须创建一个 RBAC 集群角色和集群角色绑定。集群角色使用 subresources.kubevirt.io API 来定义哪些资源可由某些用户或组控制。

先决条件

  • 具有集群管理员对安装 OpenShift Virtualization 的 OpenShift Container Platform 集群的访问权限。
  • 已安装 OpenShift CLI(oc)。

流程

  1. 创建允许目标用户或组管理虚拟机状态的 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
    # ...
  2. 运行以下命令以应用集群角色:

    $ oc apply -f <filename>.yaml
  3. 运行以下命令并确认集群角色已创建好,并观察其输出:

    $ oc get clusterrole <name>

    输出示例:

    NAME                AGE
    vm-manager-access   15s
  4. 检查集群角色的详情,并确保存在 subresources.kubevirt.io 的预期规则,特别是 virtualmachines/startvirtualmachines/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]
  5. 创建 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
  6. 运行以下命令以应用集群角色绑定:

    $ oc apply -f <filename>.yaml
  7. 运行以下命令并观察输出,确认已创建了集群角色绑定:

    $ oc get clusterrolebinding <name>

    输出示例:

    NAME                        AGE
    vm-manager-access-binding   15s

验证

  1. 运行以下命令,检查用户是否可以启动虚拟机:

    $ oc auth can-i update virtualmachines/start --namespace=<namespace> --as=<user_name> --subresource=subresources.kubevirt.io

    输出示例:

    yes
  2. 运行以下命令,检查用户是否可以停止虚拟机:

    $ oc auth can-i update virtualmachines/stop --namespace=<namespace> --as=<user_name> --group=subresources.kubevirt.io

    输出示例:

    yes
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部