在现代的 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监控视图,也可以自定义自己的监控视图
