- A+
关于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