1. 项目目标
(1)了解Prometheus-Operator的优势
(2)熟练掌握Prometheus-Operator部署
(3)操作Grafana对接Prometheus
2. 项目准备
2.1. 规划节点
主机名 | 主机IP | 节点规划 |
Prometheus | 主机IP | Prometheus-Operator |
2.2. 基础准备
系统镜像:CentOS 7.9
github下载网址:prometheus-operator · GitHub
环境准备:kubernetes v1.26
3. 项目实施
3.1. Prometheus-Operator简介
1)什么是Prometheus-Operator
每次对Prometheus配置文件进行升级时,我们需要手动移除已经运行的Pod实例,从而让Kubernetes可以使用最新的配置文件创建Prometheus。 而如果当应用实例的数量更多时,通过手动的方式部署和升级Prometheus过程繁琐并且效率低下。
从本质上来讲Prometheus属于是典型的有状态应用,而其有包含了一些自身特有的运维管理和配置管理方式。而这些都无法通过Kubernetes原生提供的应用管理概念实现自动化。为了简化这类应用程序的管理复杂度,CoreOS率先引入了Operator的概念,并且首先推出了针对在Kubernetes下运行和管理Etcd的Etcd Operator。并随后推出了Prometheus Operator。
2)Prometheus Operator的工作原理
从概念上来讲Operator就是针对管理特定应用程序的,在Kubernetes基本的Resource和Controller的概念上,以扩展Kubernetes api的形式。帮助用户创建,配置和管理复杂的有状态应用程序。从而实现特定应用程序的常见操作以及运维自动化。
在Kubernetes中我们使用Deployment、DamenSet,StatefulSet来管理应用Workload,使用Service,Ingress来管理应用的访问方式,使用ConfigMap和Secret来管理应用配置。我们在集群中对这些资源的创建,更新,删除的动作都会被转换为事件(Event),Kubernetes的Controller Manager负责监听这些事件并触发相应的任务来满足用户的期望。这种方式我们成为声明式,用户只需要关心应用程序的最终状态,其它的都通过Kubernetes来帮助我们完成,通过这种方式可以大大简化应用的配置管理复杂度。
而除了这些原生的Resource资源以外,Kubernetes还允许用户添加自己的自定义资源(Custom Resource)。并且通过实现自定义Controller来实现对Kubernetes的扩展。
如下所示,是Prometheus Operator的架构示意图:
Prometheus Operator架构
Prometheus的本职就是一组用户自定义的CRD资源以及Controller的实现,Prometheus Operator负责监听这些自定义资源的变化,并且根据这些资源的定义自动化的完成如Prometheus Server自身以及配置的自动化管理工作。
3)相比原生Prometheus其优势?
Prometheus Operator 是一个为 Kubernetes 设计的 Prometheus 监控系统的自动化管理工具,它在 Prometheus 的基础上提供了一系列的优势和增强功能:
- 自动化部署:Prometheus Operator 可以自动创建和管理 Prometheus 实例,简化了部署过程。
- 声明式配置:通过 Kubernetes 的自定义资源定义(CRDs),Prometheus Operator 允许使用声明式配置来管理 Prometheus 实例,ServiceMonitors,Alertmanagers 等。
- 自动发现:Prometheus Operator 支持自动发现 Kubernetes 服务和 Pod,减少了手动配置的需要。
- 水平扩展:Prometheus Operator 支持 Prometheus 实例的水平扩展,可以根据需求自动调整实例数量。
- 高可用性:Prometheus Operator 支持在 Kubernetes 集群中自动部署多个 Prometheus 实例,以实现高可用性。
- 集成 Alertmanager:Prometheus Operator 可以自动配置和管理 Alertmanager 实例,简化了告警系统的设置和管理。
- 监控规则管理:通过 PrometheusRule CRD,Prometheus Operator 允许定义告警规则,这些规则可以自动被 Prometheus 加载。
- ServiceMonitor CRD:允许定义要监控的 Kubernetes 服务,Prometheus Operator 将自动生成适当的监控配置。
- 维护简便:Prometheus Operator 封装了 Prometheus 的运维经验,提供了友好的管理接口,简化了日常的维护工作。
- 社区支持:由于 Prometheus Operator 是一个活跃的开源项目,它拥有一个强大的社区支持,这意味着用户可以从社区中获得帮助和分享最佳实践。
- 与 Grafana 的集成:Prometheus Operator 通常与 Grafana 一起使用,用于可视化监控数据,它简化了 Grafana Dashboard 的配置和使用。
- 适应 Kubernetes 生态:Prometheus Operator 作为 Kubernetes 生态的一部分,与 Kubernetes 的其他组件和工具(如 kube-prometheus-stack)有很好的集成。
3.2. 部署Prometheus-Operator
1)查看自己的kubernetes集群环境
[root@prometheus ]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
10.0.1.10 Ready master 42m v1.26.0
2)下载kube-prometheus
git clone -b release-0.13 https://github.com/prometheus-operator/kube-prometheus.git
根据自己的环境更改release版本号
3)部署
[root@prometheus ~]# cd kube-prometheus/
[root@prometheus ~]# kubectl apply --server-side -f manifests/setup
[root@prometheus ~]# kubectl wait \--for condition=Established \--all CustomResourceDefinition \--namespace=monitoring
[root@prometheus ~]# kubectl apply -f manifests/
4)查看pod状态
[root@prometheus ~]# kubectl get pod -n monitoring
NAME READY STATUS RESTARTS AGE
alertmanager-main-0 2/2 Running 0 28m
alertmanager-main-1 2/2 Running 0 28m
alertmanager-main-2 2/2 Running 0 28m
blackbox-exporter-59dddb7bb6-sj8lt 3/3 Running 0 28m
grafana-79f47474f7-nxnkv 1/1 Running 0 28m
kube-state-metrics-5884fb96b-6vx92 3/3 Running 0 28m
node-exporter-pwnj7 2/2 Running 0 28m
prometheus-adapter-6c4cc5465b-htb7z 1/1 Running 0 28m
prometheus-adapter-6c4cc5465b-s9hv7 1/1 Running 0 28m
prometheus-k8s-0 2/2 Running 0 28m
prometheus-k8s-1 2/2 Running 0 28m
prometheus-operator-57cf88fbcb-hxjdp 2/2 Running 0 28m
全部pod running了就代表部署成功。
5)访问Prometheus
[root@prometheus ~]# kubectl get svc -n monitoring
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
alertmanager-main ClusterIP 10.68.101.241 <none> 9093/TCP,8080/TCP 34m
alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 34m
blackbox-exporter ClusterIP 10.68.86.56 <none> 9115/TCP,19115/TCP 34m
grafana ClusterIP 10.68.11.125 <none> 3000/TCP 34m
kube-state-metrics ClusterIP None <none> 8443/TCP,9443/TCP 34m
node-exporter ClusterIP None <none> 9100/TCP 34m
prometheus-adapter ClusterIP 10.68.185.106 <none> 443/TCP 34m
prometheus-k8s ClusterIP 10.68.102.244 <none> 9090/TCP,8080/TCP 34m
prometheus-operated ClusterIP None <none> 9090/TCP 34m
prometheus-operator ClusterIP None <none> 8443/TCP 34m
[root@prometheus ~]# kubectl edit svc -n monitoring prometheus-k8s
端口映射port-forward方法
Prometheus:
kubectl --namespace monitoring port-forward svc/prometheus-k8s --address 0.0.0.0 19090:9090
Grafana:
kubectl --namespace monitoring port-forward svc/grafana --address 0.0.0.0 13000:3000
默认账号密码:admin/admin
Alertmanager:
kubectl --namespace monitoring port-forward svc/alertmanager-main --address 0.0.0.0 19093:9093
NodePort暴露端口方法
Prometheus:
apiVersion: v1
kind: Service
metadata:labels:app.kubernetes.io/component: prometheusapp.kubernetes.io/instance: k8sapp.kubernetes.io/name: prometheusapp.kubernetes.io/part-of: kube-prometheusapp.kubernetes.io/version: 2.46.0name: prometheus-k8snamespace: monitoring
spec:type: NodePort #修改添加svc的typeports:- name: webport: 9090targetPort: webnodePort: 30001 #添加修改需要暴露的nodeport- name: reloader-webport: 8080targetPort: reloader-webselector:app.kubernetes.io/component: prometheusapp.kubernetes.io/instance: k8sapp.kubernetes.io/name: prometheusapp.kubernetes.io/part-of: kube-prometheussessionAffinity: ClientIP
[root@prometheus kube-prometheus]# kubectl apply -f manifests/prometheus-service
Grafana:
apiVersion: v1
kind: Service
metadata:labels:app.kubernetes.io/component: grafanaapp.kubernetes.io/name: grafanaapp.kubernetes.io/part-of: kube-prometheusapp.kubernetes.io/version: 9.5.3name: grafananamespace: monitoring
spec:type: NodePort #修改添加svc的typeports:- name: httpport: 3000targetPort: httpnodePort: 30002 #添加修改需要暴露的nodeportselector:app.kubernetes.io/component: grafanaapp.kubernetes.io/name: grafanaapp.kubernetes.io/part-of: kube-prometheus
[root@prometheus kube-prometheus]# kubectl apply -f manifests/grafana-service.yaml
3.3. Grafana对接Prometheus
在左侧菜单栏找到 Administration -> Data sources
添加 Data sources
输入Prometheus连接信息
单击Test,出现Data source is working即为成功
然后到Grafana控制台进行导入模版,单击右侧加号 -> Import dashboard
输入k8s for Prometheus的ID号 15661 -> load
填写options详细信息 -> import
查看k8s的dashboard
4. 项目总结
本博客讲解了Prometheus的简介,以及如何通过Prometheues Opeartor方式进行快速部署Prometheues以及Grafana模版使用等内容。