在现代的 Kubernetes 生产环境中,监控是必不可少的一部分。Prometheus 作为云原生时代最流行的监控解决方案,与 Kubernetes 有着天然的亲和性。而 Prometheus Operator 则让 Prometheus 在 Kubernetes 中的部署和管理变得更加简单和高效。

什么是 Prometheus Operator?

Prometheus Operator 是一个 Kubernetes 运算符,它简化了 Prometheus 监控实例的部署和管理。它提供了以下核心功能:

  • 自动化部署:自动创建和管理 Prometheus、Alertmanager 和相关配置

  • 服务发现:自动发现 Kubernetes 服务、Pod 和节点

  • 配置管理:通过 Kubernetes CRD 管理监控配置

  • 高可用性:支持 Prometheus 和 Alertmanager 的高可用部署

部署 Prometheus Operator

前提条件

  • Kubernetes 集群(1.16+)

  • kubectl 配置并连接到集群

  • 集群管理员权限

部署步骤

去下载跟自己k8s集群版本对应的版本Prometheus Operator。
我的k8s是1.23版本的所有用的Prometheus Operator是0.11

软件包下载地址 https://github.com/prometheus-operator/kube-prometheus

解压安装

#把源代码传到k8s集群然后解压
tar xf kube-prometheus-0.11.0.tar.gz  -C /Kubernetes/manifests/add-ons/
#进到目录然后安装
[root@master231 kube-prometheus-0.11.0]# kubectl apply --server-side -f manifests/setup
[root@master231 kube-prometheus-0.11.0]# kubectl wait \
                                        	--for condition=Established \
                                        	--all CustomResourceDefinition \
                                        	--namespace=monitoring
[root@master231 kube-prometheus-0.11.0]# kubectl apply -f manifests/

检查Prometheus是否部署成功

[root@master231 kube-prometheus-0.11.0]# kubectl get pods -n monitoring -o wide
NAME                                  READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
alertmanager-main-0                   2/2     Running   0          35s   10.100.203.159   worker232   <none>           <none>
···
prometheus-operator-f59c8b954-gm5ww   2/2     Running   0          38s   10.100.203.152   worker232   <none>           <none>
[root@master231 kube-prometheus-0.11.0]# 

修改Grafana的svc 让Grafana使用本机网络

root@master231 kube-prometheus-0.11.0]# cat manifests/grafana-service.yaml 
apiVersion: v1
kind: Service
metadata:
  ...
  name: grafana
  namespace: monitoring
spec:
  type: LoadBalancer  #修改网络
  ...
[root@master231 kube-prometheus-0.11.0]# 
[root@master231 kube-prometheus-0.11.0]# kubectl apply -f  manifests/grafana-service.yaml 
service/grafana configured
[root@master231 kube-prometheus-0.11.0]# 
[root@master231 kube-prometheus-0.11.0]# kubectl get svc -n monitoring  grafana 
NAME      TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
grafana   LoadBalancer   10.200.48.10   xxxxx    3000:49955/TCP   19m
[root@master231 kube-prometheus-0.11.0]# 


	6.访问Grafana的WebUI
http://xxxxxxx:3000/
默认的用户名和密码: admin

使用traefik暴露Prometheus的WebUI到K8S集群外部

[root@master231 ingressroutes]# helm list -n traefik 
NAME          	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART         	APP VERSION
traefik-server	traefik  	1       	2025-10-02 16:51:25.389992634 +0800 CST	deployed	traefik-36.3.0	v3.4.3     
[root@master231 ingressroutes]# 
[root@master231 ingressroutes]# kubectl get svc,pods -n traefik 
NAME                              TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/jiege-traefik-dashboard   ClusterIP      10.200.20.87     <none>        8080/TCP                     22h
service/traefik-server            LoadBalancer   10.200.129.130   10.0.0.151    80:45942/TCP,443:27126/TCP   16h

NAME                                 READY   STATUS    RESTARTS   AGE
pod/traefik-server-fd98df655-k4llh   1/1     Running   0          16h
[root@master231 ingressroutes]#

编写资源清单

[root@master231 ingressroutes]# cat 19-ingressRoute-prometheus.yaml 
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: ingressroute-prometheus
  namespace: monitoring
spec:
  entryPoints:
  - web
  routes:
  - match: Host(`prom.disb.xyz`) && PathPrefix(`/`)
    kind: Rule
    services:
    - name: prometheus-k8s
      port: 9090
[root@master231 ingressroutes]# 
[root@master231 ingressroutes]# kubectl apply -f 19-ingressRoute-prometheus.yaml
ingressroute.traefik.io/ingressroute-prometheus created
[root@master231 ingressroutes]# 
 
DNS解析域名


   浏览器访问测试 
http://prom.disb.xyz/targets?search=

Prometheus Operator里面会有一些定义的Grafana监控视图,也可以自定义自己的监控视图

Q.E.D.