Prometheus监控Kubernetes ETCD

文章目录

  • 一、kubeadm方式部署etcd
    • 1.修改etcd指标接口监听地址
    • 2.prometheus中添加etcd的服务发现配置
    • 3.创建etcd的service
    • 4.grafana添加etcd监控模版
  • 二、二进制方式部署k8s etcd
    • 1.将etcd服务代理到k8s集群
    • 2.创建etcd证书的secrets
    • 3.prometheus挂载etcd证书的secrets
    • 4.prometheus添加采集etcd配置
    • 5.grafana添加etcd监控面板


一、kubeadm方式部署etcd

对于使用kubeadm工具搭建的kubernetes集群,etcd组件默认以静态pod方式将其部署在master节点上。通过它的静态pod资源文件"/etc/kubernetes/manifests/etcd.yaml",可以得到以下信息

  • 部署在kube-system命名空间内;
  • pod标签带有"component=etcd";
  • 指标接口服务监控本地的2381端口;
  • Pod以hostNetwork模式运行,共享宿主机网络命名空间;

综上所述,可以在master节点上通过curl工具访问"http://127.0.0.1:2381/metrics"来查看etcd的指标数据。


1.修改etcd指标接口监听地址

指标接口服务默认监听"127.0.0.1",为了实现外部可以抓取数据,需要将监听地址修改为"0.0.0.0",即在pod资源文件中将"–listen-metrics-urls"参数的值改为"http://0.0.0.0:2381"。

[root@k8s-master ~]# vim /etc/kubernetes/manifests/etcd.yaml containers:- command:...- --listen-metrics-urls=http://0.0.0.0:2381...

在这里插入图片描述
修改完后不需要重新apply,会自动重启生效的

2.prometheus中添加etcd的服务发现配置

[root@k8s-master prometheus]# vim prometheus-configmap.yaml- job_name: kubernetes-etcdkubernetes_sd_configs:- role: endpoints# 仅保留kube-system命名空间名为etcd的servicerelabel_configs:- action: keepregex: kube-system;etcdsource_labels:- __meta_kubernetes_namespace- __meta_kubernetes_service_name

上述配置添加了一个名为"kubernetes-etcd"的作业,然后使用了endpoints类型自动发现etcd endpoints对象关联的pod并将其添加为监控目标。在此过程中,仅保留kube-system命名空间中名为etcd的service。

3.创建etcd的service

使用endpoints类型的前提是需要存在service,而默认情况下不会创建etcd。因此为它创建一个名为"etcd"的service

[root@k8s-master prometheus]# vim etcd-service.yaml
apiVersion: v1
kind: Service
metadata:name: etcdnamespace: kube-system 
spec:selector:# 这里使用标签选择器来匹配你的 etcd Pods  component: etcdports:- name: metricsport: 2381targetPort: 2381

创建完成后,就能在prometheus Web UI中看到etcd pod的监控目标了
在这里插入图片描述

4.grafana添加etcd监控模版

grafana模版中心 etcd监控模版:https://grafana.com/grafana/dashboards/9733-etcd-for-k8s-cn/

或者直接下载我修改好的
https://download.csdn.net/download/qq_44930876/89682777

或者直接导入 grafana模版中心的etcd监控模板ID:9733
在这里插入图片描述



二、二进制方式部署k8s etcd

kubeadm方式部署k8s,etcd以pod的方式运行 在默认开启暴露metrics数据的,不过一般etcd都是部署在集群外部的,如二进制部署的k8s 并且其暴露的借口是基于https协议的,为了方便统一监控管理,我们需要将etcd服务代理到k8s集群中,然后使用prometheus的k8s动态服务发现机制,自动查找到带有指定label标签的etcd service服务;

https://blog.csdn.net/qq_44930876/article/details/126686599
继之前二进制部署k8s时安装的etcd集群来配置接下来的监控
如下:对于开启tls的etcd 需要指定客户端证书后,查看本机/metrics etcd的指标数据

[root@k8s-master1 ~]# cd /hqtbj/hqtwww/etcd/ssl
[root@k8s-master1 ssl]# curl -Lk --cert ./ca.pem --key ca-key.pem https://172.32.0.11:2379/metrics

1.将etcd服务代理到k8s集群

实现prometheus第一步,需要创建etcd的service和endpoint资源,将etcd代理到k8s集群内部,然后给etcd service添加指定labels的标签,这样prometheus就可以通过k8s服务发现机制 查到带有指定标签的service关联的应用列表

