基于 Operator 部署 Prometheus 实现 K8S 监控

发布于:2025-05-28 ⋅ 阅读:(22) ⋅ 点赞:(0)

0、前言

Kubernetes Operator 是一种基于 Kubernetes 的扩展机制,用于简化复杂系统的部署、管理和运维工作,它的本质是“封装、自动化和复用领域知识(如系统运维、应用管理等知识)”。

在 Kubernetes 集群的运维管理中,监控是必不可少的一环。Prometheus 作为一款优秀的开源监控系统,结合 Operator 方式进行部署,可以更便捷地实现对 K8S 的监控。

这种自动监控 K8S 集群的能力,使得基于 Operator 部署 Prometheus 成为一种高效、便捷且符合 Kubernetes 原生理念的监控解决方案,极大地降低了在 Kubernetes 环境中搭建和维护监控系统的复杂性,同时也提高了监控系统的可靠性和可扩展性,以下是基于 Operator 部署 Prometheus 实现 K8S 监控的详细步骤。

一、下载源代码

首先,我们需要下载 Prometheus Operator 相关的源代码。通过以下命令进行下载:

wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.11.0.tar.gz

由于网络原因,若上述链接解析不成功,可能是链接本身存在问题或网络连接异常。请检查链接的合法性,确保其正确无误,并可尝试更换网络环境或使用代理等工具进行重试。下载完成后,进行解压:

tar xf kube-prometheus-0.11.0.tar.gz

解压后,我们进入到对应的文件目录下:

cd kube-prometheus-0.11.0

二、安装 Prometheus - Operator

在安装 Prometheus - Operator 之前,请确保你的 Kubernetes 集群环境已正确配置并运行。接下来,执行以下命令进行安装:

[root@master231 /k8s/manifests/monitor、kube-prometheus-0.11.0]# kubectl apply --server-side -f manifests/setup
kubectl wait \
	--for condition=Established \
	--all CustomResourceDefinition \
	--namespace=monitoring
kubectl apply -f manifests/

(会创建一大堆资源)

该命令会向 Kubernetes 集群中应用一系列的资源清单,用于完成 Prometheus Operator 的初步搭建及相关依赖的创建。

然后,等待所有自定义资源定义(CustomResourceDefinition)处于稳定状态:

此命令会创建诸多资源,包括但不仅限于各种服务(Service)、部署(Deployment)、Pod 等,它们共同构成了 Prometheus 监控系统的各个组成部分。

三、构建所需的镜像(如有需要)

若你的集群环境需要使用自定义的镜像或者离线部署等情况,可能需要提前构建所需的镜像。例如,以下是部分可能需要构建的镜像文件示例:

alertmanager-v0.24.0.tar.gz
blackbox-exporter-v0.21.0.tar.gz
configmap-reload-v0.5.0.tar.gz
grafana-v8.5.5.tar.gz
kube-rbac-proxy-v0.12.0.tar.gz
kube-state-metrics-v2.5.0.tar.gz
node-exporter-v1.3.1.tar.gz
prometheus-adapter-v0.9.1.tar.gz
prometheus-config-reloader-v0.57.0.tar.gz
prometheus-operator-v0.57.0.tar.gz
prometheus-v2.36.1.tar.gz

根据实际需求,将这些镜像文件导入到你的镜像仓库中,以便后续部署过程中能够正确拉取使用。

四、检查 Prometheus 是否部署成功

部署完成后,检查各组件的运行状态是关键步骤。执行以下命令查看 monitoring 命名空间下所有 Pod 的状态:

kubectl get pods -n monitoring -o wide

若所有 Pod 的 READY 状态均显示为对应数值 / 对应数值(如 2/2、3/3 等)且 STATUS 为 Running,表示 Prometheus 及其相关组件部署成功且运行正常。例如,正常输出可能如下:

