通过Prometheus-Operator实现对k8s集群的监控

特此说明:本篇时基于prometheus-operator官网提供的kube-prometheus原生包进行部署的,由于我的k8s集群为1.18.0版本,考虑到对原生的兼容性,发现官方从release-0.5已经开始支持k8s1.18了,但是在实际使用中我使用的最新版本安装包并没有报错。 参考链接:zhuanlan.zhihu.com/p/100406234

1. 简介

随着云原生概念盛行,对于容器、服务、节点以及集群的监控变得越来越重要。Prometheus 作为 Kubernetes 监控的事实标准,有着强大的功能和良好的生态。但是它不支持分布式,不支持数据导入、导出,不支持通过 API 修改监控目标和报警规则,所以在使用它时,通常需要写脚本和代码来简化操作。Prometheus Operator 为监控 Kubernetes service、deployment 和 Prometheus 实例的管理提供了简单的定义,简化在 Kubernetes 上部署、管理和运行 Prometheus 和 Alertmanager 集群。

Prometheus Operator (后面都简称 Operater) 提供如下功能:

  1. 创建/销毁:在 Kubernetes namespace 中更加容易地启动一个 Prometheues实例,一个特定应用程序或者团队可以更容易使用 Operator。
  2. 便捷配置:通过 Kubernetes 资源配置 Prometheus 的基本信息,比如版本、存储、副本集等。
  3. 通过标签标记目标服务: 基于常见的 Kubernetes label 查询自动生成监控目标配置;不需要学习 Prometheus 特定的配置语言。

2. 架构

上面架构图中,各组件以不同的方式运行在 Kubernetes 集群中:

3. Prometheus Operater 定义了如下的四类自定义资源:

  1. Prometheus
  2. ServiceMonitor
  3. Alertmanager
  4. PrometheusRule

3.1 Prometheus

3.2 ServiceMonitor

注意:endpoints(小写)是 ServiceMonitor CRD 中的一个字段,而 Endpoints(大写)是 Kubernetes 资源类型。 ServiceMonitor 和发现的目标可能来自任何 namespace。这对于跨 namespace 的监控十分重要,比如 meta-monitoring。使用 PrometheusSpec 下 ServiceMonitorNamespaceSelector, 通过各自 Prometheus server 限制 ServiceMonitors 作用 namespece。使用 ServiceMonitorSpec 下的 namespaceSelector 可以现在允许发现 Endpoints 对象的命名空间。要发现所有命名空间下的目标,namespaceSelector 必须为空。

3.3 Alertmanager

3.4 PrometheusRule

4. 部署kube-prometheus

4.1 下载并解压

github地址:https://github.com/prometheus-operator/kube-prometheus

cd /root/pkg && mkdir k8s_prometheus
wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/heads/main.zip
unzip main.zip -d k8s_prometheus
cd k8s_prometheus/kube-prometheus-main
cd manifests

4.2 部署

cd /root/pkg/k8s_prometheus/kube-prometheus-main
kubectl create -f manifests/setup   #等执行完后通过kubectl get servicemonitors --all-namespaces查看都创建完成后在执行下一步
kubectl get servicemonitors --all-namespaces #创建完成后在执行下一步
kubectl create -f manifests/

4.3 监控访问

访问prometheus web端

访问alertmanager web端

访问grafana web端

添加数据源 导入模板

5. 遗留的问题

5.1 告警规则优化和告警媒介收发

5.2 Prometheus的持久化

都到这儿了,更多文章,详见个人微信公众号ALL In Linux,来扫一扫吧!