apiVersion: v1
kind: Service
metadata:name: etcd-k8snamespace: opslabels:#Kubernetes 会根据该标签和 Endpoints 资源关联k8s-app: etcd#Prometheus 会根据该标签服务发现到该服务app.kubernetes.io/name: etcd
spec:type: ClusterIP#设置为 None,不分配 Service IPclusterIP: Noneports:- name: portport: 2379protocol: TCP
---
apiVersion: v1
kind: Endpoints
metadata:name: etcd-k8snamespace: opslabels:k8s-app: etcd
subsets:
#etcd的节点IP地址列表
- addresses:- ip: 172.32.0.11- ip: 172.32.0.12- ip: 172.32.0.13#etcd 端口ports:- port: 2379

在这里插入图片描述

2.创建etcd证书的secrets

由于etcd是基于https协议,prometheuss采集指标数据时需要使用到tls证书,所以我们将etcd的证书文件挂在到k8s的configmap中;

[root@k8s-master1 ~]# kubectl create secret generic etcd-certs \--from-file=/hqtbj/hqtwww/etcd/ssl/etcd-server.pem \--from-file=/hqtbj/hqtwww/etcd/ssl/etcd-server-key.pem \--from-file=/hqtbj/hqtwww/etcd/ssl/ca.pem \-n ops
secret/etcd-certs created

在这里插入图片描述

3.prometheus挂载etcd证书的secrets

[root@k8s-master1 prometheus]# vim prometheus-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: prometheus namespace: opslabels:k8s-app: prometheus
spec:replicas: 1selector:matchLabels:k8s-app: prometheustemplate:metadata:labels:k8s-app: prometheusspec:serviceAccountName: prometheusinitContainers:- name: "init-chown-data"image: "busybox:latest"imagePullPolicy: "IfNotPresent"command: ["chown", "-R", "65534:65534", "/data"]volumeMounts:- name: prometheus-datamountPath: /datasubPath: ""containers:#负责热加载configmap配置文件的容器- name: prometheus-server-configmap-reloadimage: "jimmidyson/configmap-reload:v0.1"imagePullPolicy: "IfNotPresent"args:- --volume-dir=/etc/config- --webhook-url=http://localhost:9090/-/reloadvolumeMounts:- name: config-volumemountPath: /etc/configreadOnly: trueresources:limits:cpu: 10mmemory: 10Mirequests:cpu: 10mmemory: 10Mi- name: prometheus-serverimage: "prom/prometheus:v2.45.4"imagePullPolicy: "IfNotPresent"args:- --config.file=/etc/config/prometheus.yml- --storage.tsdb.path=/data- --web.console.libraries=/etc/prometheus/console_libraries- --web.console.templates=/etc/prometheus/consoles- --web.enable-lifecycleports:- containerPort: 9090readinessProbe:httpGet:path: /-/readyport: 9090initialDelaySeconds: 30timeoutSeconds: 30livenessProbe:httpGet:path: /-/healthyport: 9090initialDelaySeconds: 30timeoutSeconds: 30resources:limits:cpu: 500mmemory: 1500Mirequests:cpu: 200mmemory: 1000MivolumeMounts:- name: config-volumemountPath: /etc/config- name: prometheus-datamountPath: /datasubPath: ""- name: prometheus-rulesmountPath: /etc/config/rules#将etcd的secrets挂载至prometheus的/etc/config/etcd-certs- name: prometheus-etcdmountPath: /var/run/secrets/kubernetes.io/etcd-certs- name: timezonemountPath: /etc/localtimevolumes:- name: config-volumeconfigMap:name: prometheus-config- name: prometheus-rulesconfigMap:name: prometheus-rules- name: prometheus-datapersistentVolumeClaim:claimName: prometheus#将etcd的secrets挂载至prometheus的/etc/config/etcd-certs- name: prometheus-etcdsecret:secretName: etcd-certs- name: timezonehostPath:path: /usr/share/zoneinfo/Asia/Shanghai
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: prometheusnamespace: ops
spec:storageClassName: "managed-nfs-storage"accessModes:- ReadWriteManyresources:requests:storage: 1Gi
---
apiVersion: v1
kind: Service
metadata: name: prometheusnamespace: ops
spec: type: NodePortports: - name: http port: 9090protocol: TCPtargetPort: 9090nodePort: 30090selector: k8s-app: prometheus
---
#授权prometheus访问k8s资源的凭证
apiVersion: v1
kind: ServiceAccount
metadata:name: prometheusnamespace: ops
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: prometheus
rules:- apiGroups:- ""resources:- nodes- nodes/metrics- services- endpoints- podsverbs:- get- list- watch- apiGroups:- ""resources:- configmapsverbs:- get- nonResourceURLs:- "/metrics"verbs:- get
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: prometheus
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: prometheus
subjects:
- kind: ServiceAccountname: prometheusnamespace: ops

在这里插入图片描述

4.prometheus添加采集etcd配置

[root@k8s-master1 prometheus]# vim prometheus-configmap.yaml
...- job_name: kubernetes-etcd# 基于k8s服务自动发现kubernetes_sd_configs:# 指定 ETCD Service 所在的Namespace名称- role: endpointsnamespaces:names: ["ops"]relabel_configs:# 指定从 app.kubernetes.io/name 标签等于 etcd 的 service 服务获取指标信息- action: keepsource_labels: [__meta_kubernetes_service_label_app_kubernetes_io_name]regex: etcdscheme: httpstls_config:# 配置 ETCD 证书所在路径(Prometheus 容器内的文件路径)ca_file: /var/run/secrets/kubernetes.io/etcd-certs/ca.pemcert_file: /var/run/secrets/kubernetes.io/etcd-certs/etcd-server.pemkey_file: /var/run/secrets/kubernetes.io/etcd-certs/etcd-server-key.peminsecure_skip_verify: true   ...

在这里插入图片描述

重启prometheus,我在deployment添加了修改configmap自动重启,稍等片刻查看prometheus web ui中etcd的采集项状态
在这里插入图片描述


5.grafana添加etcd监控面板

grafana模版中心 etcd监控模版:https://grafana.com/grafana/dashboards/21473-etcd-cluster-overview/

或者直接下载我修改好的:https://download.csdn.net/download/qq_44930876/89682778

或者直接导入 grafana模版中心的etcd监控模板ID:21473
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/414520.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【c++】常量周边:常量概念及定义

目录 前言 1.常量是什么? 2.常量的的类型 本质区别: 1)文字常量(无法取地址) 🌷什么是字面值?? 字面值后缀 🌷文字(字面)常量的基本类型 …

双指针--优选算法

个人主页:敲上瘾-CSDN博客 个人专栏:游戏、数据结构、c语言基础、c学习、OJ题 前言: 该篇文章我们主要来学习的是双指针算法,对于该类算法我们可以直接来做题,从题中去感知该算法的魅力,最后再从题中做总…

Elasticsearch Suggesters API详解与联想词自动补全应用

Elasticsearch Suggesters API详解与联想词自动补全应用 引言Elasticsearch Suggesters1. Term Suggester实现步骤示例 2. Phrase Suggester示例 3. Completion Suggester创建映射和插入数据查询示例 4. Context Suggester示例 Completion Suggester1. 工作原理2. 使用流程3. 使…

东软 在大健康路上“笨鸟先飞”

若不是东软医疗引入“国家队”通用技术集团作为其最重要的战略投资人,恐怕很多人并不会留意东软“蛰伏”在大健康的赛道上,已有30年。 1997年的一天,沈阳高新技术产业开发区的东大软件园里,创立东软不过6年时间的刘积仁思量着眼前…

并发性服务器

