# Prometheus Operator部署Prometheus **Repository Path**: shi-hejun/main ## Basic Information - **Project Name**: Prometheus Operator部署Prometheus - **Description**: Prometheus Operator部署Prometheus - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-02-20 - **Last Updated**: 2025-02-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Prometheus Operator部署Prometheus ### **环境信息** | 软件 | 版本号 | | ------------------------ | --------- | | Linux | Centos7.9 | | k8s | v1.26.9 | | Docker | 25.0.4 | | kube-prometheus | v0.13.0 | | nginx-ingress-controller | v1.10.1 | ### **K8S集群信息** | 主机名 | IP | | ---------- | -------------- | | k8s-master | 192.168.72.100 | | k8s-node01 | 192.168.72.101 | | k8s-node02 | 192.168.72.102 | ### **简单介绍** [Prometheus](https://cloud.tencent.com/product/tmp?from_column=20065&from=20065) Operator 是一个 Kubernetes 的运算符(Operator),它用于简化在 Kubernetes 上部署、管理和操作 Prometheus 及相关组件的过程。 Prometheus Operator 提供了一种声明式的方式来定义和管理 Prometheus 实例、ServiceMonitors、Alertmanagers 和其他与 Prometheus 相关的资源。它使用自定义资源定义(Custom Resource Definitions,CRDs)来扩展 Kubernetes API,并通过控制器(Controller)管理这些资源的生命周期。 以下是 Prometheus Operator 的一些主要功能和概念: * Prometheus 实例管理: Prometheus Operator 允许你通过创建 Prometheus 自定义资源(Prometheus CRD)来定义和部署 Prometheus 实例。你可以指定监测目标、配置规则和警报规则等信息。 * ServiceMonitor 管理: 通过创建 ServiceMonitor 自定义资源,你可以定义要由 Prometheus 监测的服务和端点。Prometheus Operator 将根据这些定义自动配置 Prometheus 实例来收集指标。 * Alertmanager 管理: Prometheus Operator 还支持创建和管理 Alertmanager 实例。你可以使用 Alertmanager CRD 来定义警报规则并配置警报通知的接收者。 * 自动发现和自动配置: Prometheus Operator 使用 Kubernetes 的标签查询机制和服务发现特性,从而实现自动发现和配置需要监测的目标。当你添加或删除带有特定标签的 Pod 或服务时,Prometheus Operator 将相应地更新 Prometheus 配置。 * 水平伸缩和高可用性: Prometheus Operator 具有内置的水平伸缩支持,可以自动根据工作负载的变化调整 Prometheus 实例的数量。此外,它还支持在集群中自动部署多个实例以实现高可用性。 使用 Prometheus Operator 可以简化 Prometheus 的[运维](https://cloud.tencent.com/solution/operation?from_column=20065&from=20065)过程,并提供了一种基于 Kubernetes 原生特性的方式来管理和监控应用程序。它使得在 Kubernetes 集群中部署和管理 Prometheus 变得更加方便、灵活和可靠。 ![输入图片说明](2025220144922.jpg) 其中Prometheus资源描述了 Prometheus部署,而`ServiceMonitor`和`PodMonitor`资源 描述prometheus监控的服务 ### **版本支持** | kube-prometheus stack | Kubernetes 1.23 | Kubernetes 1.24 | Kubernetes 1.25 | Kubernetes 1.26 | Kubernetes 1.27 | Kubernetes 1.28 | Kubernetes 1.29 | Kubernetes 1.30 | Kubernetes 1.31 | | ------------------------------------------------------------ | --------------- | --------------- | --------------- | --------------- | --------------- | --------------- | --------------- | --------------- | --------------- | | [`release-0.11`](https://github.com/prometheus-operator/kube-prometheus/tree/release-0.11) | ✔ | ✔ | ✗ | x | x | x | x | x | x | | [`release-0.12`](https://github.com/prometheus-operator/kube-prometheus/tree/release-0.12) | ✗ | ✔ | ✔ | x | x | x | x | x | x | | [`release-0.13`](https://github.com/prometheus-operator/kube-prometheus/tree/release-0.13) | ✗ | ✗ | x | ✔ | ✔ | ✔ | x | x | x | | [`release-0.14`](https://github.com/prometheus-operator/kube-prometheus/tree/release-0.14) | ✗ | ✗ | x | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | [`main`](https://github.com/prometheus-operator/kube-prometheus/tree/main) | ✗ | ✗ | x | x | ✔ | ✔ | ✔ | ✔ | ✔ | ### **环境概览** ```bash kubectl get node NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane 44d v1.28.2 k8s-worker1 Ready 44d v1.28.0 k8s-worker2 Ready 44d v1.28.0 ``` ### **下载Prometheus-Operator** ```bash wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.14.0.zip ### 由gitee下载 git clone https://gitee.com/shi-hejun/main.git ``` 在gitee中下载下来的项目中kube-prometheus-v0.14.0.zip即为github中0.14版本的源文件。manifests目录文件中的yaml文件均修改过国内镜像。建议直接使用。如果有魔法也可解压缩源文件使用源文件。 ```javascript cd /kube-prometheus ll 总用量 184 -rw-r--r-- 1 root root 679 8月 3 13:58 build.sh -rw-r--r-- 1 root root 3039 8月 3 13:58 code-of-conduct.md -rw-r--r-- 1 root root 1422 8月 3 13:58 DCO drwxr-xr-x 2 root root 4096 8月 3 13:58 docs -rw-r--r-- 1 root root 2051 8月 3 13:58 example.jsonnet drwxr-xr-x 7 root root 4096 8月 3 13:58 examples drwxr-xr-x 3 root root 28 8月 3 13:58 experimental -rw-r--r-- 1 root root 237 8月 3 13:58 go.mod -rw-r--r-- 1 root root 59996 8月 3 13:58 go.sum drwxr-xr-x 3 root root 68 8月 3 13:58 hack drwxr-xr-x 3 root root 29 8月 3 13:58 jsonnet -rw-r--r-- 1 root root 206 8月 3 13:58 jsonnetfile.json -rw-r--r-- 1 root root 4857 8月 3 13:58 jsonnetfile.lock.json drwxr-xr-x 2 root root 6 8月 3 13:58 kube-prometheus -rw-r--r-- 1 root root 4437 8月 3 13:58 kustomization.yaml -rw-r--r-- 1 root root 11325 8月 3 13:58 LICENSE -rw-r--r-- 1 root root 2101 8月 3 13:58 Makefile drwxr-xr-x 3 root root 4096 8月 3 13:58 manifests -rw-r--r-- 1 root root 126 8月 3 13:58 NOTICE -rw-r--r-- 1 root root 38246 8月 3 13:58 README.md drwxr-xr-x 2 root root 187 8月 3 13:58 scripts -rw-r--r-- 1 root root 928 8月 3 13:58 sync-to-internal-registry.jsonnet drwxr-xr-x 3 root root 17 8月 3 13:58 tests -rw-r--r-- 1 root root 808 8月 3 13:58 test.sh ``` ### **部署文件清单** ```bash tree manifests/ manifests/ ├── alertmanager-alertmanager.yaml ├── alertmanager-podDisruptionBudget.yaml ├── alertmanager-prometheusRule.yaml ├── alertmanager-secret.yaml ├── alertmanager-serviceAccount.yaml ├── alertmanager-serviceMonitor.yaml ├── alertmanager-service.yaml ├── blackbox-exporter-clusterRoleBinding.yaml ├── blackbox-exporter-clusterRole.yaml ├── blackbox-exporter-configuration.yaml ├── blackbox-exporter-deployment.yaml ├── blackbox-exporter-serviceAccount.yaml ├── blackbox-exporter-serviceMonitor.yaml ├── blackbox-exporter-service.yaml ├── grafana-dashboardDatasources.yaml ├── grafana-dashboardDefinitions.yaml ├── grafana-dashboardSources.yaml ├── grafana-deployment.yaml ├── grafana-serviceAccount.yaml ├── grafana-serviceMonitor.yaml ├── grafana-service.yaml ├── kube-prometheus-prometheusRule.yaml ├── kubernetes-prometheusRule.yaml ├── kubernetes-serviceMonitorApiserver.yaml ├── kubernetes-serviceMonitorCoreDNS.yaml ├── kubernetes-serviceMonitorKubeControllerManager.yaml ├── kubernetes-serviceMonitorKubelet.yaml ├── kubernetes-serviceMonitorKubeScheduler.yaml ├── kube-state-metrics-clusterRoleBinding.yaml ├── kube-state-metrics-clusterRole.yaml ├── kube-state-metrics-deployment.yaml ├── kube-state-metrics-prometheusRule.yaml ├── kube-state-metrics-serviceAccount.yaml ├── kube-state-metrics-serviceMonitor.yaml ├── kube-state-metrics-service.yaml ├── node-exporter-clusterRoleBinding.yaml ├── node-exporter-clusterRole.yaml ├── node-exporter-daemonset.yaml ├── node-exporter-prometheusRule.yaml ├── node-exporter-serviceAccount.yaml ├── node-exporter-serviceMonitor.yaml ├── node-exporter-service.yaml ├── prometheus-adapter-apiService.yaml ├── prometheus-adapter-clusterRoleAggregatedMetricsReader.yaml ├── prometheus-adapter-clusterRoleBindingDelegator.yaml ├── prometheus-adapter-clusterRoleBinding.yaml ├── prometheus-adapter-clusterRoleServerResources.yaml ├── prometheus-adapter-clusterRole.yaml ├── prometheus-adapter-configMap.yaml ├── prometheus-adapter-deployment.yaml ├── prometheus-adapter-roleBindingAuthReader.yaml ├── prometheus-adapter-serviceAccount.yaml ├── prometheus-adapter-serviceMonitor.yaml ├── prometheus-adapter-service.yaml ├── prometheus-clusterRoleBinding.yaml ├── prometheus-clusterRole.yaml ├── prometheus-operator-prometheusRule.yaml ├── prometheus-operator-serviceMonitor.yaml ├── prometheus-podDisruptionBudget.yaml ├── prometheus-prometheusRule.yaml ├── prometheus-prometheus.yaml ├── prometheus-roleBindingConfig.yaml ├── prometheus-roleBindingSpecificNamespaces.yaml ├── prometheus-roleConfig.yaml ├── prometheus-roleSpecificNamespaces.yaml ├── prometheus-serviceAccount.yaml ├── prometheus-serviceMonitor.yaml ├── prometheus-service.yaml └── setup ├── 0namespace-namespace.yaml ├── prometheus-operator-0alertmanagerConfigCustomResourceDefinition.yaml ├── prometheus-operator-0alertmanagerCustomResourceDefinition.yaml ├── prometheus-operator-0podmonitorCustomResourceDefinition.yaml ├── prometheus-operator-0probeCustomResourceDefinition.yaml ├── prometheus-operator-0prometheusCustomResourceDefinition.yaml ├── prometheus-operator-0prometheusruleCustomResourceDefinition.yaml ├── prometheus-operator-0servicemonitorCustomResourceDefinition.yaml ├── prometheus-operator-0thanosrulerCustomResourceDefinition.yaml ├── prometheus-operator-clusterRoleBinding.yaml ├── prometheus-operator-clusterRole.yaml ├── prometheus-operator-deployment.yaml ├── prometheus-operator-serviceAccount.yaml └── prometheus-operator-service.yaml 1 directory, 82 files ``` ### **执行编排文件** ```bash cd /kube-prometheus kubectl apply -f manifests/setup/ kubectl apply -f manifests/ ``` 首先执行setup目录下的yaml文件创建名称空间和CRDs,避免在部署其他组件时出现竞争 ### **查看pod状态** ```bash kubectl get pods -n monitoring NAME READY STATUS RESTARTS AGE alertmanager-main-0 2/2 Running 0 62m alertmanager-main-1 2/2 Running 0 62m alertmanager-main-2 2/2 Running 0 62m blackbox-exporter-f9685c888-jtsw2 3/3 Running 0 3h18m grafana-5d59d69dc-t7kvs 1/1 Running 0 60m kube-state-metrics-7568bbcd74-msjdd 3/3 Running 0 3h18m node-exporter-j8lcx 2/2 Running 0 (2d ago) 5d22h node-exporter-ldh7p 2/2 Running 0 (2d ago) 5d22h node-exporter-pd79n 2/2 Running 0 (3h8m ago) 5d22h prometheus-adapter-6c6c4dd85-5wbj9 1/1 Running 0 3h18m prometheus-adapter-6c6c4dd85-f56x4 1/1 Running 0 3h18m prometheus-k8s-0 2/2 Running 0 62m prometheus-k8s-1 2/2 Running 0 62m prometheus-operator-7c8fdb4474-v9rw4 2/2 Running 0 3h18m # 出现如上状态,表示安装成功 ``` 注:镜像下载失败可以使用本项目中的manifasts目录中的文件均已经修改为国内镜像,或者使用其他的下载方式。 镜像: ```bash [root@k8s-master manifests]# grep -rn 'image:' * alertmanager-alertmanager.yaml:13: image: prom/alertmanager:v0.27.0 blackboxExporter-deployment.yaml:33: image: prom/blackbox-exporter:v0.25.0 blackboxExporter-deployment.yaml:61: image: bitnami/configmap-reload:0.13.1 blackboxExporter-deployment.yaml:89: image: bitnami/kube-rbac-proxy:0.18.1 dingtalk-hook.yaml:17: image: cnych/alertmanager-dingtalk-hook:v0.3.6 grafana-deployment.yaml:33: image: grafana/grafana:11.2.0 kubeStateMetrics-deployment.yaml:35: image: kubesphere/kube-state-metrics:v2.12.0 kubeStateMetrics-deployment.yaml:59: image: bitnami/kube-rbac-proxy:0.18.1 kubeStateMetrics-deployment.yaml:86: image: bitnami/kube-rbac-proxy:0.18.1 nodeExporter-daemonset.yaml:40: image: prom/node-exporter:v1.8.2 nodeExporter-daemonset.yaml:75: image: bitnami/kube-rbac-proxy:0.18.1 prometheusAdapter-deployment.yaml:41: image: v5cn/prometheus-adapter:v0.12.0 prometheusOperator-deployment.yaml:36: image: bitnami/prometheus-operator:0.55.1 prometheusOperator-deployment.yaml:58: image: bitnami/kube-rbac-proxy:0.18.1 prometheus-prometheus.yaml:29: image: prom/prometheus:v2.54.1 ``` ### **查看创建的CRD** ```bash # kubectl get crd | grep monitoring.coreos.com alertmanagerconfigs.monitoring.coreos.com 2023-08-03T06:12:40Z alertmanagers.monitoring.coreos.com 2023-08-03T06:12:40Z podmonitors.monitoring.coreos.com 2023-08-03T06:12:40Z probes.monitoring.coreos.com 2023-08-03T06:12:40Z prometheuses.monitoring.coreos.com 2023-08-03T06:12:40Z prometheusrules.monitoring.coreos.com 2023-08-03T06:12:41Z servicemonitors.monitoring.coreos.com 2023-08-03T06:12:41Z thanosrulers.monitoring.coreos.com 2023-08-03T06:12:41Z ``` CRD说明: alertmanagerconfigs: * 该CRD定义了alertmanager配置的一部分,主要是定义告警路由相关 alertmanagers: * 该CRD定义了在k8s集群中运行的Alertmanager的配置,同样提供了多种配置,包含持久化存储。 * 对于每个Alertmanager资源,Operator都会在相同的名称空间中部署一个对应配置的sts,Alertmanager pod被配置为一个包含名为alertmanager-name的secret,该secret以alertmanager.yaml为key的方式保存使用的配置文件 podmonitors: * 该CRD用于定义如何监控一组动态pod,使用标签来定义那些pod被选择进行监控。 probes: * 该CRD用于定义如何监控一组Ingress和静态目标,除了target之外,Probe对象还需要一个Prober,它是监控的目标并为prometheus提供指标的服务,例如可以通过使用blackbox-exporter来提供这个服务 prometheuses: * 该CRD声明定义了Prometheus期望在k8s集群中运行的配置,提供了配置选项来配置副本、持久化、报警等 * 对于每个Prometheus CRD资源,Operator都会以sts形式在形同的名称空间下部署对应配置,proemtheus pod的配置是通过一个包含prometheus配置的名为prometheus-name的secret对象声明挂载的 * 该CRD根据标签选择来指定部署到prometheus实例应该覆盖那些ServiceMonitors,然后Operator会根据包含的ServiceMonitor生成配置,并在包含配置的secret中进行更新 prometheusrules: * 用于配置prometheus的rule规则文件,包括recording rule和alerting,可以自动被prometheus加载 servicemonitors: * 该CRD定义了如何监控一组动态的服务,使用标签来定义那些service被选择进行监控 * 为了让Prometheus金控k8s内的任何应用,需要存在一个Endpoints对象,Endpoints对象本质上时IP地址的列表,通常Endpoints对象是由Service对象自动填充的,Service对象通过标签选择器匹配pod,并将其添加到Endpoints对象中,一个Service可以暴露一个或多个端口,这些端口由多个Endpoints列表支持,这些端点一般情况下都是指向一个pod * 注意:endpoints是ServiceMonitor CRD中的字段,Endpoints是k8s的一种对象 thanosrulers: * 该CRD定义了一个Thanos Ruler组件的配置,以方便在k8s集群中运行,通过Thanos Ruler,可以跨多个Proemtheus实例处理记录和报警规则 * 一个ThanosRuler实例至少需要一个queryEndpoint,它指向Thanos Queriers或prometheus实例的位置,queryEndpoints用于配置Thanos运行时的--query参数 **验证** ### **访问Prometheus** 修改Prometheus-server的类型 ```bash [root@k8s-master ~]# kubectl edit svc prometheus-k8s -n monitoring spec: clusterIP: 10.100.225.94 clusterIPs: - 10.100.225.94 externalTrafficPolicy: Cluster internalTrafficPolicy: Cluster ipFamilies: - IPv4 ipFamilyPolicy: SingleStack ports: - name: web nodePort: 31958 port: 9090 protocol: TCP targetPort: web - name: reloader-web nodePort: 31359 port: 8080 protocol: TCP targetPort: reloader-web selector: app.kubernetes.io/component: prometheus app.kubernetes.io/instance: k8s app.kubernetes.io/name: prometheus app.kubernetes.io/part-of: kube-prometheus sessionAffinity: None type: NodePort status: loadBalancer: {} ##同理修改grafana和alertmanager的类型为NodePort [root@k8s-master ~]# kubectl edit svc alertmanager-main -n monitoring [root@k8s-master ~]# kubectl edit svc -n monitoring [root@k8s-master ~]# kubectl get svc grafana -n monitoring NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE alertmanager-main NodePort 10.110.133.186 9093:31939/TCP,8080:30732/TCP 8d alertmanager-operated ClusterIP None 9093/TCP,9094/TCP,9094/UDP 8d blackbox-exporter ClusterIP 10.97.99.41 9115/TCP,19115/TCP 8d grafana NodePort 10.98.142.2 3000:31684/TCP 8d kube-state-metrics ClusterIP None 8443/TCP,9443/TCP 8d node-exporter ClusterIP None 9100/TCP 8d prometheus-adapter ClusterIP 10.100.132.185 443/TCP 8d prometheus-k8s NodePort 10.100.225.94 9090:31958/TCP,8080:31359/TCP 8d prometheus-operated ClusterIP None 9090/TCP 8d prometheus-operator ClusterIP None 8443/TCP 8d ``` 那接下来,访问一下Prometheus吧!如下图: ![输入图片说明](2025220144945.jpg) ### **访问Grafana** 注:默认账号密码:admin/admin ![输入图片说明](2025220144952.jpg) ### **访问Alertmanager** 访问一下Alertmanager 如下图: ![输入图片说明](2025220144959.jpg) 本文参考自 ,如有侵权,请联系删除。