operator-prometheus
k8s部署operator-Prometheus
背景
随着云原生概念盛行,对于容器、服务、节点以及集群的监控变得越来越重要。Prometheus作为Kubernetes监控的事实标准,有着强大的功能和良好的生态。但是它不支持分布式,不支持数据导入、导出,不支持通过API修改监控目标和报警规则,所以在使用它时,通常需要写脚本和代码来简化操作。
operator 介绍
Operator是由CoreOS公司开发的用来扩展Kubernetes API的特定应用程序控制器,用来创建、配置和管理复杂的有状态应用,例如数据库、缓存和监控系统。Operator基于kubernetes的资源和控制器概念上构建,但同时又包含了应用程序特定的领域知识。创建Operator的关键是CRD(自定义资源)的设计。
Operator是将运维人员对软件操作的知识代码化,同时利用Kubernetes强大的抽象来管理大规模的软件应用。目前CoreOS官方提供了几种Operator的实现,其中就包括了Prometheus Operator。
Operator的核心实现是基于Kubernetes的以下两个概念:
● 资源:对象的状态定义
● 控制器:观测、分析和行动,以调节资源的分布
当前CoreOS提供了四种Operator:
● etcd:创建etcd集群
● Rook:云原生环境下的文件、块、对象存储服务
● Prometheus:创建Prometheus监控实例
● Tectonic:部署Kubernetes集群
Prometheus Operator介绍
Prometheus Operator为监控Kubernetes Service、Deployment和Prometheus实例的管理提供了简单的定义,简化在Kubernetes上部署、管理和运行Prometheus和Alertmanager集群。
Prometheus Operator作为一个控制器,他会去创建Prometheus、PodMonitor、ServiceMonitor、AlertManager以及PrometheusRule这5个CRD资源对象,然后会一直监控并维持这5个资源对象的状态。
● Prometheus资源对象是作为Prometheus Service存在的
● ServiceMonitor和PodMonitor资源对象是专门的提供metrics数据接口的exporter的抽象,Prometheus就是通过PodMonitor和ServiceMonitor提供的metrics数据接口去pull数据的
● AlertManager资源对象对应的是alertmanager组件
● PrometheusRule资源对象是被Prometheus实例使用的告警规则文件
Prometheus Operator架构图
上面各组件以不同的方式运行在Kubernetes集群中
● Operator:根据自定义资源(Custom Resource Definition,CRD)来部署和管理Prometheus Server,同时监控这些自定义资源事件的变化来做相应的处理,是整个系统的控制中心。
● Prometheus:Prometheus资源是声明性地描述Prometheus部署的期望状态。
● Prometheus Server:Operator根据自定义资源Prometheus类型中定义的内容而部署的Prometheus Server集群,这些自定义资源可以看作用来管理Prometheus Server 集群的StatefulSets资源。
● ServiceMonitor:声明指定监控的服务,描述了一组被Prometheus监控的目标列表。该资源通过标签来选取对应的Service Endpoint,让Prometheus Server通过选取的Service来获取Metrics信息。
● Service:简单的说就是Prometheus监控的对象。提供给ServiceMonitor选取,让Prometheus Server来获取信息。
● Alertmanager:Alertmanager也是一个自定义资源类型,由Operator根据资源描述内容来部署Alertmanager集群。
通过operator 部署Prometheus
● k8s版本1.23 部署对应的0.11版本
克隆项目到本地
[root@k8s-master ~]# git clone -b release-0.11 https://github.com/prometheus-operator/kube-prometheus.git
过滤需要的镜像
[root@k8s-master ~]# cd kube-prometheus/manifests
[root@master manifests]# grep image: ./* -R
./alertmanager-alertmanager.yaml: image: quay.io/prometheus/alertmanager:v0.24.0
./blackboxExporter-deployment.yaml: image: quay.io/prometheus/blackbox-exporter:v0.21.0
./blackboxExporter-deployment.yaml: image: jimmidyson/configmap-reload:v0.5.0
./blackboxExporter-deployment.yaml: image: quay.io/brancz/kube-rbac-proxy:v0.12.0
....
有一个镜像地址下载不到需要修改对应的yaml文件
[root@master manifests]# cat kubeStateMetrics-deployment.yaml |grep -A2 image
image: bitnami/kube-state-metrics:2.5.0
name: kube-state-metrics
resources:
[root@master manifests]# cat prometheusAdapter-deployment.yaml |grep image
image: k8s.dockerproxy.com/prometheus-adapter/prometheus-adapter:v0.9.1
移动networkPolicy
[root@master manifests]# mkdir networkPolicy.bak
[root@master manifests]# mv *networkPolicy*.yaml networkPolicy.bak/
修改service文件 暴露grafana nodeport alertmanager
[root@master manifests]# cat grafana-service.yaml |grep -A5 type
type: NodePort
ports:
- name: http
port: 3000
targetPort: http
nodePort: 30300
暴露Prometheus nodeport
[root@master manifests]# cat prometheus-service.yaml |grep -A10 type
type: NodePort
ports:
- name: web
port: 9090
targetPort: web
nodePort: 30900
- name: reloader-web
port: 8080
targetPort: reloader-web
nodePort: 30800
暴露alertmanager nodeport #随机端口
[root@master manifests]# cat alertmanager-service.yaml |grep -A10 type
type: NodePort
ports:
- name: web
port: 9093
targetPort: web
- name: reloader-web
port: 8080
targetPort: reloader-web
开始部署 先创建资源
[root@master manifests]# kubectl apply --server-side -f setup/
创建服务
[root@master kube-prometheus]# kubectl apply -f manifests/
# 卸载
# kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup
查看Pod状态
[root@master ~]# kubectl get po,svc -n monitoring
NAME READY STATUS RESTARTS AGE
pod/alertmanager-main-0 2/2 Running 0 13m
pod/alertmanager-main-1 2/2 Running 0 13m
pod/alertmanager-main-2 2/2 Running 0 13m
pod/blackbox-exporter-746c64fd88-jlsd8 3/3 Running 0 13m
pod/grafana-5fc7f9f55d-v6c9r 1/1 Running 0 13m
pod/kube-state-metrics-6d7746678c-r5bmr 3/3 Running 0 13m
pod/node-exporter-5dvn2 2/2 Running 0 13m
pod/node-exporter-d2dmt 2/2 Running 0 13m
pod/node-exporter-lb5hh 2/2 Running 0 13m
pod/node-exporter-skk8w 2/2 Running 0 13m
pod/prometheus-adapter-56b89c8746-2lnq6 1/1 Running 0 6m46s
pod/prometheus-adapter-56b89c8746-s26lf 1/1 Running 0 6m45s
pod/prometheus-k8s-0 2/2 Running 0 13m
pod/prometheus-k8s-1 2/2 Running 0 13m
pod/prometheus-operator-f59c8b954-565tg 2/2 Running 0 13m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/alertmanager-main NodePort 10.1.102.4 <none> 9093:30568/TCP,8080:30076/TCP 3h16mservice/alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 13m
service/blackbox-exporter ClusterIP 10.1.61.138 <none> 9115/TCP,19115/TCP 14m
service/grafana NodePort 10.1.232.154 <none> 3000:30300/TCP 14m
service/kube-state-metrics ClusterIP None <none> 8443/TCP,9443/TCP 13m
service/node-exporter ClusterIP None <none> 9100/TCP 13m
service/prometheus-adapter ClusterIP 10.1.177.70 <none> 443/TCP 13m
service/prometheus-k8s NodePort 10.1.102.134 <none> 9090:30900/TCP,8080:30800/TCP 13m
service/prometheus-operated ClusterIP None <none> 9090/TCP 13m
service/prometheus-operator ClusterIP None <none> 8443/TCP 13m
访问Prometheus、grafana dashboard
[root@master ~]# hostname -i
192.168.170.10
grafana
http://192.168.170.10:30300/
账号:admin
密码:admin
Prometheus
http://192.168.170.10:30900/
修改 grafana自带dashboard的默认时区
[root@master manifests]# grep -i timezone grafana-dashboardDefinitions.yaml
"timezone": "utc",
"timezone": "UTC",
"timezone": "UTC",
。。。。
调整时区
[root@master manifests]# sed -i 's/UTC/UTC+8/g' grafana-dashboardDefinitions.yaml
[root@master manifests]# sed -i 's/utc/utc+8/g' grafana-dashboardDefinitions.yaml
[root@master manifests]# kubectl apply -f grafana-dashboardDefinitions.yaml
后续如果从官方的面板导入 时间都是 UTC 需要修改对应时区 timezone:UTC+8
"timezone": "UTC+8"
更多推荐
所有评论(0)