当前位置: 首页 > news >正文

基于 Operator 部署 Prometheus 实现 K8S 监控

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.yamlapiVersion: v1
kind: Service
metadata:...name: grafananamespace: 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.yamlapiVersion: v1
kind: Service
metadata:...name: prometheus-k8snamespace: monitoring
spec:type: NodePortports:- name: webport: 9090nodePort: 9090targetPort: 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 集群的监控。后续可根据实际需求,进一步配置和优化监控规则、告警策略等,以满足不同的监控场景。

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

http://www.xdnf.cn/news/670717.html

相关文章:

  • Spark实时流数据处理实例(SparkStreaming通话记录消息处理)
  • 【md2html python 将 Markdown 文本转换为 HTML】
  • HTML Day02
  • pythonday30
  • Spark SQL进阶:解锁大数据处理的新姿势
  • AG32 DMAC实现内部MCU与FPGA通信【知识库】
  • 运维自动化工具 ansible 知识点总结
  • 域控账号密码抓取
  • C++数据结构 : 哈希表的实现
  • 2025上半年软考高级系统架构设计师经验分享
  • 第十一节:第一部分:正则表达式:应用案例、爬取信息、搜索替换
  • 牙科低对比度模体,衡量牙科影像设备的性能和诊断能力的工具
  • 8种使用克劳德4的方法,目前可用随时更新!
  • 人工智能与机器学习从理论、技术与实践的多维对比
  • 打造AI智能旅行规划器:基于LLM和Crew AI的Agent实践
  • Flash Attention:让Transformer飞起来的硬件优化技术
  • 宝塔安装easyswoole框架
  • Cherry Studio连接配置MCP服务器
  • wsl图形界面显示
  • 探讨Facebook的元宇宙愿景下的虚拟现实技术
  • 【2025最新】Cline自定义API配置完全指南:接入Claude 3.7/GPT-4o
  • 用C#完成最小二乘法拟合平面方程,再计算点到面的距离
  • OpenGL Chan视频学习-8 How I Deal with Shaders in OpenGL
  • 深入理解设计模式之状态模式
  • kubernetes网络详解(内部网络、Pod IP分配、CNI)
  • 操作系统期中考试
  • 如何彻底禁用WordPress中的评论
  • 三、web安全-信息收集
  • 网络:华为S5720-52X-SI交换机重置console密码
  • 从0开始学习R语言--Day11--主成分分析