第 4 章 配置用户工作负载监控
4.1. 准备配置用户工作负载监控堆栈
本节介绍可以配置哪些用户定义的监控组件、如何启用用户工作负载监控以及如何准备配置用户工作负载监控堆栈。
- 并非所有监控堆栈的配置参数都会被公开。只有在 Cluster Monitoring Operator 的 Config map 引用中列出的参数和字段才支持进行配置。
- 监控堆栈会带来额外的资源需求。参阅 扩展 Cluster Monitoring Operator 中的计算资源建议,并确认您有足够的资源。
4.1.1. 可配置的监控组件
下表显示了您可以配置的监控组件,以及 user-workload-monitoring-config
配置映射中用来指定这些组件的键。
组件 | user-workload-monitoring-config 配置映射键 |
---|---|
Prometheus Operator |
|
Prometheus |
|
Alertmanager |
|
Thanos Ruler |
|
ConfigMap
对象的不同配置更改会导致不同的结果:
- Pod 不会重新部署。因此,没有服务中断。
受影响的 pod 被重新部署:
- 对于单节点集群,这会导致临时服务中断。
- 对于多节点集群,因为高可用性,受影响的 pod 会逐渐推出,监控堆栈仍然可用。
- 无论高可用性如何,配置和重新定义持久性卷的大小始终会导致服务中断。
每个需要更改配置映射中的步骤都包括其预期的结果。
4.1.2. 为用户定义的项目启用监控
在 OpenShift Container Platform 中,除了默认的平台监控外,您还可以为用户定义的项目启用监控。您可以监控 OpenShift Container Platform 中的自己的项目,而无需额外的监控解决方案。使用这个功能可以集中监控核心平台组件和用户定义的项目。
使用 Operator Lifecycle Manager (OLM) 安装的 Prometheus Operator 版本与用户定义的监控不兼容。因此,OpenShift Container Platform 不支持作为由 OLM Prometheus Operator 管理的 Prometheus 自定义资源 (CR) 安装的自定义 Prometheus 实例。
4.1.2.1. 为用户定义的项目启用监控
集群管理员可以通过在集群监控 ConfigMap
中设置 enableUserWorkload: true
字段来为用户定义的项目启用监控。
要为用户定义的项目启用监控,您必须先删除任何自定义 Prometheus 实例。
您必须可以使用具有 cluster-admin
集群角色的用户访问集群,才能在 OpenShift Container Platform 中为用户定义的项目启用监控。然后,集群管理员可以选择性地授予用户权限来配置负责监控用户定义的项目的组件。
先决条件
-
您可以使用具有
cluster-admin
集群角色的用户身份访问集群。 -
已安装 OpenShift CLI(
oc
)。 -
您已创建
cluster-monitoring-config
ConfigMap
对象。 您已选择性地创建并配置
openshift-user-workload-monitoring
项目中的user-workload-monitoring-config
ConfigMap
。您可以在该ConfigMap
中为监控用户定义的项目的组件添加配置选项。注意每次您将配置更改保存到
user-workload-monitoring-config
ConfigMap
时,都会重新部署openshift-user-workload-monitoring
项目中的 Pod。可能需要稍等片刻,这些组件才会重新部署。
流程
编辑
cluster-monitoring-config
ConfigMap
对象:$ oc -n openshift-monitoring edit configmap cluster-monitoring-config
将
enableUserWorkload: true
添加到data/config.yaml
下:apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | enableUserWorkload: true 1
- 1
- 当设置为
true
时,enableUserWorkload
参数为集群中用户定义的项目启用监控。
保存文件以使改变生效。然后会自动启用对用户定义的项目的监控。
注意如果您为用户定义的项目启用监控,则默认创建
user-workload-monitoring-config
ConfigMap
对象。验证
prometheus-operator
、prometheus-user-workload
和thanos-ruler-user-workload
Pod 是否在openshift-user-workload-monitoring
项目中运行。Pod 启动可能需要片刻时间:$ oc -n openshift-user-workload-monitoring get pod
输出示例
NAME READY STATUS RESTARTS AGE prometheus-operator-6f7b748d5b-t7nbg 2/2 Running 0 3h prometheus-user-workload-0 4/4 Running 1 3h prometheus-user-workload-1 4/4 Running 1 3h thanos-ruler-user-workload-0 3/3 Running 0 3h thanos-ruler-user-workload-1 3/3 Running 0 3h
其他资源
4.1.2.2. 授予用户权限来为用户定义的项目配置监控
作为集群管理员,您可以将 user-workload-monitoring-config-edit
角色分配给用户。这授予为用户定义的项目配置和管理监控的权限,而不授予他们配置和管理 OpenShift Container Platform 核心监控组件的权限。
先决条件
-
您可以使用具有
cluster-admin
集群角色的用户身份访问集群。 - 要将角色分配到的用户帐户已存在。
-
已安装 OpenShift CLI(
oc
)。
流程
将
user-workload-monitoring-config-edit
角色分配给openshift-user-workload-monitoring
项目中的用户:$ oc -n openshift-user-workload-monitoring adm policy add-role-to-user \ user-workload-monitoring-config-edit <user> \ --role-namespace openshift-user-workload-monitoring
通过显示相关角色绑定来验证用户是否已正确分配给
user-workload-monitoring-config-edit
角色:$ oc describe rolebinding <role_binding_name> -n openshift-user-workload-monitoring
示例命令
$ oc describe rolebinding user-workload-monitoring-config-edit -n openshift-user-workload-monitoring
输出示例
Name: user-workload-monitoring-config-edit Labels: <none> Annotations: <none> Role: Kind: Role Name: user-workload-monitoring-config-edit Subjects: Kind Name Namespace ---- ---- --------- User user1 1
- 1
- 在本例中,
user1
分配给user-workload-monitoring-config-edit
角色。
4.1.3. 为用户定义的项目启用警报路由
在 OpenShift Container Platform 中,管理员可以为用户定义的项目启用警报路由。这个过程由以下步骤组成:
为用户定义的项目启用警报路由:
- 使用默认平台 Alertmanager 实例。
- 仅对用户定义的项目使用单独的 Alertmanager 实例。
- 授予用户权限来为用户定义的项目配置警报路由。
完成这些步骤后,开发人员和其他用户可以为用户定义的项目配置自定义警报和警报路由。
其他资源
4.1.3.1. 为用户定义的警报路由启用平台 Alertmanager 实例
您可以允许用户创建使用 Alertmanager 主平台实例的用户定义警报路由配置。
先决条件
-
您可以使用具有
cluster-admin
集群角色的用户身份访问集群。 - 集群管理员为用户定义的项目启用了监控。
-
已安装 OpenShift CLI(
oc
)。
流程
编辑
cluster-monitoring-config
ConfigMap
对象:$ oc -n openshift-monitoring edit configmap cluster-monitoring-config
在
data/config.yaml
下添加alertmanagerMain
部分中的enableUserAlertmanagerConfig: true
:apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | # ... alertmanagerMain: enableUserAlertmanagerConfig: true 1 # ...
- 1
- 将
enableUserAlertmanagerConfig
值设置为true
,以便用户创建使用 Alertmanager 主平台实例的用户定义警报路由配置。
- 保存文件以使改变生效。新的配置会被自动应用。
4.1.3.2. 为用户定义的警报路由启用一个单独的 Alertmanager 实例
在一些集群中,您可能想要为用户定义的项目部署专用 Alertmanager 实例,这有助于降低默认平台 Alertmanager 实例的负载,并更好地将用户定义的警报与默认平台警报分开。在这些情况下,您可以选择性地启用一个单独的 Alertmanager 实例,以仅为用户定义的项目发送警报。
先决条件
-
您可以使用具有
cluster-admin
集群角色的用户身份访问集群。 - 您已为用户定义的项目启用了监控。
-
已安装 OpenShift CLI(
oc
)。
流程
编辑
user-workload-monitoring-config
ConfigMap
对象:$ oc -n openshift-user-workload-monitoring edit configmap user-workload-monitoring-config
在
data/config.yaml
下,添加alertmanager
部分的enabled: true
和enableAlertmanagerConfig: true
:apiVersion: v1 kind: ConfigMap metadata: name: user-workload-monitoring-config namespace: openshift-user-workload-monitoring data: config.yaml: | alertmanager: enabled: true 1 enableAlertmanagerConfig: true 2
- 保存文件以使改变生效。用于用户定义的项目的 Alertmanager 专用实例会自动启动。
验证
验证
user-workload
Alertmanager 实例是否已启动:# oc -n openshift-user-workload-monitoring get alertmanager
输出示例
NAME VERSION REPLICAS AGE user-workload 0.24.0 2 100s
4.1.3.3. 授予用户权限来为用户定义的项目配置警报路由
您可以授予用户权限来为用户定义的项目配置警报路由。
先决条件
-
您可以使用具有
cluster-admin
集群角色的用户身份访问集群。 - 您已为用户定义的项目启用了监控。
- 要将角色分配到的用户帐户已存在。
-
已安装 OpenShift CLI(
oc
)。
流程
将
alert-routing-edit
集群角色分配给用户定义的项目中的用户:$ oc -n <namespace> adm policy add-role-to-user alert-routing-edit <user> 1
- 1
- 对于
<namespace>
,替换用户定义的项目的命名空间,如ns1
。对于<user>
,替换您要为其分配该角色的帐户的用户名。
其他资源
4.1.4. 授予用户权限来监控用户定义的项目
集群管理员可以监控所有 OpenShift Container Platform 核心项目和用户定义的项目。
您还可以向开发人员和其他用户授予不同的权限:
- 监控用户定义的项目
- 要配置用于监控用户定义的项目的组件。
- 为用户定义的项目配置警报路由
- 为用户定义的项目管理警报和静默
您可以通过分配以下监控角色或集群角色之一来授予权限:
角色名称 | 描述 | 项目 |
---|---|---|
|
具有此角色的用户可以编辑 |
|
| 如果启用了用户定义的 Alertmanager,具有此角色的用户对用户定义的 Alertmanager API 具有读取访问权限。 |
|
| 如果启用了用户定义的 Alertmanager,具有此角色的用户对用户定义的 Alertmanager API 具有读写访问权限。 |
|
集群角色名称 | 描述 | 项目 |
---|---|---|
|
具有此集群角色的用户具有用户定义的项目的 |
可以与 |
|
具有此集群角色的用户可为用户定义的项目创建、修改和删除 |
可以与 |
|
具有此集群角色的用户具有与具有 |
可以与 |
|
具有此集群角色的用户可为用户定义的项目创建、更新和删除 |
可以与 |
4.1.4.1. 使用 Web 控制台授予用户权限
您可以使用 OpenShift Container Platform Web 控制台为 openshift-monitoring
项目或自己的项目授予用户权限。
先决条件
-
您可以使用具有
cluster-admin
集群角色的用户身份访问集群。 - 要将角色分配到的用户帐户已存在。
流程
-
在 OpenShift Container Platform Web 控制台的 Administrator 视角中,进入 User Management
RoleBindings Create binding。 - 在 Binding Type 部分中,选择 Namespace Role Binding 类型。
- 在 Name 字段中输入角色绑定的名称。
在 Namespace 字段中,选择要授予访问权限的项目。
重要您使用此流程向用户授予的监控角色或集群角色权限只适用于您在 Namespace 字段中选择的项目。
- 从 Role Name 列表中选择监控角色或集群角色。
- 在 Subject 部分,选择 User。
- 在 Subject Name 字段中,输入用户名称。
- 选择 Create 以应用角色绑定。
4.1.4.2. 使用 CLI 授予用户权限
您可以使用 OpenShift CLI (oc
) 为 openshift-monitoring
项目或自己的项目授予用户权限。
无论您选择的角色或集群角色,都必须作为集群管理员将其与特定项目进行绑定。
先决条件
-
您可以使用具有
cluster-admin
集群角色的用户身份访问集群。 - 要将角色分配到的用户帐户已存在。
-
已安装 OpenShift CLI(
oc
)。
流程
要为项目的用户分配监控角色,请输入以下命令:
$ oc adm policy add-role-to-user <role> <user> -n <namespace> --role-namespace <namespace> 1
- 1
- 将
<role>
替换为您要监控角色,<user>
替换为您要为其分配角色的用户,<namespace>
替换为您要授予访问权限的项目。
要为项目的用户分配监控集群角色,请输入以下命令:
$ oc adm policy add-cluster-role-to-user <cluster-role> <user> -n <namespace> 1
- 1
- 将
<cluster-role>
替换为您要监控的集群角色,<user>
替换为您要为其分配集群角色的用户,<namespace>
替换为您要授予访问权限的项目。
4.1.5. 将用户定义的项目从监控中排除
用户工作负载监控中可以排除个别用户定义的项目。为此,只需将 openshift.io/user-monitoring
标签添加到项目的命名空间,值设为 false
。
流程
将标签添加到项目命名空间:
$ oc label namespace my-project 'openshift.io/user-monitoring=false'
要重新启用监控,请从命名空间中删除该标签:
$ oc label namespace my-project 'openshift.io/user-monitoring-'
注意如果项目有任何活跃的监控目标,Prometheus 可能需要几分钟时间在添加标签后停止提取它们。
4.1.6. 为用户定义的项目禁用监控
为用户定义的项目启用监控后,您可以通过在集群监控 ConfigMap
对象中设置 enableUserWorkload: false
来再次禁用它。
另外,您也可以通过删除 enableUserWorkload: true
来为用户定义的项目禁用监控。
流程
编辑
cluster-monitoring-config
ConfigMap
对象:$ oc -n openshift-monitoring edit configmap cluster-monitoring-config
在
data/config.yaml
下将enableUserWorkload:
设置为false
:apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | enableUserWorkload: false
- 保存文件以使改变生效。然后会自动禁用对用户定义的项目的监控。
检查
prometheus-operator
、prometheus-user-workload
和thanos-ruler-user-workload
Pod 是否已在openshift-user-workload-monitoring
项目中终止。这可能需要片刻时间:$ oc -n openshift-user-workload-monitoring get pod
输出示例
No resources found in openshift-user-workload-monitoring project.
在禁用了对用户定义的项目的监控时,openshift-user-workload-monitoring
项目中的 user-workload-config
ConfigMap
对象不会被自动删除。这是为了保留您可能已在 ConfigMap
中创建的任何自定义配置。