
# kube-prometheus-stack插件
#### 插件简介
kube-prometheus-stack通过使用Prometheus Operator和Prometheus，提供简单易用的端到端Kubernetes集群监控能力，同时还具备自定义插件规格、对接Grafana、高可用、节点亲和等能力。
kube-prometheus-stack插件的核心组件包括prometheusOperator、prometheus、alertmanager、thanosSidecar、thanosQuery、adapter、kubeStateMetrics、nodeExporter、grafana。
- prometheusOperator：根据自定义资源（Custom Resource Definition / CRDs）来部署和管理Prometheus Server，同时监控这些自定义资源事件的变化来做相应的处理，是整个系统的控制中心。
- prometheus（Server）：Operator根据自定义资源Prometheus类型中定义的内容而部署Prometheus Server集群，这些自定义资源可以看作是用来管理Prometheus Server集群的StatefulSets资源。
- alertmanager：插件的告警中心，主要用于接收Prometheus发送的告警并通过去重、分组、分发等能力管理告警信息。
- thanosSidecar：高可用场景和Prometheus运行在同一个Pod中，用于实现普罗指标数据的持久化存储。
- thanosQuery：普罗高可用时PromQL查询的入口，能够对来自Store或Prometheus的相同指标进行重复数据删除。
- adapter（custom-metrics-apiserver）：将自定义指标聚合到原生的Kubernetes API Server。
- kube-state-metrics：将Prometheus的metrics数据格式转换成Kubernetes API接口能识别的格式。kube-state-metrics组件在默认配置下，不采集Kubernetes资源的所有labels和annotation。如需采集，请参考[如何修改kube-state-metrics组件的采集配置？](https://support.huaweicloud.com/ucs_faq/ucs_faq_0030.html)章节进行配置。
- nodeExporter：每个节点上均有部署，收集Node级别的监控数据。
- grafana：可视化浏览普罗监控数据。Grafana会默认创建大小为5 GiB的存储卷，卸载插件时Grafana的存储卷不随插件被删除。
- clusterProblemDetector：用于监控集群异常。
 
#### 约束和限制
目前kube-prometheus-stack插件暂不支持UCS本地集群。
#### 插件部署模式
kube-prometheus-stack插件在部署时支持Agent模式和Server模式。
- Agent模式下，插件占用集群资源较低，为集群提供普罗指标采集能力，但不支持基于自定义普罗语句的HPA及健康诊断功能。
- Server模式支持基于自定义普罗语句的HPA及健康诊断功能，依赖PVC，内存消耗较大。
 
#### 注意事项
kube-prometheus-stack为系统监控插件，当集群资源不足时，Kubernetes会优先保证插件Pod的调度。
#### 权限说明
kube-prometheus-stack插件中的node-exporter组件会监控Docker的存储磁盘空间，需要读取宿主机的/var/run/dockersock的获取Docker的info的数据。
node-exporter运行需要以下特权：
- cap_dac_override：读取Docker的info的数据。
 
#### 升级插件
1. 选择一个容器舰队或者未加入舰队的集群。 
   图1选择舰队或未加入舰队的集群   
   ![](https://support.huaweicloud.com/usermanual-ucs/zh-cn_image_0000001922004661.png "点击放大")
   
   
2. 单击"容器洞察 \> 集群总览"页签查看已开启监控的集群，选择待升级插件的集群，单击操作列的"查看详情"，进入概览页。
3. 页面右上角会展示kube-prometheus-stack插件的版本，当安装的插件版本非最新版本时，可选择升级插件，体验插件的最新功能。
 
 #### 不同规格的资源配额要求
安装kube-prometheus-stack插件时，需确保集群中有足够的CPU、内存等可调度资源。Agent模式默认规格的资源配额要求请参见[表1]，Server模式下不同插件规格的资源配额要求请参见[表2]。
 表1Agent模式默认规格的资源配额要求 
| 插件规格 | 容器实例               | CPU配额            || 内存配额               ||
|:---|:---|:---|---|:---|---|
| 默认规格 | prometheusOperator | 申请：100m | 限制：500m | 申请：100Mi | 限制：500Mi |
| 默认规格 | prometheus         | 申请：500m | 限制：4    | 申请：1Gi   | 限制：8Gi   |
| 默认规格 | kube-state-metrics | 申请：200m | 限制：500m | 申请：200Mi | 限制：500Mi |
| 默认规格 | nodeExporter       | 申请：200m | 限制：500m | 申请：200Mi | 限制：1Gi   |
| 默认规格 | grafana            | 申请：100m | 限制：500m | 申请：200Mi | 限制：2Gi   |
   
 表2Server模式不同规格的资源配额要求 
| 插件规格          | 容器实例                   | CPU配额            || 内存配额               ||
|:---|:---|:---|---|:---|---|
| 演示规格（100容器以内） | prometheusOperator     | 申请：200m | 限制：500m | 申请：200Mi | 限制：500Mi |
| 演示规格（100容器以内） | prometheus             | 申请：500m | 限制：2    | 申请：2Gi   | 限制：8Gi   |
| 演示规格（100容器以内） | alertmanager           | 申请：200m | 限制：1    | 申请：200Mi | 限制：1Gi   |
| 演示规格（100容器以内） | thanosSidecar          | 申请：100m | 限制：1    | 申请：100Mi | 限制：2Gi   |
| 演示规格（100容器以内） | thanosQuery            | 申请：500m | 限制：2    | 申请：500Mi | 限制：4Gi   |
| 演示规格（100容器以内） | adapter                | 申请：400m | 限制：2    | 申请：400Mi | 限制：1Gi   |
| 演示规格（100容器以内） | kube-state-metrics     | 申请：200m | 限制：500m | 申请：200Mi | 限制：500Mi |
| 演示规格（100容器以内） | nodeExporter           | 申请：200m | 限制：500m | 申请：200Mi | 限制：1Gi   |
| 演示规格（100容器以内） | grafana                | 申请：200m | 限制：500m | 申请：200Mi | 限制：2Gi   |
| 演示规格（100容器以内） | clusterProblemDetector | 申请：100m | 限制：200m | 申请：200Mi | 限制：400Mi |
| 小规格（2000容器以内） | prometheusOperator     | 申请：200m | 限制：500m | 申请：200Mi | 限制：500Mi |
| 小规格（2000容器以内） | prometheus             | 申请：4    | 限制：8    | 申请：16Gi  | 限制：32Gi  |
| 小规格（2000容器以内） | alertmanager           | 申请：500m | 限制：1    | 申请：500Mi | 限制：1Gi   |
| 小规格（2000容器以内） | thanosSidecar          | 申请：500m | 限制：1    | 申请：500Mi | 限制：2Gi   |
| 小规格（2000容器以内） | thanosQuery            | 申请：2    | 限制：4    | 申请：2Gi   | 限制：16Gi  |
| 小规格（2000容器以内） | adapter                | 申请：2    | 限制：4    | 申请：4Gi   | 限制：16Gi  |
| 小规格（2000容器以内） | kube-state-metrics     | 申请：500m | 限制：1    | 申请：500Mi | 限制：1Gi   |
| 小规格（2000容器以内） | nodeExporter           | 申请：200m | 限制：500m | 申请：200Mi | 限制：1Gi   |
| 小规格（2000容器以内） | grafana                | 申请：200m | 限制：500m | 申请：200Mi | 限制：2Gi   |
| 小规格（2000容器以内） | clusterProblemDetector | 申请：200m | 限制：500m | 申请：300Mi | 限制：1Gi   |
| 中规格（5000容器以内） | prometheusOperator     | 申请：500m | 限制：1    | 申请：500Mi | 限制：1Gi   |
| 中规格（5000容器以内） | prometheus             | 申请：8    | 限制：16   | 申请：32Gi  | 限制：64Gi  |
| 中规格（5000容器以内） | alertmanager           | 申请：500m | 限制：1    | 申请：500Mi | 限制：2Gi   |
| 中规格（5000容器以内） | thanosSidecar          | 申请：1    | 限制：2    | 申请：1Gi   | 限制：4Gi   |
| 中规格（5000容器以内） | thanosQuery            | 申请：2    | 限制：4    | 申请：2Gi   | 限制：16Gi  |
| 中规格（5000容器以内） | adapter                | 申请：2    | 限制：4    | 申请：16Gi  | 限制：32Gi  |
| 中规格（5000容器以内） | kube-state-metrics     | 申请：1    | 限制：2    | 申请：1Gi   | 限制：2Gi   |
| 中规格（5000容器以内） | nodeExporter           | 申请：200m | 限制：500m | 申请：200Mi | 限制：1Gi   |
| 中规格（5000容器以内） | grafana                | 申请：200m | 限制：500m | 申请：200Mi | 限制：2Gi   |
| 中规格（5000容器以内） | clusterProblemDetector | 申请：200m | 限制：1    | 申请：400Mi | 限制：2Gi   |
| 大规格（超过5000容器） | prometheusOperator     | 申请：500m | 限制：1    | 申请：500Mi | 限制：2Gi   |
| 大规格（超过5000容器） | prometheus             | 申请：8    | 限制：32   | 申请：64Gi  | 限制：128Gi |
| 大规格（超过5000容器） | alertmanager           | 申请：1    | 限制：2    | 申请：1Gi   | 限制：4Gi   |
| 大规格（超过5000容器） | thanosSidecar          | 申请：2    | 限制：4    | 申请：2Gi   | 限制：8Gi   |
| 大规格（超过5000容器） | thanosQuery            | 申请：2    | 限制：4    | 申请：2Gi   | 限制：32Gi  |
| 大规格（超过5000容器） | adapter                | 申请：2    | 限制：4    | 申请：32Gi  | 限制：64Gi  |
| 大规格（超过5000容器） | kube-state-metrics     | 申请：1    | 限制：3    | 申请：1Gi   | 限制：3Gi   |
| 大规格（超过5000容器） | nodeExporter           | 申请：200m | 限制：500m | 申请：200Mi | 限制：1Gi   |
| 大规格（超过5000容器） | grafana                | 申请：200m | 限制：500m | 申请：200Mi | 限制：2Gi   |
| 大规格（超过5000容器） | clusterProblemDetector | 申请：200m | 限制：1    | 申请：400Mi | 限制：2Gi   |
   
