Kubernetes监控方案:kube-prometheus

  • A+
所属分类:Kubernetes 监控

关于Kubernetes监控,之前博客介绍过Heapster和prometheus-operator两种方案,本文不再过多介绍prometheus组建和特征,感兴趣的参考以下内容:

https://www.liuyalei.top/1614.html

https://www.liuyalei.top/1719.html

背景

从Kubernetes 1.11开始,Heapster被社区标记为已弃用,鼓励用户改用metrics-server ,并且采用第三方监控解决方案(例如Prometheus)进行补充。

Operator

Operator是由CoreOS公司开发的,用来扩展 Kubernetes API,特定的应用程序控制器,它用来创建、配置和管理复杂的有状态应用,如数据库、缓存和监控系统。Operator基于 Kubernetes 的资源和控制器概念之上构建,但同时又包含了应用程序特定的一些专业知识,比如创建一个数据库的Operator,则必须对创建的数据库的各种运维方式非常了解,创建Operator的关键是CRD(自定义资源)的设计。

CRD是对 Kubernetes API 的扩展,Kubernetes 中的每个资源都是一个 API 对象的集合,例如我们在YAML文件里定义的那些spec都是对 Kubernetes 中的资源对象的定义,所有的自定义资源可以跟 Kubernetes 中内建的资源一样使用 kubectl 操作。

Operator是将运维人员对软件操作的知识给代码化,同时利用 Kubernetes 强大的抽象来管理大规模的软件应用。目前CoreOS官方提供了几种Operator的实现,其中就包括我们今天的主角:Prometheus Operator,Operator的核心实现就是基于 Kubernetes 的以下两个概念:

资源:对象的状态定义

控制器:观测、分析和行动,以调节资源的分布

Prometheus Operator vs kube-prometheus

https://github.com/prometheus-operator/prometheus-operator

Prometheus Operator使用Kubernetes定制资源来简化Prometheus,Alertmanager和相关监视组件的部署和配置。

kube-prometheus提供了基于Prometheus和Prometheus Operator的完整集群监控堆栈的示例配置。这包括部署多个Prometheus和Alertmanager实例,指标导出器(例如用于收集节点指标的node_exporter),将Prometheus链接到各种指标端点的抓取目标配置,以及用于通知群集中潜在问题的示例警报规则。

架构说明

https://www.liuyalei.top/ueditor/php/upload/image/20190319/1552979708331018.png

Prometheus-Operator官方提供的架构图,其中Operator是最核心的部分,作为一个控制器,他会去创建Prometheus、ServiceMonitor、AlertManager以及PrometheusRule4个CRD资源对象,然后会一直监控并维持这4个资源对象的状态。

其中创建的prometheus这种资源对象就是作为Prometheus Server存在,而ServiceMonitor就是exporter的各种抽象,exporter前面我们已经学习了,是用来提供专门提供metrics数据接口的工具,Prometheus就是通过ServiceMonitor提供的metrics数据接口去 pull 数据的,当然alertmanager这种资源对象就是对应的AlertManager的抽象,而PrometheusRule是用来被Prometheus实例使用的报警规则文件。

这样我们要在集群中监控什么数据,就变成了直接去操作 Kubernetes 集群的资源对象了,是不是方便很多了。上图中的 Service 和 ServiceMonitor 都是 Kubernetes 的资源,一个 ServiceMonitor 可以通过 labelSelector 的方式去匹配一类 Service,Prometheus 也可以通过 labelSelector 去匹配多个ServiceMonitor。

部署前置条件

1、根据kubernetes实际版本选择kube-prometheus,版本信息见git,本文k8s版本16.1,组建选择release-0.3

https://github.com/prometheus-operator/kube-prometheus#kubernetes-compatibility-matrix

2、k8s集群需要安装metrics-server,参照如下链接

https://blog.51cto.com/tryingstuff/2445675?source=dra

开始部署

git clone https://github.com/coreos/kube-prometheus.git

## 因为官方把所有资源配置文件都放到一个文件目录下,这里我们为了方便,把不同服务的清单文件分别归档

cd kube-prometheus/manifests
mkdir serviceMonitor operator grafana kube-state-metrics alertmanager node-exporter adapter prometheus
mv *-serviceMonitor* serviceMonitor/
mv 0prometheus-operator* operator/
mv grafana-* grafana/
mv kube-state-metrics-* kube-state-metrics/
mv alertmanager-* alertmanager/
mv node-exporter-* node-exporter/
mv prometheus-adapter-* adapter/
mv prometheus-* prometheus/


## 首先创建prometheus监控专有命名空间

[root@k8s-master01 manifests]# kubectl apply -f 00namespace-namespace.yaml

## 部署operator

[root@k8s-master01 manifests]# kubectl apply -f operator/

## 查看pod运行情况,配置清单中镜像仓库地址为,quay.io,所以无需进行其它操作

[root@k8s-master01 manifests]# kubectl get pods -n monitoring

## 这里addon-resizer服务镜像使用的是google的仓库,我们修改为阿里云仓库

[root@k8s-master01 manifests]# vim kube-state-metrics/kube-state-metrics-deployment.yaml 
    #image: k8s.gcr.io/addon-resizer:1.8.4    ## 原有配置,注释修改为一下地址
       image: registry.aliyuncs.com/google_containers/addon-resizer:1.8.4
[root@k8s-master01 kube-state-metrics]# kubectl apply -f kube-state-metrics/

 部署其它组件

其它组件按照以上部署即可,镜像无需翻墙均可以正常下载。镜像下载速度取决与本地网络状况。

[root@k8s-master01 kube-state-metrics]# kubectl apply -f adapter/
[root@k8s-master01 kube-state-metrics]# kubectl apply -f alertmanager/
[root@k8s-master01 kube-state-metrics]# kubectl apply -f node-exporter/
[root@k8s-master01 kube-state-metrics]# kubectl apply -f grafana/
[root@k8s-master01 kube-state-metrics]# kubectl apply -f prometheus/
[root@k8s-master01 kube-state-metrics]# kubectl apply -f serviceMonitor/
[root@k8s-master01 manifests]# kubectl get all -n monitoring

查看CRD

[root@master01 ~]# kubectl  get crd|grep coreos
alertmanagers.monitoring.coreos.com           2020-08-29T19:39:50Z
podmonitors.monitoring.coreos.com             2020-08-29T19:39:50Z
prometheuses.monitoring.coreos.com            2020-08-29T19:39:50Z
prometheusrules.monitoring.coreos.com         2020-08-29T19:39:51Z
servicemonitors.monitoring.coreos.com         2020-08-29T19:39:51Z

服务全部拉起,添加ingress或者service修改NodePort,通过浏览器访问


遗留问题:

部署好后,查看prometheus target界面,看到kube-controller-manager、kube-scheduler目标主机都为0,解决方法参照如下链接

https://i4t.com/4528.html


YaLei

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: