概述
红帽OpenShift 4.6最新版刚出来, 最新的监控技术栈经过了较大的调整并且GA(生产可用)了.
架构长这样, 我们来看一下:
看起来还是非常复杂的, 第一次看到这个架构可能一脸懵逼.
之所以要做这么复杂, 我能理解的核心原因就1个:
- 在产品标准化和交付定制化之间找到平衡
这就包括:
- 方便实施: 安装部署;
- 方便升级
- 方便撇清权责(非贬义)
下面我们来一起看一下.
了解 红帽OpenShift 4监控技术栈
概述
默认平台监控级别
OpenShift 4 包括一个预配置、预安装和自我更新的监控技术栈,用于监控核心平台组件。OpenShift 4 提供了与监控相关的现成的最佳实践。其中默认包括一组警报,可立即就集群问题通知集群管理员。OpenShift 4 控制台中的默认仪表板包括集群指标的直观表示,以帮助快速了解集群状态。
用户自定义级别
安装 OpenShift Container Platform 4.6 后,集群管理员可以选择性地为用户定义的项目启用监控。通过使用此功能,集群管理员、开发人员和其他用户可以指定在其自己的项目中如何监控服务和 Pod。然后,您可以在 OpenShift Container Platform web 控制台中查询指标、查看仪表板,并管理您自己的项目的警报规则和静默。
监控技术栈
OpenShift 4 监控堆栈基于 Prometheus 开源项目及其更广的生态系统。监控堆栈包括以下组件:
- 默认平台监控组件。在 OpenShift 4 安装过程中,默认会在
openshift-monitoring
namespace(租户) 中安装一组平台监控组件。这为包括 Kubernetes 服务在内的 OpenShift 4 核心组件提供了监控。默认监控堆栈还为集群启用远程健康状态监控。上图中的默认安装部分说明了这些组件。 - 用于监控用户定义项目的组件。在选择性地为用户定义的项目启用监控后,会在
openshift-user-workload-monitoring
项目中安装其他监控组件。这为用户定义的项目提供了监控。上图中的用户部分说明了这些组件。
默认平台监控组件
默认情况下,OpenShift Container Platform 4.6 监控堆栈包括以下组件:
组件 | 描述 |
---|---|
Cluster Monitoring Operator | Cluster Monitoring Operator (CMO) 是监控堆栈的核心组件。它负责部署和管理 Prometheus 实例、Thanos Querier、Telemeter 客户端和指标目标,并确保它们保持最新状态。CMO 由 Cluster Version Operator (CVO) 部署。 |
Prometheus Operator | openshift-monitoring 项目中的 Prometheus Operator (PO) 负责创建、配置和管理平台 Prometheus 实例和 Alertmanager 实例。它还会根据 Kubernetes 标签查询来自动生成监控目标配置。 |
Prometheus | Prometheus 是 OpenShift Container Platform 监控堆栈所依据的监控系统。Prometheus 是一个时间序列数据库和用于指标的规则评估引擎。Prometheus 将警报发送到 Alertmanager 进行处理。 |
Prometheus Adapter | Prometheus Adapter(上图中的 PA)负责转换 Kubernetes 节点和 Pod 查询以便在 Prometheus 中使用。转换的资源指标包括 CPU 和内存使用率指标。Prometheus Adapter 会公开用于 Pod 横向自动扩展的集群资源指标 API。Prometheus Adapter 也用于 oc adm top nodes 和 oc adm top pods 命令。 |
Alertmanager | Alertmanager 服务处理从 Prometheus 接收的警报。Alertmanager 还负责将警报发送到外部通知系统。 |
kube-state-metrics 代理 | kube-state-metrics 导出器代理(上图中的 KSM)将 Kubernetes 对象转换为 Prometheus 可使用的指标。 |
openshift-state-metrics 代理 | openshift-state-metrics 导出器(上图中的 OSM)通过添加了对特定 OpenShift Container Platform 资源的指标数据扩展了 kube-state-metrics。 |
node-exporter 代理 | node-exporter 代理(上图中的 NE)负责收集有关集群中每个节点的指标。node-exporter 代理部署在每个节点上。 |
Thanos querier | Thanos Querier 将 OpenShift 核心指标和用于用户定义项目的指标聚合在单个多租户接口下,并选择性地进行重复数据删除。 |
Grafana | Grafana 分析平台提供用于分析和直观呈现指标的仪表板。由监控堆栈提供的 Grafana 实例及其仪表板是只读的。 |
Telemeter Client | Telemeter Client 将数据的子部分从平台 Prometheus 实例发送到红帽,以便为集群提供远程健康状态监控。 |
监控技术栈中的所有组件都由技术栈自监控,并在 OpenShift 更新时自动更新。
默认监控目标
除了监控技术栈本身的组件外,默认监控堆栈还监控:
- CoreDNS
- Elasticsearch(如果安装了
Logging
组件, 配置了日志监控全套.) - etcd
- Fluentd(如果安装了 Logging)
- HAProxy (openshift 使用HAProxy作为 ingress)
- 镜像 registry
- Kubelets
- Kubernetes apiserver
- Kubernetes 控制器管理器
- Kubernetes 调度程序
- Metering(如果安装了 Metering)
- OpenShift apiserver (openshift 出了k8s api server, 还有openshift apiserver. 用于处理如ImageStream, BuildConfig, DeploymentConfig等openshift特有resources)
- OpenShift 控制器管理器
- Operator Lifecycle Manager (OLM)
对于默认的监控目标, 如果有bug, 是可以提的. 其他 OpenShift 框架组件也可能会公开指标, 这里不详细介绍。
用于监控用户定义的项目的组件
OpenShift 4.6 包括对监控堆栈的可选功能增强,已用于监控用户定义的项目中的服务和 Pod。此功能包括以下组件:
组件 | 描述 |
---|---|
Prometheus Operator | openshift-user-workload-monitoring 项目(即租户)中的 Prometheus Operator (PO) 在同一项目中创建、配置和管理 Prometheus 和 Thanos Ruler 实例。 |
Prometheus | Prometheus 是为用户定义的项目提供监控的监控系统。Prometheus 将警报发送到 Alertmanager 进行处理。 |
Thanos Ruler | Thanos Ruler 是 Prometheus 的一个规则评估引擎,作为一个独立的进程来部署。在 OpenShift 4.6 中,Thanos Ruler 为监控用户定义的项目提供规则和警报评估。 |
用户定义的项目的监控目标
为用户定义的项目启用监控后,您可以监控:
- 通过用户定义的项目中的服务端点提供的指标。
- 在用户定义的项目中运行的 Pod。
对于我这边来说, openshift-user-workload-monitoring
自带的组件还不够. 还通过Operator或其他手段额外部署了以下组件:
- Prometheus Adapter -- 公开用于 Pod 横向自动扩展的集群资源指标 API。比如: mq的队列排队数, java应用的jdbc pending数等;
- Grafana -- openshift4是严禁你乱动
openshift-monitoring
这个租户的, 否则可能无法升级, 出问题不负责. 所以, 需要再在openshift-user-workload-monitoring
中部署一个Grafana. 这个Grafana就是给容器平台的使用人员看的. 有2个选择: 我这边选择对接 Thanos querier. 因为可以通过这一个Grafana给到使用人员完整的监控信息.- 对接
openshift-user-workload-monitoring
的prometheus; - 对接 Thanos querier.
- 对接
我这边, 生产通过openshift-user-workload-monitoring
, 各类Exporter, 以及Prometheus Operator
的以下CustomeResources
ServiceMonitor
PodMonitor
PrometheusRule
实现了对我们公司以下技术栈的监控:
- JAVA
- Python
- Nodejs
- Golang
- NGINX
- RabbitMQ
- Redis
- Kafka
总结
OpenShift 4的监控技术栈, 说实话, 站在用户的角度来看: 1套容器集群而已, 还用2套共4个prometheus, 再加上Thanos. 纯属简单事情复杂化. 秀技术.
但如果站在实施经理 交付角度来看, 确实较好地 在产品标准化和交付定制化之间找到平衡. 在不同国家, 不同行业, 各种各样复杂多变的用户环境下, 交付起来就很简单:
- 默认平台监控给你备齐, 开箱即用, 都是最佳实践; 如果这能满足用户那就最好了. 万事大吉.
- 什么? 还需要自定义的监控? 好, 几个yaml 自定义的监控技术栈搭建好了. 接下来用嘛, 就是用户这边的事情了, 用户用崩了, 也没关系, 默认平台监控还是岁月静好, 在那里工作.