prometheus-operator监控集群外的docker服务

2024-05-25 04:58

本文主要是介绍prometheus-operator监控集群外的docker服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

这个主题网上可以搜到好多内容,如果直接照抄过来,还是不好用,应该是我没掌握原理。

10.10.14.2这个服务器并不在集群内,这个服务器上面跑的服务都是docker起的。prometheus-operator部署在集群内,想要通过prometheus-operator监控10.10.14.2这个服务器上的docker服务,以及该服务器本身的指标。

docker服务使用cadvisor来暴露指标,服务器本身的指标使用node-exporter来暴露。

首先在10.10.14.2这个服务器部署cadvisor和node-exporter

部署cadvisor

// 拉取cadvisor镜像
docker pull google/cadvisor:latest// 使用特权模式运行cadvisor,由于该服务器上的8080端口已经被占用,这里把cadvisor的8080端口映射到8000端口
docker run -d -p 8000:8080 --name cadvisor  --privileged=true -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro google/cadvisor:latest

部署node-exporter

// 拉取node-exporter镜像。我的prometheus-operator里面的node-exporter版本为0.18.1,这里也跟着部署相同的版本
docker pull quay.io/prometheus/node-exporter:v0.18.1// 运行node-exporter
docker run -d --name node-exporter -v /proc:/host/proc -v /sys:/host/sys -v /:/rootfs --net=host registry.local/cloudtogo/node-exporter:v0.18.1 --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points="^/(sys|proc|dev|host|etc)($|/)"

prometheus-operator要监控集群外的服务需要定义对应的EndpointsServiceMonitor

我把这些docker服务和节点监控数据全部放入demo-system这个ns下。如果不设置默认是在default下。

编写docker容器的endpoints yaml,即docker-ep.yaml

kind: Endpoints
apiVersion: v1
metadata:name: demo-dockernamespace: demo-systemlabels:cloudos: demo-docker
subsets:- addresses:- ip: 10.10.14.2 # ip为安装cadvisor服务器的ipports:- name: metricsport: 8000 # cadvisor的8080端口映射到了8000端口

编写服务器endpoints yaml,即node-ep.yaml

kind: Endpoints
apiVersion: v1
metadata:name: demo-nodenamespace: demo-systemlabels:cloudos: demo-node
subsets:- addresses:- ip: 10.10.14.2 # ip为部署node-exporter的服务器ipports:- name: metricsport: 9100 # node-exporter暴露在该服务器的9100端口

编写service monitor yaml,即customer-serviceMonitor.yaml

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:name: demonamespace: demo-system
spec:endpoints:- interval: 15sport: metricsrelabelings:# 对instance进行relabel- action: replacesourceLabels: ['__address__']separator: ':'regex: '(.*):.*'targetLabel:  'instance'replacement:   '${1}'selector: {}

可以看到在10.10.14.2上的docker服务cadvisor和node-exporter ,都已经被收集到了

 

如果我有另外好几台服务器也部署了相同的cadvisor和node-exporter,按照上面的做法就是有几台服务器就需要几个endpoints,servicemonitor可以继续使用同一个。

endpoints.subsets.address其实是个数组,如果有多个,则直接加入。
如新增10.10.14.3部署了cadvisor服务,那么只需要在docker-ep.yaml中添加10.10.14.3这个ip即可。

完整docker-ep.yaml如下

kind: Endpoints
apiVersion: v1
metadata:name: demo-dockernamespace: demo-systemlabels:demo: demo-docker
subsets:- addresses:# 把使用docker部署的cadvisor即服务器ip加入这里- ip: 10.10.14.2- ip: 10.10.14.3ports:# 由于cadvisor暴露的端口相同,都是8000,这里无需做任何修改,可以适配所有情况- name: metricsport: 8000

 

 

如果只指定了Endpoints和ServiceMonitor,没有指定Service会存在一个问题,那就是一旦master关机后(reboot没有问题)再开机,创建的Endpoints对象就全部不见了。

这个现象也是无意之间发现的,当时还跟测试争论起来,因为大家都说没有删Endpoints,但是Endpoints就是不见了,后面才想起来master机器有被关机过,于是再关机验证一把问题就复现了。

在这里找到相关的信息参考:https://github.com/kubernetes/kubernetes/issues/12964

于是给Endpoints增加了对应的Service,即使后续关机,也没有任何影响了。
完整docker-service.yaml如下

apiVersion: v1
kind: Service
metadata:name: demo-dockernamespace: demo-systemlabels:demo: demo-docker
spec:type: ClusterIPclusterIP: Noneports:- name: cadvisorport: 8000protocol: TCP

 

这篇关于prometheus-operator监控集群外的docker服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1000544

相关文章

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

JVisualVM之Java性能监控与调优利器详解

《JVisualVM之Java性能监控与调优利器详解》本文将详细介绍JVisualVM的使用方法,并结合实际案例展示如何利用它进行性能调优,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1. JVisualVM简介2. JVisualVM的安装与启动2.1 启动JVisualVM2

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

ubuntu如何部署Dify以及安装Docker? Dify安装部署指南

《ubuntu如何部署Dify以及安装Docker?Dify安装部署指南》Dify是一个开源的大模型应用开发平台,允许用户快速构建和部署基于大语言模型的应用,ubuntu如何部署Dify呢?详细请... Dify是个不错的开源LLM应用开发平台,提供从 Agent 构建到 AI workflow 编排、RA

Docker安装MySQL镜像的详细步骤(适合新手小白)

《Docker安装MySQL镜像的详细步骤(适合新手小白)》本文详细介绍了如何在Ubuntu环境下使用Docker安装MySQL5.7版本,包括从官网拉取镜像、配置MySQL容器、设置权限及内网部署,... 目录前言安装1.访问docker镜像仓库官网2.找到对应的版本,复制右侧的命令即可3.查看镜像4.启

debian12安装docker的实现步骤

《debian12安装docker的实现步骤》本文主要介绍了debian12安装docker的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录步骤 1:更新你的系统步骤 2:安装依赖项步骤 3:添加 docker 的官方 GPG 密钥步骤

使用Python实现实时金价监控并自动提醒功能

《使用Python实现实时金价监控并自动提醒功能》在日常投资中,很多朋友喜欢在一些平台买点黄金,低买高卖赚点小差价,但黄金价格实时波动频繁,总是盯着手机太累了,于是我用Python写了一个实时金价监控... 目录工具能干啥?手把手教你用1、先装好这些"食材"2、代码实现讲解1. 用户输入参数2. 设置无头浏