OpenShift虚拟化: 虚拟机监控与管理实战指南
1 | 作者:李晓辉 |
Red Hat OpenShift 提供了一套基于开源 Prometheus 项目的集群资源监控栈。用户可以通过 OpenShift web 控制台查看每个虚拟机(VM)的详细信息,就像使用 VMware 的 vCenter 和 Aria 一样方便。
想查看 VM 的指标,比如资源利用率和集群级别的事件,你可以这样操作:
- 登录到 OpenShift web 控制台。
- 点击 Virtualization → Virtual Machines。
- 在 Projects 菜单中选择 VM 所属的项目。
- 点击 VM 的名称,打开 VM 的 Overview 选项卡。
在 Overview 选项卡中,你会看到:
- Details 卡片:显示 VM 的基本信息,比如名称、状态、创建日期、主机名和操作系统。如果 VM 安装了 QEMU guest agent,还能获取关于用户、文件系统和次要网络的信息。如果没有安装,就会显示创建 VM 时指定的操作系统信息。
- Utilization 卡片:包括 CPU、内存、存储和网络传输的使用图表。集群管理员可以从这里选择要查看的利用率数据的时间范围。
- Overview 选项卡还会总结硬件设备、警报、快照、网络接口和磁盘等信息。
从开发者的角度来看,集群管理员可以访问 Observe 菜单,查看每个项目资源利用率的仪表板,比如 CPU、内存、网络和存储 I/O 的使用指标。
从管理员的角度出发,你可以去 Virtualization → Overview,然后选择 Top consumers 选项卡。这个选项卡会列出资源消耗最多的 VM,比如 CPU、内存和存储吞吐量。
命令行监控
oc
客户端是一个用于管理 Red Hat OpenShift 资源的命令行工具。管理员和开发人员可以用 oc
命令来开发、构建、部署和运行 Red Hat OpenShift 中的应用程序或虚拟机工作负载。你还可以用它来审查和诊断 VM 和存储资源的事件和状态。
比如,集群管理员可以用 oc logs
命令查看 virt-launcher
Pod 的日志,来调试问题:
1 | oc logs virt-launcher-name |
如果你想查看集群中所有 VM 的状态,可以用以下命令:
1 | oc get vm -A |
如果你想查看特定命名空间中所有 VM 的状态,可以用以下命令:
1 | oc get vm -n namespace |
你还可以用 oc describe
命令获取 VM 的详细信息,比如最近的事件和规格:
1 | oc describe vm vm-name -n namespace |
如果你想了解更多关于 oc
命令的信息,可以用 oc help
命令。
作为集群管理员,你还可以在 VM 的 virt-launcher
Pod 中使用 virsh
命令工具来管理和检查 VM。你可以通过 OpenShift web 控制台或者 oc
客户端访问 virt-launcher
Pod 的控制台。
从 OpenShift web 控制台访问的话,去 Workloads → Pods,然后选择 VM 的 virt-launcher
Pod。点击 Console 选项卡,就能打开 Pod 的控制台了。
如果你想用 oc
客户端访问,可以用以下命令:
1 | oc exec -it virt-launcher-pod-name -n namespace -- /bin/bash |
你可以用以下命令列出 VM 的所有事件类型:
1 | virsh event vm-name --all |
比如下面的输出
1 | Authorization not available. Check if polkit service is running or see debug message for more information. |
你可以用以下命令查看 VM 的可用内存:
1 | virsh dommemstat vm-name |
1 | actual 2097152 |
你可以用以下命令获取 VM 的状态:
1 | virsh domstate vm-name |
返回
1 | running |
管理虚拟机实例
Red Hat OpenShift 4.16 提供了 virtctl
命令工具,减少了访问 virt-launcher
Pod 控制台的需求。比如,你可以用以下命令查看 VMI 可用的文件系统列表:
1 | virtctl fslist vmi-name -n namespace |
输出:
1 | { |
你还可以用以下命令查看 VMI 操作系统的 guest agent 信息:
1 | virtctl guestosinfo vmi-name -n namespace |
如果你想了解更多关于 virtctl
命令的信息,可以用 virtctl help
命令。
基于角色的访问控制
Red Hat OpenShift 使用基于角色的访问控制(RBAC)来授予对集群资源的权限,包括项目监控。
RBAC 是一种管理对计算机系统资源访问的技术。在 Red Hat OpenShift 中,RBAC 决定了用户是否可以在集群或项目中执行某些操作。你可以根据用户的职责级别,选择集群角色或本地角色。
需要注意的是,集群角色绑定优先于本地角色绑定。
授权是一个与认证分开的步骤。授权过程由规则、角色和绑定来管理。
RBAC 对象 | 描述 |
---|---|
规则 | 允许对对象或对象组执行的操作。 |
角色 | 规则的集合。用户和组可以与多个角色相关联。 |
绑定 | 将用户或组分配给角色。 |
Red Hat OpenShift 根据用户的范围和职责定义了两类角色和绑定:集群角色和本地角色。
角色级别 | 描述 |
---|---|
集群角色 | 具有此角色级别的用户或组可以管理 OpenShift 集群。 |
本地角色 | 具有此角色级别的用户或组只能管理项目级别的元素。 |
作为集群管理员,你可以监控和查询集群中所有项目的指标。
默认情况下,开发人员用户只能监控他们具有 view
角色权限的项目。开发人员用户可以在 OpenShift web 控制台的开发者视角中,从 Observe → Metrics 菜单查看监控信息。从那里,开发人员可以逐个运行性能指标查询。
集群管理员可以为开发人员用户授予额外项目的权限。
如果你想为用户授予 view
角色权限,可以用以下命令:
1 | oc create rolebinding view --clusterrole=view --user=user -n project |
如果你想为组授予 view
角色权限,可以用以下命令:
1 | oc create rolebinding view --clusterrole=view --group=group -n project |
你也可以通过 web 控制台为用户添加角色绑定。以管理员身份登录到 web 控制台,选择 Administrator 视角,然后去 User Management → Users。
选择一个用户,进入用户详情页面。在用户详情页面,选择 RoleBindings 选项卡,然后点击 Create binding,进入 Create RoleBinding 页面。
Create RoleBinding 页面上的字段与 oc create rolebinding
命令中的字段相同。
如果你想为用户定义的项目启用监控,可以在 openshift-monitoring
命名空间中的 cluster-monitoring-config
配置映射中设置 enableUserWorkload: true
字段。
集群管理员可以进行以下更改:
1 | apiVersion: v1 |
查询虚拟资源指标
只有集群管理员可以在 Observe → Metrics 界面中同时访问所有命名空间。从开发者的角度来看,你可以去 Observe,然后点击 Dashboard 选项卡,查看各种指标,包括 CPU 和内存使用图表、当前网络使用量、带宽和存储 I/O 等。
作为集群管理员,你可以去 Observe → Dashboards,然后选择 KubeVirt / Infrastructure Resources / Top Consumers 仪表板。你可以用这个仪表板查看集群中所有 VM 的指标,并找出资源消耗最多的 VM。
你还可以通过 Observe → Metrics 界面执行 Prometheus Query Language (PromQL) 查询,查看整个 Red Hat OpenShift 虚拟化环境中的信息。你可以将这些信息作为仪表板或图表来查看。
以下是一些可以帮助管理员和开发人员编写虚拟化监控 PromQL 查询的指标:
指标 | 描述 |
---|---|
kubevirt_vmi_vcpu_wait_seconds | 返回 VM 的 vCPU 等待时间(秒)。 |
kubevirt_vmi_network_receive_bytes_total | 返回 VM 网络上接收的流量总量(字节)。 |
kubevirt_vmi_network_transmit_bytes_total | 返回 VM 网络上发送的流量总量(字节)。 |
kubevirt_vmi_storage_read_traffic_bytes_total | 返回 VM 读取的存储总量(字节)。 |
kubevirt_vmi_storage_write_traffic_bytes_total | 返回 VM 的存储相关流量写入总量(字节)。 |
kubevirt_vmi_storage_iops_read_total | 返回 VM 每秒执行的读取 I/O 操作数量。 |
kubevirt_vmi_storage_iops_write_total | 返回 VM 每秒执行的写入 I/O 操作数量。 |
kubevirt_vmi_memory_swap_in_traffic_bytes_total | 返回虚拟客户机交换进来的内存总量(字节)。 |
kubevirt_vmi_memory_swap_out_traffic_bytes_total | 返回虚拟客户机交换出去的内存总量(字节)。 |