同一时刻能处理多个客户端 多进程: int init_tcp_ser(const char *ip,unsigned short port) {int sockfd socket(AF_INET,SOCK_STREAM,0);if(-1 sockfd){perror("fail socket");return -1;}struct sockaddr_in ser;ser.sin_family AF_INET;ser.sin_por…

tomcat在eclipse中起动成功,无法访问tomcat主页

最近通过geoserver的war包将,geoserver服务部署到了tomcat,发现在eclipse中启动服务后,无法访问localhost:8080主页,geoserver主页:localhost:8080/geoserver/web同样也无法访问。 只需要双击下面的server…

【生成模型系列(初级)】自编码器——深度学习的数据压缩与重构

【通俗理解】自编码器——深度学习的数据压缩与重构 第一节:自编码器的类比与核心概念 1.1 自编码器的类比 你可以把自编码器想象成一个“智能压缩机”,它能够把输入的数据(比如图片)压缩成一个更小的表示(编码&#…

MacOS使用FileZilla通过ssh密钥文件连接远程服务器(已解决)

需求描述 mac电脑,使用filezilla通过FTP连接远程服务器,使用ssh密钥文件代替密码。 版本信息 MacOS:Sonoma 14.5 M3芯片 FileZilla:3.66.5 在这里插入图片描述 连接 1. 创建站点 打开filezilla工具,右上角选择“文件 -> 站点管理器”,打开站点管理器弹窗。 2.…

仿华为车机功能之--修改Launcher3,实现横向滑动桌面空白处切换壁纸

本功能基于Android13 Launcher3 需求:模仿华为问界车机,实现横向滑动桌面空白处,切换壁纸功能(本质只是切换背景,没有切换壁纸)。 实现效果: 实现思路: 第一步首先得增加手势识别 第二步切换底图,不切换壁纸是因为切换壁纸动作太大,需要调用到WallpaperManager,耗…

StringTable

10.1. String的基本特性 String:字符串,使用一对""引起来表示String声明为final的,不可被继承String实现了Serializable接口:表示字符串是支持序列化的。String实现了Comparable接口:表示string可以比较大小…

六. 部署分类器-trt-engine-explorer

目录 前言0. 简述1. 案例运行2. 补充说明3. engine分析结语下载链接参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》,链接。记录下个人学习笔记,仅供自己参考 本次课程我们来学习课程第六章—部署分类器,一起来学习 trt-engine…

更新RK3588开发板的rknn_server和librknnrt.so【这篇文章是RKNPU2从入门到实践 --- 【5】的配套文章】

作者使用的平台有: 一台装有Windows系统的宿主机,在该宿主机上装有Ubuntu 20.04虚拟系统; 瑞芯微RK3588开发板,开发板上的系统为Ubuntu22.04系统; 更新板子的 rknn_server 和 librknnrt.so,rknn_server 和…

借鉴腾讯系统架构从小到大的过程 - 如何做好一个系统设计?不限于(慧哥)慧知开源充电桩平台

推荐一套企业级开源充电桩平台:完整代码包含多租户、硬件模拟器、多运营商、多小程序,汽车 电动自行车、云快充协议;——(慧哥)慧知开源充电桩平台;https://liwenhui.blog.csdn.net/article/details/134773779?spm1001.2014.3001…

倒计时1天!每日一题,零基础入门FPGA

近年来,FPGA工程师凭借着远高于传统软件开发工程师的薪酬,吸引了越来越多的人转行。 然而,入门FPGA并非易事。你需要有清晰的学习路线,包括它的基本组成(如可编程逻辑块CLB、输入输出块IOB、内部连线资源等&#xff0…

JS设计模式之“分即是合” - 建造者模式

引言 当我们在进行软件编程时,常常会遇到需要创建复杂对象的情况。这些对象可能有多个属性,属性之间存在依赖关系,或需要按照特定的骤来创建。在这种情况下,使用建造者模式(Builder Pattern)可以提供一种活…

selenium启动总报错 WebDriverManager总是异常

我的环境用这个自动管理驱动的工具 WebDriverManager 总是报错 尝试过很多方法都没有,只好手动指定浏览器的位置 System.setProperty("webdriver.chrome.driver", "C:\\Users\\27224\\.cache\\selenium\\chromedriver\\win64\\128.0.6613.84\\chrome…

HTTP 协议详解

0x01:HTTP 协议简介 HTTP(HyperTextTransferProtocol,超文本传输协议),是一个工作在应用层的协议,它通常运行在 TCP 之上,它指定了客户端以什么样的格式发送信息,以及得到什么样的响…

uniapp微信小程序开发测试获取手机号码

先申请测试号 注意认证但是没有完全认证不要试测试号解密如下 总结我自己的两大坑 1.官网的WXBizDataCrypt需要导入crypto要提前下载但是试了很多次没有效果重新编写这个。将crypto库换成crypto-js库 2.我一直在尝试用下有下面这个界面的测试号不行获取不到用户的code还是啥忘记…

基于SpringBoot+Vue+MySQL的社区维修平台

系统背景 系统管理也都将通过计算机进行整体智能化操作,对于社区维修平台所牵扯的管理及数据保存都是非常多的,例如住户管理、社区公告管理、维修工管理、维修订单管理、接单信息管理、订单信息管理、在线沟通管理、举报信息管理、留言板管理、系统管理等…

记Spring HTTP Invoker远程调用的使用(二)基于Servlet方式,配置servlet映射url-pattern实现

目录 前言 一、概念 二、代码实现 1. 服务端实现 2. 客户端实现 前言 本篇接上一篇记Spring HTTP Invoker远程调用的使用(一)基于Url映射方式,DispatcherServlet统一处理实现-CSDN博客https://blog.csdn.net/u011529483/article/details/141…