kube-prometheus-stack
插件简介
kube-prometheus-stack通过使用Prometheus-operator和Prometheus,提供简单易用的端到端Kubernetes集群监控能力。
约束与限制
在默认配置下,插件中的kube-state-metrics组件不采集Kubernetes资源的所有的labels和annotation。如需采集,您需要手动在启动参数中开启采集开关,并同时检查名称为kube-state-metrics的ServiceMonitor中采集白名单是否添加相应指标,详情请参见采集Pod所有labels和annotations。
安装插件
- 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“插件管理”,在右侧找到kube-prometheus-stack,单击“安装”。
- 在安装插件页面,进行规格配置。
- 部署模式:3.7.1及以上版本的插件支持选择部署模式。
- Agent模式:本地不存储数据,占用资源较少,但是不支持HPA能力。
使用Agent模式时,由于本地不再存储监控数据,因此必须对接AOM或第三方监控系统。
- Server模式:本地存储数据,占用资源较多,支持所有能力。
- Agent模式:本地不存储数据,占用资源较少,但是不支持HPA能力。
- 容器:插件创建的组件实例,详情请参见组件说明。您可以根据需求选择相应的规格或自定义规格。
- 部署模式:3.7.1及以上版本的插件支持选择部署模式。
- 配置相关参数。
- 对接三方:将普罗数据上报至第三方监控系统,需填写第三方监控系统的地址和Token,并选择是否跳过证书认证。
- 普罗高可用:高可用会在集群中将Prometheus-server、Prometheus-operator、thanos-query、custom-metrics-apiserver、alertmanager组件按多实例方式部署。
- 安装grafana:通过 grafana 可视化浏览普罗监控数据。grafana 会默认创建大小为 5 GiB 的存储卷,卸载插件时 grafana 的存储卷不随插件被删除。首次登录默认用户名与密码均为 admin,登录后会立即让您修改密码。
- 采集周期:采集监控数据的周期。
- 调度策略:可单独配置插件各个组件的节点亲和性和污点容忍能力。可以配置多个调度策略,不配置亲和节点键和容忍节点污点键则默认不开启对应的调度策略。
- 作用范围:可选择调度策略生效的插件实例,默认对全部实例生效。当指定组件实例名称时,将覆盖全部实例所配置的调度策略。
- 亲和节点标签键:填写节点标签键,为插件实例设置节点亲和性。
- 亲和节点标签值:填写节点标签值,为插件实例设置节点亲和性。
- 容忍节点污点键:目前仅支持污点键级别的污点容忍策略,组件可以调度到拥有该污点键的节点。
- 完成以上配置后,单击“安装”。
插件安装完成后,根据您的使用需求,可能还需进行以下操作:
- 如果您需要使用该插件为工作负载弹性伸缩提供系统资源指标(如CPU、内存使用量),还需要开启Metric API,详情请参见通过Metrics API提供资源指标。配置完成后,可使用Prometheus采集系统资源指标,无需重复安装metrics-server插件。
- 如需采集自定义的指标,还需配置自定义指标的采集规则,配置完成后可以实现自定义指标的监控告警,并且支持使用自定义指标创建弹性伸缩策略。详情请参见使用Prometheus监控自定义指标。
- 如果您在安装插件时同时选择了安装grafana,您可以访问grafana查看数据大盘。
组件说明
安装kube-prometheus-stack插件创建的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提供资源指标
容器和节点的资源指标,如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资源将导致metrics-server插件安装失败。
kubectl delete APIService v1beta1.metrics.k8s.io
配置自定义指标的采集规则
新版本的kube-prometheus-stack插件不再提供自定义配置的指标,即user-adapter-config配置项(历史版本插件中该配置项的名称为adapter-config)中不再配置指标采集规则,请您自行添加。关于采集规则配置详情请参见Metrics Discovery and Presentation Configuration。如您从老版本插件升级至新版,则原有的该配置会被继承,不会丢失。
使用Prometheus监控自定义指标时,应用程序需要提供监控指标接口,详情请参见Prometheus监控数据采集说明。
- 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“配置项与密钥”。
- 切换至“monitoring”命名空间,在“配置项”页签找到user-adapter-config配置项(历史版本插件中该配置项的名称为adapter-config),并单击“更新”。
- 在“配置数据”中单击config.yaml对应的“编辑”按钮,在rules字段下添加自定义指标采集规则。修改完成后单击“确定”保存配置。
如果您需要增加多个采集规则,可在rules字段下添加多个配置,关于采集规则配置详情请参见Metrics Discovery and Presentation Configuration。
自定义采集规则示例如下:rules: # 此规则匹配以秒为单位的累积cAdvisor指标 - seriesQuery: '{__name__=~"^container_.*",container!="POD",namespace!="",pod!=""}' resources: # 指定Pod和命名空间资源 overrides: namespace: resource: namespace pod: resource: pod name: #删除`container_`前缀和`_seconds_total`后缀,使用(.*)中捕获的内容作为指标名称 matches: "^container_(.*)_seconds_total$" #查询指标,其中`.Series`和`.LabelMatchers`在Go语言中可用,此处使用分隔符`<<`和`>>`避免与prometheus查询语言冲突 metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>,container!="POD"}[2m])) by (<<.GroupBy>>)'
上述示例仅采集Pod基本指标,如需采集自定义指标请根据官方指导自行添加或修改规则。
- 重新部署monitoring命名空间下的custom-metrics-apiserver工作负载。
访问grafana
如果在安装插件时安装了grafana,可以通过名为grafana的Service访问,grafana Service类型为节点访问,如果是从外网访问,可以给节点绑定EIP,通过节点端口访问。
如下图,访问地址为 http://{{节点EIP}}:30913
采集Pod所有labels和annotations
- 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“工作负载”。
- 切换至“monitoring”命名空间,在“无状态负载”页签找到kube-state-metrics负载,并单击“升级”。
- 在容器配置的“生命周期”中,编辑启动命令。
在原有的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 | kube_pod_labels
更多kube-state-metrics的启动参数请参见kube-state-metrics/cli-arguments。