1
2
3
4
5
作者:李晓辉

微信联系:lxh_chat

联系邮箱: 939958092@qq.com

Red Hat OpenShift 提供了一套基于开源 Prometheus 项目的集群资源监控栈。用户可以通过 OpenShift web 控制台查看每个虚拟机(VM)的详细信息,就像使用 VMware 的 vCenter 和 Aria 一样方便。

想查看 VM 的指标,比如资源利用率和集群级别的事件,你可以这样操作:

  1. 登录到 OpenShift web 控制台。
  2. 点击 VirtualizationVirtual Machines
  3. Projects 菜单中选择 VM 所属的项目。
  4. 点击 VM 的名称,打开 VM 的 Overview 选项卡。

Overview 选项卡中,你会看到:

  • Details 卡片:显示 VM 的基本信息,比如名称、状态、创建日期、主机名和操作系统。如果 VM 安装了 QEMU guest agent,还能获取关于用户、文件系统和次要网络的信息。如果没有安装,就会显示创建 VM 时指定的操作系统信息。
  • Utilization 卡片:包括 CPU、内存、存储和网络传输的使用图表。集群管理员可以从这里选择要查看的利用率数据的时间范围。
  • Overview 选项卡还会总结硬件设备、警报、快照、网络接口和磁盘等信息。

从开发者的角度来看,集群管理员可以访问 Observe 菜单,查看每个项目资源利用率的仪表板,比如 CPU、内存、网络和存储 I/O 的使用指标。

从管理员的角度出发,你可以去 VirtualizationOverview,然后选择 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 控制台访问的话,去 WorkloadsPods,然后选择 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
2
3
Authorization not available. Check if polkit service is running or see debug message for more information.
event 'rtc-change' for domain 'accessing-guicreate_vm-name': 0
events received: 1

你可以用以下命令查看 VM 的可用内存:

1
virsh dommemstat vm-name
1
2
3
4
5
6
7
8
9
10
11
12
13
actual  2097152
swap_in 0
swap_out 0
major_fault 999
minor_fault 815298
unused 3207612
available 3829592
usable 3246248
last_update 1728277931
disk_caches 241872
hugetlb_pgalloc 0
hugetlb_pgfail 0
rss 949396

你可以用以下命令获取 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"metadata": {},
"items": [
{
"diskName": "vda2",
"mountPoint": "/boot/efi",
"fileSystemType": "vfat",
"usedBytes": 6006784,
"totalBytes": 104634368
},
{
"diskName": "vda3",
"mountPoint": "/",
"fileSystemType": "xfs",
"usedBytes": 2419097600,
"totalBytes": 10619924480
}
]
}

你还可以用以下命令查看 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 控制台的开发者视角中,从 ObserveMetrics 菜单查看监控信息。从那里,开发人员可以逐个运行性能指标查询。

集群管理员可以为开发人员用户授予额外项目的权限。

如果你想为用户授予 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 ManagementUsers

user-management-user

选择一个用户,进入用户详情页面。在用户详情页面,选择 RoleBindings 选项卡,然后点击 Create binding,进入 Create RoleBinding 页面。

create-role-binding-dialog

Create RoleBinding 页面上的字段与 oc create rolebinding 命令中的字段相同。

如果你想为用户定义的项目启用监控,可以在 openshift-monitoring 命名空间中的 cluster-monitoring-config 配置映射中设置 enableUserWorkload: true 字段。

集群管理员可以进行以下更改:

1
2
3
4
5
6
7
8
apiVersion: v1
kind: ConfigMap
metadata:
name: cluster-monitoring-config
namespace: openshift-monitoring
data:
config.yaml: |
enableUserWorkload: true

查询虚拟资源指标

只有集群管理员可以在 ObserveMetrics 界面中同时访问所有命名空间。从开发者的角度来看,你可以去 Observe,然后点击 Dashboard 选项卡,查看各种指标,包括 CPU 和内存使用图表、当前网络使用量、带宽和存储 I/O 等。

observe-developer-view

作为集群管理员,你可以去 ObserveDashboards,然后选择 KubeVirt / Infrastructure Resources / Top Consumers 仪表板。你可以用这个仪表板查看集群中所有 VM 的指标,并找出资源消耗最多的 VM。

observe-admin-view

你还可以通过 ObserveMetrics 界面执行 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返回虚拟客户机交换出去的内存总量(字节)。