云原生监控插件
插件简介
云原生监控插件(kube-prometheus-stack)通过使用Prometheus-operator和Prometheus,提供简单易用的端到端Kubernetes集群监控能力。
使用kube-prometheus-stack可将监控数据与容器智能分析对接,在容器智能分析控制台查看监控数据,配置告警等。
约束与限制
- 在默认配置下,插件中的kube-state-metrics组件不采集Kubernetes资源的所有的labels和annotation。如需采集,您需要手动在启动参数中开启采集开关,并同时检查名称为kube-state-metrics的ServiceMonitor中采集白名单是否添加相应指标,详情请参见采集Pod所有labels和annotations。
- 自3.8.0版本起,自定义指标采集将默认不再采集kube-system和monitoring命名空间下的组件指标,若您有相关负载在这两个命名空间下,建议使用Pod Monitor或Service Monitor的方式采集。
- 自3.8.0版本起,默认不再采集etcd-server、kube-controller、kube-scheduler、autoscaler、fluent-bit、volcano-agent、volcano-scheduler、otel-collector的指标,您可按需开启。
开启方式:前往“配置项与密钥”页面并切换至monitoring命名空间,单击名为persistent-user-config的配置项的“编辑YAML”按钮,按需移除customSettings字段下serviceMonitorDisable或podMonitorDisable中的配置或置为空数组。
... customSettings: podMonitorDisable: [] serviceMonitorDisable: []
- 在3.9.0版本后,Grafana组件从云原生监控插件中移除,拆分为独立的Grafana插件。因此,当插件版本从3.9.0后的版本回滚至3.9.0前的版本,请先卸载Grafana插件再进行回滚操作。
权限说明
云原生监控插件中的node-exporter组件会监控Docker的存储磁盘空间,需要读取宿主机的/var/run/docker.sock的获取Docker的info的数据。
node-exporter运行需要以下特权:
- cap_dac_override:读取Docker的info的数据。
安装插件
云原生监控插件当前根据数据存储配置自适应选择部署模式(3.7.1及以上版本插件支持),具体如下:
- 原agent模式:关闭本地数据存储,且监控数据上报至AOM服务和监控数据上报至第三方监控平台至少开启其中之一。
- 原server模式:开启本地数据存储,同时支持开启监控数据上报至AOM服务或监控数据上报至第三方监控平台。
- 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“插件中心”,在右侧找到云原生监控插件,单击“安装”。
- 在安装插件页面,根据需求选择“数据存储配置”,至少需要开启一项。
- 监控数据上报至AOM服务:将普罗数据上报至 AOM 服务。开启后,可选择对应的AOM实例。采集的基础指标免费,自定义指标将由AOM服务进行收费,详情请参见价格详情。对接AOM需要用户具备一定权限,目前仅华为云/华为账号,或者在admin用户组下的用户支持此操作。
- 监控数据上报至第三方监控平台:将普罗数据上报至第三方监控系统,需填写第三方监控系统的地址和Token,并选择是否跳过证书认证。
- 本地数据存储:将普罗数据存储在集群中的PVC存储卷里,选择用于存储监控数据的磁盘类型和大小。存储卷不随插件卸载而删除。开启本地数据存储时,将部署全量组件,详情请参见组件说明。
若monitoring命名空间下已存在可使用的PVC(名称为pvc-prometheus-server),将使用该存储作为存储源。
- 根据需求选择“规格配置”。
- 插件规格:
- 选择“系统预置规格”时,系统会根据不同的预置规格配置插件的实例数及资源配额,具体配置值请以控制台显示为准。
- 选择“自定义规格”时,您可根据需求调整插件实例数和资源配额。实例数为1时插件不具备高可用能力,当插件实例所在节点异常时可能导致插件功能无法正常使用,请谨慎选择。
- 普罗高可用:高可用会在集群中将Prometheus-server、Prometheus-operator、thanos-query、custom-metrics-apiserver、alertmanager、kube-state-metrics组件按多实例方式部署。
- 采集分片数(选择非“本地数据存储”时支持设置):当Prometheus的数据量很大时,您可以通过设置该参数,将数据分片到指定数量的Prometheus实例上存储和查询。增加分片数量可以使每个分片承担的数据量更少,从而增加指标的采集吞吐上限,但也会消耗更多的资源。建议在集群规模较大时适度增加分片数量,提高采集性能,同时也需要考虑资源占用的影响,根据具体的监控场景进行权衡和调优。
- 安装grafana:通过 grafana 可视化浏览普罗监控数据。grafana 会默认创建大小为 5 GiB 的存储卷,卸载插件时 grafana 的存储卷不随插件被删除。首次登录默认用户名与密码均为 admin,登录后会立即让您修改密码。
3.9.0版本后,Grafana组件从云原生监控插件中移除,拆分为独立的Grafana插件,不再显示此选项。
- 插件规格:
- 设置插件支持的“参数配置”。
- 自定义指标采集:以服务发现的形式自动采集应用的指标。开启后需要在目标应用添加相关配置,详情请参见使用云原生监控插件监控自定义指标。
- 采集周期:设置采集时间间隔周期。
- 数据保留期(选择“本地数据存储”时支持设置):监控数据保留的时长。
- node-exporter监听端口:该端口使用主机网络,用于监听并暴露所在节点的指标供普罗采集;默认为9100,若与您已有应用的端口冲突,可按需修改。
- 完成以上配置后,单击“安装”。
插件安装完成后,根据您的使用需求,可能还需进行以下操作:
- 如需使用自定义指标创建弹性伸缩策略,请确认云原生监控插件的数据存储配置为开启本地数据存储的模式,然后参考以下步骤:
- 采集应用上报的自定义指标至Prometheus,详情请参见使用云原生监控插件监控自定义指标。
- 将Prometheus采集到的自定义指标聚合到API Server,可供HPA策略使用,详情请参见使用自定义指标创建HPA策略。
- 如果您需要使用该插件为工作负载弹性伸缩提供系统资源指标(如CPU、内存使用量),请确认云原生监控插件的数据存储配置为开启本地数据存储的模式,然后开启Metric API,详情请参见通过Metrics API提供基础资源指标。配置完成后,可使用Prometheus采集系统资源指标。(该操作可能与Kubernetes Metric Server插件产生冲突,不推荐)
- 如需使用自定义指标创建弹性伸缩策略,请确认云原生监控插件的数据存储配置为开启本地数据存储的模式,然后参考以下步骤:
组件说明
安装云原生监控插件创建的Kubernetes资源,全部都创建在monitoring命名空间下。
容器组件 |
说明 |
支持的部署模式 |
资源类型 |
---|---|---|---|
prometheusOperator (负载名称:prometheus-operator) |
根据自定义资源(Custom Resource Definition / CRDs)来部署和管理Prometheus Server,同时监控这些自定义资源事件的变化来做相应的处理,是整个系统的控制中心。 |
所有模式 |
Deployment |
prometheus (负载名称:prometheus-server) |
Operator根据自定义资源Prometheus类型中定义的内容而部署Prometheus Server集群,这些自定义资源可以看作是用来管理Prometheus Server集群的StatefulSets资源。 |
所有模式 |
StatefulSet |
alertmanager (负载名称:alertmanager-alertmanager) |
插件的告警中心,主要用于接收Prometheus发送的告警并通过去重、分组、分发等能力管理告警信息。 |
本地数据存储开启模式 |
StatefulSet |
thanosSidecar |
仅在高可用模式下部署。和prometheus-server运行在同一个Pod中,用于实现普罗指标数据的持久化存储。 |
本地数据存储开启模式 |
Container |
thanosQuery |
仅在高可用模式下部署。PromQL查询的入口,能够对来自Store或Prometheus的相同指标进行重复数据删除。 |
本地数据存储开启模式 |
Deployment |
adapter (负载名称:custom-metrics-apiserver) |
将自定义指标聚合到原生的Kubernetes API Server。 |
本地数据存储开启模式 |
Deployment |
kubeStateMetrics (负载名称:kube-state-metrics) |
将Prometheus的metrics数据格式转换成K8s API接口能识别的格式。kube-state-metrics组件在默认配置下,不采集K8s资源的所有labels和annotation。如需采集,请参考采集Pod所有labels和annotations进行配置。
说明:
该组件如果存在多个Pod,只会有一个Pod暴露指标。 |
所有模式 |
Deployment |
nodeExporter (负载名称:node-exporter) |
每个节点上均有部署,收集Node级别的监控数据。 |
所有模式 |
DaemonSet |
grafana (负载名称:grafana) |
可视化浏览普罗监控数据。grafana会默认创建大小为5 GiB的存储卷,卸载插件时grafana的存储卷不随插件被删除。 |
所有模式 |
Deployment |
clusterProblemDetector (负载名称:cluster-problem-detector) |
用于监控集群异常。 |
本地数据存储开启模式 |
Deployment |
通过Metrics API提供基础资源指标
仅云原生监控插件开启本地数据存储时,可通过Metrics API提供基础资源指标。
容器和节点的资源指标,如CPU、内存使用量,可通过Kubernetes的Metrics API获得。这些指标可以直接被用户访问,比如用kubectl top命令,也可以被HPA或者CustomedHPA使用,根据资源使用率使负载弹性伸缩。
插件可为Kubernetes提供Metrics API,但默认未开启,若要将其开启,需要创建以下APIService对象:
apiVersion: apiregistration.k8s.io/v1 kind: APIService metadata: labels: app: custom-metrics-apiserver release: cceaddon-prometheus name: v1beta1.metrics.k8s.io spec: group: metrics.k8s.io groupPriorityMinimum: 100 insecureSkipTLSVerify: true service: name: custom-metrics-apiserver namespace: monitoring port: 443 version: v1beta1 versionPriority: 100
可以将该对象保存为文件,命名为metrics-apiservice.yaml,然后执行以下命令:
kubectl create -f metrics-apiservice.yaml
执行kubectl top pod -n monitoring命令,若显示如下,则表示Metrics API能正常访问:
# kubectl top pod -n monitoring NAME CPU(cores) MEMORY(bytes) ...... custom-metrics-apiserver-d4f556ff9-l2j2m 38m 44Mi ......
卸载插件时,需要执行以下kubectl命令,同时删除APIService对象,否则残留的APIService资源将导致Kubernetes Metrics Server插件安装失败。
kubectl delete APIService v1beta1.metrics.k8s.io
使用自定义指标创建HPA策略
云原生监控插件为开启本地数据存储时,才能使用自定义指标HPA功能,您可在user-adapter-config配置项中配置HPA弹性策略需要的自定义指标。
使用Prometheus监控自定义指标时,应用程序需要提供监控指标接口,详情请参见Prometheus监控数据采集说明。
以下案例中使用使用云原生监控插件监控自定义指标中的nginx指标(nginx_connections_accepted)作为配置示例。
- 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“配置与密钥”。
- 切换至“monitoring”命名空间,在“配置项”页签找到user-adapter-config配置项(或adapter-config),并单击“更新”。
图1 更新配置项
- 在“配置数据”中单击config.yaml对应的“编辑”按钮,在rules字段下添加自定义指标采集规则。修改完成后单击“确定”保存配置。
如果您需要增加多个采集规则,可在rules字段下添加多个配置,关于采集规则配置详情请参见Metrics Discovery and Presentation Configuration。
自定义采集规则示例如下:rules: # 匹配指标名称是nginx_connections_accepted的指标,必须确认指标名称,否则HPA控制器无法获取到指标 - seriesQuery: '{__name__=~"nginx_connections_accepted",container!="POD",namespace!="",pod!=""}' resources: # 指定Pod和命名空间资源 overrides: namespace: resource: namespace pod: resource: pod name: #使用nginx_connections_accepted" matches: "nginx_connections_accepted" #使用nginx_connections_accepted_per_second来代表该指标,该名称即在HPA的自定义策略中的自定义指标名称 as: "nginx_connections_accepted_per_second" #通过计算表达式rate(nginx_connections_accepted[2m])来代表是每秒的请求接收量 metricsQuery: 'rate(<<.Series>>{<<.LabelMatchers>>,container!="POD"}[2m])'
图2 修改配置数据
- 重新部署monitoring命名空间下的custom-metrics-apiserver工作负载。
图3 重新部署custom-metrics-apiserver
- 在左侧导航栏中选择“工作负载”,找到需要创建HPA策略的工作负载单击“更多>弹性伸缩”。您可在“自定义策略”中选择上述参数创建弹性伸缩策略。
图4 创建HPA策略
采集Pod所有labels和annotations
- 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“工作负载”。
- 切换至“monitoring”命名空间,在“无状态负载”页签单击进入kube-state-metrics负载,选择“容器管理”页签,在右侧单击“编辑”按钮,进入“升级工作负载”页面。
- 在容器配置的“生命周期”中,编辑启动命令。
图5 编辑启动命令
采集labels时,在原有的kube-state-metrics的启动参数最后添加:--metric-labels-allowlist=pods=[*],nodes=[node,failure-domain.beta.kubernetes.io/zone,topology.kubernetes.io/zone]
如需采集annotations时,则在启动参数中以相同方法添加参数:--metric-annotations-allowlist=pods=[*],nodes=[node,failure-domain.beta.kubernetes.io/zone,topology.kubernetes.io/zone]
编辑启动命令时,请勿修改其他原有的启动参数,否则可能导致组件异常。
- kube-state-metrics将开始采集Pod和node的labels/annotations指标,查询kube_pod_labels/kube_pod_annotations是否在普罗的采集任务中。
kubectl get servicemonitor kube-state-metrics -nmonitoring -oyaml | grep kube_pod_labels
更多kube-state-metrics的启动参数请参见kube-state-metrics/cli-arguments。
版本记录
插件版本 |
支持的集群版本 |
更新特性 |
社区版本 |
---|---|---|---|
3.11.0 |
v1.21 v1.23 v1.25 v1.27 v1.28 v1.29 v1.30 |
适配CCE v1.30集群 |
|
3.10.1 |
v1.21 v1.23 v1.25 v1.27 v1.28 v1.29 |
NodeExporter组件升级至1.8.0版本 |
|
3.10.0 |
v1.21 v1.23 v1.25 v1.27 v1.28 v1.29 |
支持v1.29集群 |
|
3.9.5 |
v1.21 v1.23 v1.25 v1.27 v1.28 |
|
|
3.8.2 |
v1.17 v1.19 v1.21 v1.23 v1.25 v1.27 |
修复部分问题 |
|
3.7.3 |
v1.17 v1.19 v1.21 v1.23 v1.25 |
- |
|
3.7.2 |
v1.17 v1.19 v1.21 v1.23 v1.25 |
支持采集Virtual-Kubelet Pod指标 |
|
3.7.1 |
v1.17 v1.19 v1.21 v1.23 v1.25 |
支持PrometheusAgent模式 |
|
3.6.6 |
v1.17 v1.19 v1.21 v1.23 v1.25 |
|
|
3.5.1 |
v1.17 v1.19 v1.21 v1.23 |
- |
|
3.5.0 |
v1.17 v1.19 v1.21 v1.23 |
更新至社区2.35.0版本 |