NAME                                  READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
alertmanager-main-0                   2/2     Running   0          90s   10.100.203.157   worker232   <none>           <none>
alertmanager-main-1                   2/2     Running   0          90s   10.100.140.86    worker233   <none>           <none>
alertmanager-main-2                   2/2     Running   0          90s   10.100.203.156   worker232   <none>           <none>
blackbox-exporter-746c64fd88-6qnjm    3/3     Running   0          96s   10.100.203.152   worker232   <none>           <none>
grafana-5fc7f9f55d-9r4zq              1/1     Running   0          95s   10.100.203.153   worker232   <none>           <none>
kube-state-metrics-6c8846558c-hfb54   3/3     Running   0          95s   10.100.203.154   worker232   <none>           <none>
node-exporter-ccnrb                   2/2     Running   0          94s   10.0.0.232       worker232   <none>           <none>
node-exporter-kp5nb                   2/2     Running   0          94s   10.0.0.233       worker233   <none>           <none>
node-exporter-rmrx7                   2/2     Running   0          94s   10.0.0.231       master231   <none>           <none>
prometheus-adapter-6455646bdc-lf5bg   1/1     Running   0          93s   10.100.140.84    worker233   <none>           <none>
prometheus-adapter-6455646bdc-nrfzx   1/1     Running   0          93s   10.100.203.155   worker232   <none>           <none>
prometheus-k8s-0                      2/2     Running   0          90s   10.100.140.87    worker233   <none>           <none>
prometheus-k8s-1                      2/2     Running   0          89s   10.100.203.158   worker232   <none>           <none>
prometheus-operator-f59c8b954-9lq59   2/2     Running   0          93s

五、修改 Grafana 的服务配置

为了方便访问 Grafana 的 Web 界面,我们可对 Grafana 的服务(Service)进行修改,将其类型更改为 NodePort。以下是具体操作:

查看并编辑 Grafana 的服务配置文件(manifests/grafana-service.yaml):

cat manifests/grafana-service.yaml

apiVersion: v1
kind: Service
metadata:
  ...
  name: grafana
  namespace: monitoring
spec:
  type: NodePort
  ...
[root@master231 kube-prometheus-0.11.0]# 

将其中的 spec.type 字段修改为 NodePort。然后应用修改后的配置:

kubectl apply -f  manifests/grafana-service.yaml

执行完成后,再次查看服务详情:

kubectl get -f  manifests/grafana-service.yaml

输出示例:

NAME      TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
grafana   NodePort   10.200.30.3   <none>        3000:30902/TCP   4m6s

此时,我们可以通过各节点的 IP 地址加上分配的 NodePort 端口(此处为 30902)来访问 Grafana 的 Web 界面,例如:http://<节点 IP>:30902。

六、暴露 Prometheus 的服务 WebUI

为了方便访问 Prometheus 的 WebUI,我们可采用多种方式对其进行暴露,以下是基于 NodePort 方式的示例操作。

查看并编辑 Prometheus 的服务配置文件(manifests/prometheus-service.yaml):

cat manifests/prometheus-service.yaml

apiVersion: v1
kind: Service
metadata:
  ...
  name: prometheus-k8s
  namespace: monitoring
spec:
  type: NodePort
  ports:
  - name: web
    port: 9090
    nodePort: 9090
    targetPort: web
  ...
[root@master231 kube-prometheus-0.11.0]# 

将 spec.type 字段修改为 NodePort,并可指定 nodePort 端口号(如将 Prometheus 的 web 端口对应的 nodePort 设置为 9090)。然后应用修改后的配置:

kubectl apply -f  manifests/prometheus-service.yaml

再次查看服务详情:

kubectl get -f manifests/prometheus-service.yaml

输出示例:

NAME             TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                        AGE
prometheus-k8s   NodePort   10.200.246.30   <none>        9090:9090/TCP,8080:39234/TCP   75m

此时,我们可以通过各节点的 IP 地址加上指定的 NodePort 端口(此处为 9090)来访问 Prometheus 的 WebUI,例如:http://<节点 IP>:9090。另外,也可以根据实际需求,采用 LoadBalancer、Ingress 或 port - forward 等其他方式进行服务暴露。

七、总结

  • 利用 Prometheus Operator 简化了在 Kubernetes 环境中部署和管理 Prometheus 的过程,实现了对 K8S 集群的自动监控。

  • 通过调整服务配置,使得监控系统的 Web 界面(如 Grafana 和 Prometheus)能够方便地被访问,便于后续的监控数据查看与分析。

通过以上步骤,我们基于 Operator 成功部署了 Prometheus,并实现了对 K8S 集群的监控。后续可根据实际需求,进一步配置和优化监控规则、告警策略等,以满足不同的监控场景。

希望这篇博文对你有所帮助,如有任何疑问或需要进一步的解释,请随时在评论区留言。


网站公告

今日签到

点亮在社区的每一天
去签到