首页 > 其他分享 >Kubernetes 服务发现 监控Endpoints

Kubernetes 服务发现 监控Endpoints

时间:2024-09-27 23:11:42浏览次数:8  
标签:__ 监控 Kubernetes prometheus io kubernetes Endpoints true name

监控 Pod
之前的apiserver 实际上就是一种特殊的 Endpoints,现在我们同样来配置一个任务用来专门发现普通类型的 Endpoint,其实就是 Service 关联的 Pod 列表,由于并不是所有的 Endpoints 都会提供 metrics 接口,所以需要我们主动告诉 Prometheus 去发现哪些 Endpoints,当然告诉的方式有很多,不过约定俗成的一种方式是通过 annotations 注解进行通知,如下所示:

- job_name: "endpoints"
kubernetes_sd_configs:
- role: endpoints
relabel_configs:
# 保留 Service 的注解为 prometheus.io/scrape: true 的 Endpoints
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
action: keep
regex: true
# 指标接口协议通过 prometheus.io/scheme 这个注解获取 http 或 https
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
action: replace
target_label: __scheme__
regex: (https?)
# 指标接口端点路径通过 prometheus.io/path 这个注解获取
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
# 直接接口地址端口通过 prometheus.io/port 注解获取
- source_labels:
[__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
action: replace
target_label: __address__
regex: ([^:]+)(?::\d+)?;(\d+) # RE2 正则规则,+是一次或多次,?是0次或1次,其中?:表示非匹配组(意思就是不获取匹配结果)
replacement: $1:$2
# 映射 Service 的 Label 标签
- action: labelmap
regex: __meta_kubernetes_service_label_(.+)
# 将 namespace 映射成标签
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: kubernetes_namespace
# 将 Service 名称映射成标签
- source_labels: [__meta_kubernetes_service_name]
action: replace
target_label: kubernetes_name
# 将 Pod 名称映射成标签
- source_labels: [__meta_kubernetes_pod_name]
action: replace
target_label: kubernetes_pod_name
有了这个注解,其实就是告诉Prometheus,现在的服务提供metrics接口。通过接口必须告诉其提供的端口和地址是什么,以及协议是什么,这些都通过annotation来提供。

# 保留 Service 的注解为 prometheus.io/scrape: true 的 Endpoints
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
action: keep
regex: true
注意我们这里在 relabel_configs 区域做了大量的配置,特别是第一个保留__meta_kubernetes_service_annotation_prometheus_io_scrape 为 true 的才保留下来,这就是说要想自动发现集群中的 Endpoint,就需要我们在 Service 的 annotations 区域添加 prometheus.io/scrape=true 的注解,我们也可以借助 Relabeler - The playground for Prometheus relabeling rules 这个工具来帮助我们配置 Relabel。现在我们先将上面的配置更新,查看下效果:

 

我们可以看到 endpoints 这一个任务下面只发现了 5 个任务,这是因为我们在 relabel_configs 中过滤了 annotations 有 prometheus.io/scrape=true 的 Service,而现在我们系统中只有两个这样的服务符合要求,比如 kube-dns 这个 Service 下面有两个实例,所以出现了两个实例:

☸ ➜ kubectl get svc kube-dns -n kube-system -o yaml
apiVersion: v1
kind: Service
metadata:
annotations:
prometheus.io/port: "9153" # metrics 接口的端口
prometheus.io/scrape: "true" # 这个注解可以让prometheus自动发现
creationTimestamp: "2021-10-25T12:33:14Z"
labels:
k8s-app: kube-dns
kubernetes.io/cluster-service: "true"
kubernetes.io/name: CoreDNS
name: kube-dns
namespace: kube-system
......
现在我们在之前创建的 redis 这个 Service 中添加上 prometheus.io/scrape=true 这个注解:

# redis-svc.yaml
kind: Service
apiVersion: v1
metadata:
name: redis
namespace: kube-mon
annotations:
prometheus.io/scrape: "true" # 让上面的自动发现能获取该服务
prometheus.io/port: "9121" # 指定metrics接口访问端口
spec:
selector:
app: redis
ports:
- name: redis
port: 6379
targetPort: 6379
- name: prom
port: 9121
targetPort: 9121
由于 redis 服务的 metrics 接口在 9121 这个 redis-exporter 服务上面,所以我们还需要添加一个 prometheus.io/port=9121 这样的 annotations,然后更新这个 Service:

☸ ➜ kubectl apply -f https://p8s.io/docs/k8s/manifests/prometheus/redis-svc.yaml
更新完成后,去 Prometheus 查看 Targets 路径,可以看到 redis 服务自动出现在了 endpoints 这个任务下面:

 

这样以后我们有了新的服务,如果服务本身提供了 /metrics 接口,我们就完全不需要用静态的方式去配置了,现在我们就可以将之前配置的 redis 静态配置去掉了。

同理prometheus

[root@master prometheus]# cat prometheus-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: prometheus
namespace: monitor
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9090"
labels:
app: prometheus
spec:
type: NodePort
ports:
- port: 9090
targetPort: 9090
protocol: TCP
selector:
app: prometheus
component: server

标签:__,监控,Kubernetes,prometheus,io,kubernetes,Endpoints,true,name
From: https://www.cnblogs.com/exmyth/p/18436777

相关文章

  • 技术洞察:思通数科AI视频监控卫士的创新监控策略
    思通数科的AI视频监控卫士是一款功能强大的监控解决方案,适用于多种监控需求和场景:家庭安全监控:使用手机或支持RTSP的摄像头,用户可以实时监控家中情况,如照看老人、小孩或宠物,以及预防盗窃。企业安全监控:企业可以利用该系统监控办公室、仓库或生产区域,确保员工安全,保护资......
  • 手动搭建高可用的 kubernetes 集群(v1.31)
    手动搭建高可用的kubernetes集群(v1.31)目录1、环境准备1.1集群规划(节约资源,可按需配置)1.2安装依赖包(双节点执行)1.3配置映射(双节点执行)1.4免密登录(master节点执行)1.5环境准备(双节点执行)2、安装containerd(双节点执行)3、安装Kubernetes3.1安装Kubernetes组件(双节点执行)3.2......
  • 【Kubernetes】常见面试题汇总(四十二)
    目录96.Kubernetes体系结构有哪些不同的组成部分?97.您能否简要介绍一下Kubernetes中主节点的工作?特别说明:题目  1-68  属于【Kubernetes】的常规概念题,即“汇总(一)~(二十二)”。题目69-113属于【Kubernetes】的生产应用题。96.Kubernetes体系结构有哪些......
  • 【Kubernetes】常见面试题汇总(四十一)
    目录94.iptables四个表五个链。95.Kubernetes如何简化容器化部署?特别说明:题目  1-68  属于【Kubernetes】的常规概念题,即“汇总(一)~(二十二)”。题目69-113属于【Kubernetes】的生产应用题。94.iptables四个表五个链。(1)iptables四个表:raw表:确定是否......
  • 【Kubernetes】常见面试题汇总(三十八)
    目录 91.Docker的网络通信模式。特别说明:题目  1-68  属于【Kubernetes】的常规概念题,即“汇总(一)~(二十二)”。题目69-113属于【Kubernetes】的生产应用题。91.Docker的网络通信模式。Docker的4种网络通信模式:1、host模式:-host模式,使用--net=ho......
  • 【Kubernetes】常见面试题汇总(三十五)
    目录 87.简述pod中readiness和liveness的区别和各自应用场景。特别说明:题目  1-68  属于【Kubernetes】的常规概念题,即“汇总(一)~(二十二)”。题目69-113属于【Kubernetes】的生产应用题。87.简述pod中readiness和liveness的区别和各自应用场景。......
  • 自动旋转滤网数据采集远程监控系统方案
    在许多工业流程中,固体颗粒可能会对设备造成损害,如磨损、堵塞等。通过自动旋转滤网的过滤作用,可以有效地去除流体中的固体颗粒,从而保护设备免受损害,提高设备的运行效率和延长使用寿命。对此,物通博联提供基于工业智能网关的自动旋转滤网数据采集远程监控系统方案。 以冷却水系统来说......
  • 智能化转型新篇章:EasyCVR平台引领大型连锁超市视频监控进入AI时代
    随着科技的飞速发展,视频监控系统在各行各业中的应用日益广泛,大型连锁超市作为人员密集、商品繁多的公共场所,其安全监控显得尤为重要。为了提升超市的安全管理水平、减少损失、保障顾客和员工的安全,引入高效、全面的视频监控系统显得尤为重要。EasyCVR视频汇聚平台以其强大的多协议......
  • 国庆旅游高峰,EasyCVR安防监控视频汇聚平台如何守护景区安全管理
    随着国庆节的临近,国内旅游市场迎来了一年中最为繁忙的旅游高峰期。各大景区游客数量激增,给景区安全管理带来了前所未有的挑战。面对景区安全风险意识不足、防护措施不完善、游客安全意识欠缺等问题,构建一套高效、智能的景区旅游安全管理系统显得尤为重要。EasyCVR视频平台凭借其先......
  • 实时监控目录及子目录并修改子目录及文件的属组及权限
    背景图片上传后到服务器的磁盘上,落盘后的文件,归属用户和属组为应用程序a权限,比如aaa:aaa,且权限是600。这个时候应用程序b也想访问这些图片,该如何授权。!!!研发要求,不改动代码,运维来实现!!!(无奈表情)(代码不想判断linux还是windows)思路1.本人非正规军,但也遵循用户权限最小原则。root先......