第三篇 kubernetes使用Operator部署Prometheus监控

1.什么是Operator

Operator是由CoreOS开发的,用来扩展Kubernetes API,特定的应用程序控制器,它用来创建、配置和管理复杂的有状态应用,如数据库、缓存和监控系统。Operator基于Kubernetes的资源和控制器概念之上构建,但同时又包含了应用程序特定的领域知识。创建Operator的关键是CRD(自定义资源)的设计。

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

资源:对象的状态定义
控制器:观测、分析和行动,以调节资源的分布
当前CoreOS提供的以下四种Operator:
(1)  etcd:创建etcd集群
(2)  Rook:云原生环境下的文件、块、对象存储服务
(3)  Prometheus:创建Prometheus监控实例
(4) Tectonic:部署Kubernetes集群
接下来我们将使用Operator创建Prometheus。

2. 开始部署prometheus

我们这里直接通过 Prometheus-Operator 的源码来进行安装,当然也可以用 Helm 来进行一键安装,我们采用源码安装可以去了解更多的实现细节。首页将源码 Clone 下来:
#yum install git -y 
#mkdir /root/k8s/prometheus/
#git clone https://github.com/coreos/prometheus-operator     ### 0.30.0版本之前
#git clone https://github.com/coreos/kube-prometheus         ### 0.30.0版本之后
#cd kube-prometheus/manifests

#进入到 manifests 目录下面,这个目录下面包含我们所有的资源清单文件,直接在该文件夹下面执行创建资源命令即可:

#kubectl create -f setup/
#kubectl create -f .
部署完成后,会创建一个名为monitoring的 namespace,所有资源对象对将部署在该命名空间下面,此外 Operator 会自动创建4个 CRD 资源对象:
# kubectl get crd |grep coreos

![](https://img2020.cnblogs.com/blog/2104126/202012/2104126-20201201115651160-597616715.png)

可以在 monitoring 命名空间下面查看所有的 Pod,其中 alertmanager 和 prometheus 是用 StatefulSet 控制器管理的,其中还有一个比较核心的 prometheus-operator 的 Pod,用来控制其他资源对象和监听对象变化的:
等待所有pod变成Running 大致用了 7分钟。
# kubectl  get pod -n monitoring

查看创建的 Service:

可以看到上面针对 grafana 和 prometheus 都创建了一个类型为 ClusterIP 的 Service。
当然如果我们想要在外网访问这两个服务的话可以通过创建对应的 Ingress 对象或者使用 NodePort 类型的 Service。
我们这里为了简单,直接使用 NodePort 类型的服务即可,编辑 grafana 和 prometheus-k8s 这两个 Service,将服务类型更改为 NodePort:
#kubectl edit svc prometheus-k8s -n monitoring
type: ClusterIP  修改为   type: NodePort

 浏览器访问如下两个地址:
grafana:   http://192.168.25.65:30072/
prometheus:    http://192.168.25.65:32424/


grafana  的 面板可以从官网上下载进行导入,当然默认部署的也会自带一些常用的面板。
官网地址: https://grafana.com/grafana/dashboards

3. 修改prometheus配置使targets生效

在prometheus 的 tagets 中我们可以看到大部分的配置都是正常的,只有两三个没有管理到对应的监控目标,比如 kube-controller-manager 和 kube-scheduler 这两个系统组件,这就和 ServiceMonitor 的定义有关系了。

我们通过selector.matchLabels在 kube-system 这个命名空间下面匹配具有k8s-app=kube-scheduler这样的 Service,但是我们系统中根本就没有对应的 Service,所以我们需要手动创建一个 Service:(prometheus-kubeSchedulerService.yaml)
#vi  prometheus-kubeSchedulerService.yaml
apiVersion: v1
kind: Service
metadata:
  namespace: kube-system
  name: kube-scheduler
  labels:
    k8s-app: kube-scheduler
spec:
  selector:
    component: kube-scheduler
  ports:
  - name: http-metrics
    port: 10251
    targetPort: 10251
    protocol: TCP


#kubectl create -f prometheus-kubeSchedulerService.yaml
#kubectl get svc -n kube-system -l k8s-app=kube-scheduler
NAME             TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)     AGE
kube-scheduler   ClusterIP   10.1.53.61   <none>        10251/TCP   9s

我们可以看到现在已经发现了 target,但是抓取数据结果出错了,这个错误是因为我们集群是使用 kubeadm 搭建的,其中 kube-scheduler 默认是绑定在127.0.0.1上面的,而上面我们这个地方是想通过节点的 IP 去访问,所以访问被拒绝了,我们只要把 kube-scheduler 绑定的地址更改成0.0.0.0即可满足要求,由于 kube-scheduler 是以静态 Pod 的形式运行在集群中的,所以我们只需要更改静态 Pod 目录下面对应的 YAML (kube-scheduler.yaml)文件即可:
# cd /etc/kubernetes/manifests
将 kube-scheduler.yaml 文件中-command的--address地址更改成0.0.0.0
# vi kube-scheduler.yaml
--address地址更改成0.0.0.0

同上 kube-controller-manager  的修改方式一样:
#vi  prometheus-kubecontrollermanagerService.yaml
apiVersion: v1
kind: Service
metadata:
  namespace: kube-system
  name: kube-controller-manager
  labels:
    k8s-app: kube-controller-manager
spec:
  selector:
    component: kube-controller-manager
  ports:
  - name: http-metrics
    port: 10252
    targetPort: 10252
    protocol: TCP

#kubectl  create -f prometheus-kubecontrollermanagerService.yaml


将 /etc/kubernetes/manifests/kube-controller-manager.yaml  文件中-command的--address地址更改成0.0.0.0
# vi  /etc/kubernetes/manifests/kube-controller-manager.yaml
-command的--address地址更改成0.0.0.0

等待一短时间后刷新在看,就会获取到target 了。

4.給grafana配置webhook报警

这里为了实验方便 我们使用grafana 的alert 告警来配置模拟告警的情况。
首先从grafana 官网上查找可直接用于设置告警的面板https://grafana.com/grafana/dashboards/5984  进行导入

随后参考如下配置:




然后就可以在grafana面板上收到告警信息了。

本篇到此就结束了,后续更新可能需要放慢速度了,太累了。。。。。

posted @ 2020-12-02 14:43  南风不知我意  阅读(570)  评论(0编辑  收藏  举报