云原生监控插件
插件简介
云原生监控插件(kube-prometheus-stack)通过使用Prometheus-operator和Prometheus,提供简单易用的端到端Kubernetes集群监控能力。
约束与限制
- 在默认配置下,插件中的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: []
权限说明
云原生监控插件中的node-exporter组件会监控Docker的存储磁盘空间,需要读取宿主机的/var/run/docker.sock的获取Docker的info的数据。
node-exporter运行需要以下特权:
- cap_dac_override:读取Docker的info的数据。
安装插件
- 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“插件中心”,在右侧找到云原生监控插件,单击“安装”。
- 在安装插件页面,进行规格配置。
- 部署模式:3.7.1及以上版本的插件支持选择部署模式。
- Agent模式:本地不存储数据,占用资源较少,但是不支持HPA能力。
使用Agent模式时,由于本地不再存储监控数据,因此必须对接AOM或第三方监控系统。
- Server模式:本地存储数据,占用资源较多,支持所有能力。
- Agent模式:本地不存储数据,占用资源较少,但是不支持HPA能力。
- 容器:插件创建的组件实例,详情请参见组件说明。您可以根据需求选择相应的规格或自定义规格。
- 部署模式:3.7.1及以上版本的插件支持选择部署模式。
- 配置相关参数。
- 对接三方:将普罗数据上报至第三方监控系统,需填写第三方监控系统的地址和Token,并选择是否跳过证书认证。
- 自定义指标采集:以服务发现的形式自动采集应用的指标。
- 普罗高可用:高可用会在集群中将Prometheus-server、Prometheus-operator、thanos-query、custom-metrics-apiserver、alertmanager组件按多实例方式部署。
- 采集分片数:将采集Targets分配到不同的Prometheus分片实例上,可以增加指标的采集吞吐上限,但会消耗更多的资源,建议在集群规模较大时设置。
- 采集周期:设置采集时间间隔周期。
- 存储:选择用于存储监控数据的磁盘类型和大小。卸载插件时存储卷不随插件删除。
若monitoring命名空间下已存在可使用的PVC(名称为pvc-prometheus-server),将使用该存储作为存储源。
- 调度策略:可单独配置插件各个组件的节点亲和性和污点容忍能力。可以配置多个调度策略,不配置亲和节点键和容忍节点污点键则默认不开启对应的调度策略。
- 作用范围:可选择调度策略生效的插件实例,默认对全部实例生效。当指定组件实例名称时,将覆盖全部实例所配置的调度策略。
- 亲和节点标签键:填写节点标签键,为插件实例设置节点亲和性。
- 亲和节点标签值:填写节点标签值,为插件实例设置节点亲和性。
- 容忍节点污点键:目前仅支持污点键级别的污点容忍策略,组件可以调度到拥有该污点键的节点。
- 完成以上配置后,单击“安装”。
插件安装完成后,根据您的使用需求,可能还需进行以下操作:
- 如需使用自定义指标创建弹性伸缩策略,请确认云原生监控插件的部署模式为Server模式,然后参考以下步骤:
- 采集应用上报的自定义指标至Prometheus,详情请参见使用云原生监控插件监控自定义指标。
- 将Prometheus采集到的自定义指标聚合到API Server,可供HPA策略使用,详情请参见使用自定义指标创建HPA策略。
- 如果您需要使用该插件为工作负载弹性伸缩提供系统资源指标(如CPU、内存使用量),还需要开启Metric API,详情请参见通过Metrics API提供资源指标。配置完成后,可使用Prometheus采集系统资源指标。(不推荐)
- 如需使用自定义指标创建弹性伸缩策略,请确认云原生监控插件的部署模式为Server模式,然后参考以下步骤:
组件说明
安装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
使用自定义指标创建HPA策略
云原生监控插件的部署模式是Server模式时,才能使用自定义指标HPA功能,您可在user-adapter-config配置项中配置HPA弹性策略需要的自定义指标。
使用Prometheus监控自定义指标时,应用程序需要提供监控指标接口,详情请参见Prometheus监控数据采集说明。
以下案例中使用使用云原生监控插件监控自定义指标中的nginx指标(nginx_connections_accepted)作为配置示例。
- 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“配置与密钥”。
- 切换至“monitoring”命名空间,在“配置项”页签找到user-adapter-config配置项(或adapter-config),并单击“更新”。
- 在“配置数据”中单击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])'
- 重新部署monitoring命名空间下的custom-metrics-apiserver工作负载。
- 在左侧导航栏中选择“工作负载”,找到需要创建HPA策略的工作负载单击“更多>弹性伸缩”。您可在“自定义策略”中选择上述参数创建弹性伸缩策略。
采集Pod所有labels和annotations
- 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“工作负载”。
- 切换至“monitoring”命名空间,在“无状态负载”页签找到kube-state-metrics负载,并单击“升级”。
- 在容器配置的“生命周期”中,编辑启动命令。
采集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。