基于Prometheus的全方位监控平台--K8S集群层面监控

一、KubeStateMetrics简介

kube-state-metrics 是一个 Kubernetes 组件,它通过查询 Kubernetes 的 API 服务器,收集关于 Kubernetes 中各种资源(如节点、pod、服务等)的状态信息,并将这些信息转换成 Prometheus 可以使用的指标。

kube-state-metrics 主要功能:

  1. 节点状态信息,如节点 CPU 和内存的使用情况、节点状态、节点标签等。
  2. Pod 的状态信息,如 Pod 状态、容器状态、容器镜像信息、Pod 的标签和注释等。
  3. Deployment、Daemonset、Statefulset 和 ReplicaSet 等控制器的状态信息,如副本数、副本状态、创建时间等。
  4. Service 的状态信息,如服务类型、服务 IP 和端口等。
  5. 存储卷的状态信息,如存储卷类型、存储卷容量等。
  6. Kubernetes 的 API 服务器状态信息,如 API 服务器的状态、请求次数、响应时间等。

通过 kube-state-metrics 可以方便的对 Kubernetes 集群进行监控,发现问题,以及提前预警。

二、KubeStateMetrics

包含ServiceAccountClusterRoleClusterRoleBindingDeploymentConfigMapService 六类YAML文件

确认验证:

2.1、新增 Kubernetes 集群架构监控

prometheus-config.yaml 一次添加如下采集数据:

2.1.1、kube-apiserver

需要注意的是使用https访问时,需要tls相关配置,可以指定ca证书路径或者 insecure_skip_verify: true跳过证书验证。

除此之外,还要指定 bearer_token_file,否则会提示 server returned HTTP status 400 Bad Request;

2.1.2、controller-manager

由上可知,匹配pod对象,lable标签为component=kube-controller-manager即可,但需注意的是controller-manager默认只运行127.0.0.1访问,因此还需先修改controller-manager配置.

2.1.3、scheduler

由上可知,匹配pod对象,lable标签为component=kube-scheduler即可scheduler和controller-manager一样,默认监听0端口,需要注释

修改 /etc/kubernetes/manifests/kube-scheduler.yaml

2.1.4、kube-state-metrics
2.1.5、coredns
2.1.6、etcd

由上可知,启动参数里面有一个 --listen-metrics-urls=http://127.0.0.1:2381 的配置,该参数就是来指定 Metrics 接口运行在 2381 端口下面的,而且是 http 的协议,所以也不需要什么证书配置,这就比以前的版本要简单许多了,以前的版本需要用 https 协议访问,所以要配置对应的证书。但是还需修改配置文件,地址改为0.0.0.0

上面部分参数简介如下:

热加载prometheus,使configmap配置文件生效(也可以等待prometheus的自动热加载):

三、cAdvisor

cAdvisor 主要功能:

3.1、Prometheus 添加 cAdvisor 配置

由于 Kubelet 中已经默认集成 cAdvisor 组件,所以无需部署该组件。需要注意的是,他的指标采集地址为 /metrics/cadvisor,需要配置https访问,可以设置 insecure_skip_verify: true 跳过证书验证;

热加载prometheus,使configmap配置文件生效:

四、node-exporter

Node Exporter 是 Prometheus 官方提供的一个节点资源采集组件,可以用于收集服务器节点的数据,如 CPU频率信息、磁盘IO统计、剩余可用内存等等。

部署创建:

由于是针对所有K8S-node节点,所以我们这边使用DaemonSet这种方式;

node_exporter.yaml文件说明:

验证:

4.1、新增 k8s-node 监控

prometheus-config.yaml 中新增采集 job:k8s-nodes

node_exporter也是每个node节点都运行,因此role使用node即可,默认address端口为10250,替换为9100即可;

热加载prometheus,使configmap配置文件生效:

五、总结

这三种工具可以协同工作,为用户提供一个全面的 Kubernetes 监控方案,帮助用户更好地了解其 Kubernetes 集群和容器化应用程序的运行情况。