首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何通过TMP监控TKE独立集群的etcd

如何通过TMP监控TKE独立集群的etcd

原创
作者头像
聂伟星
发布于 2023-06-13 09:21:57
发布于 2023-06-13 09:21:57
58700
代码可运行
举报
运行总次数:0
代码可运行

现在很多业务为了能否在k8s上进行一些定制的二次开发,都会选择tke的独立集群,独立集群,用户可以自行管理master做一下定制化配置,如果是托管集群,需要工单联系后端修改。

对于独立集群,master是用户自行管理,所以master的监控需要自行监控,这里一般可以直接通过腾讯云托管的prometheus(TMP)来监控master,但是tmp不会监控到k8s的etcd,只有apiserver、scheduler等监控,这个时候etcd的监控就需要我们自己来做。

下面我们来配置下如何通过TMP来监控独立集群的etcd,下面的操作是基于独立集群已经正常关联了tmp的前提。关于TMP和独立集群的创建使用可以参考下官网文档。 tke独立集群创建:https://cloud.tencent.com/document/product/457/32189

tmp关联tke独立集群:https://cloud.tencent.com/document/product/457/84543

1. 给etcd创建service

独立集群的etcd默认是没有创建service的,并且etcd对应的pod是没有配置label,因此,这里我们需要手动创建endpoint加入所有etcd的master节点,然后配置service关联endpoint才行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1
kind: Service
metadata:
  name: etcd-k8s
  namespace: kube-system
  labels:
    k8s-app: etcd
spec:
  type: ClusterIP
  clusterIP: None
  ports:
  - name: port
    port: 2379
    protocol: TCP

---
apiVersion: v1
kind: Endpoints
metadata:
  name: etcd-k8s
  namespace: kube-system
  labels:
    k8s-app: etcd
subsets:
- addresses:
  - ip: 172.16.155.16
  - ip: 172.16.155.11
  - ip: 172.16.16.17
  - ip: 172.16.155.8
  - ip: 172.16.1.3
  ports:
  - name: port
    port: 2379
    protocol: TCP

集群有5个master节点,可以先获取master节点ip,然后配置到endpoint里面,etcd都hostnetwork模式pod运行。这里有个问题就是后续如果添加或者移除master节点,需要同步修改下endpoint列表。 当然也可以修改etcd的yaml直接加上label,这样就可以直接在service通过Selector关联etcd的pod,但是这里需要修改每个master节点的etcd yaml文件,然后重启etcd,etcd的yaml文件是/etc/kubernetes/manifests/etcd.yaml,可以在metadata字段加上labels来配置etcd pod的label。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@172-16-155-11 /etc/kubernetes/manifests]# cat etcd.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: etcd
  annotations:
    scheduler.alpha.kubernetes.io/critical-pod: ""
  creationTimestamp: null
  name: etcd
  namespace: kube-system
spec:
  containers:
  - args:
    - --cert-file=/etc/etcd/certs/etcd-node.crt
    - --key-file=/etc/etcd/certs/etcd-node.key
    ...............

然后创建一个service关联上etcd的pod即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: etcd
  name: etcd-k8s
  namespace: kube-system
spec:
  ports:
  - name: port
    port: 2379
    protocol: TCP
  selector:
    app: etcd
  sessionAffinity: None
  type: ClusterIP

这里有2种方式创建svc都可以,一般master节点变动很少,所以svc也不需要做太多变动。

2. 通过secret挂载etcd证书

因为etcd这里都是有证书鉴权的 ,这里通过serviceMonitor采集etcd监控需要配置证书才行,serviceMonitor是可以直接读取后端prometheus容器的证书配置的,tmp这里是vmagent,那么这里有什么办法将证书挂载到vmagent容器。

tmp的prometheus里面有这里提供了一个file-sync容器,只要集群内的secret有打上prometheus.tke.tencent.cloud.com/scrape-mount=true这个label,就会将文件同步到file-sync容器/etc/prometheus/secrets/目录下,后面就可以直接在serviceMonitor配置这个路径来配置证书。

下面我们来创建下secret,etcd的证书配置都在master节点的/etc/etcd/certs/目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl -n prom-86rajg7v create secret generic etcd-certs --from-file=/etc/etcd/certs/etcd-node.crt --from-file=/etc/etcd/certs/etcd-node.key  --from-file=/etc/etcd/certs/etcd-cluster.crt

创建完secret后,我们给secret打上label

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl label secret etcd-certs -n prom-86rajg7v prometheus.tke.tencent.cloud.com/scrape-mount=true

这个时候我们到tmp后端eks集群登陆对应独立集群的file-sync是否能看到证书文件

这里证书已经正常挂载到后端promethues的pod里面了,下面我们来配置serviceMonitor。

3. 创建serviceMonitor

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: etcd-k8s
  namespace: prom-86rajg7v
  labels:
    k8s-app: etcd-k8s
spec:
  jobLabel: k8s-app
  endpoints:
  - port: port
    interval: 30s
    scheme: https
    tlsConfig:
      caFile: /etc/prometheus/secrets/etcd-certs/etcd-cluster.crt
      certFile: /etc/prometheus/secrets/etcd-certs/etcd-node.crt
      keyFile: /etc/prometheus/secrets/etcd-certs/etcd-node.key
      insecureSkipVerify: true
  selector:
    matchLabels:
      k8s-app: etcd
  namespaceSelector:
    matchNames:
    - kube-system

我们在ServiceMonitor配置证书配置和关联下第一步创建的service即可。

但是这里遇到一个问题,就是当我创建完ServiceMonitor后,tmp控制台的采集配置显示target都是空的,这是什么原因呢?

tmp关机tke集群会默认创建一个prometheuses对象,这里会定义采集那些ServiceMonitor,这里看下集群的prometheuses配置,是不是有特殊的配置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl get prometheuses  tke-cls-xxxxx -n prom-86rajg7v -o yaml

看了下配置,serviceMonitorSelector有个label匹配选项,prom_id: prom-86rajg7v,这里是需要给serviceMonitor加上这个label才行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl label serviceMonitor etcd-k8s -n prom-86rajg7v prom_id=prom-86rajg7v

加上label后,这里就能正常获取target了。这里我们从prometheus检索下metrics数据,看看有没有etcd的数据。

这里能正常搜到etcd的监控数据,说明采集正常,tmp默认是没有提供prometheus这种可视化检索页面的,这里可以参考文档配置下https://cloud.tencent.com/developer/article/old/2261648

4. grafana配置etcd的dashboard

独立集群的etcd监控数据已经采集到tmp了,下面就是需要在grafana配置dashboard,这里有2种方案,一种是在tmp的集成中心安装etcd的dashboard

还可以到grafana的官网找下etcd的dashboard,https://grafana.com/grafana/dashboards/3070-etcd/

直接通过id导入模板,如果没开通外网,可以直接通过josn文件导入模板。

官网grafana的etcd模板监控如下

集成中心etcd模板监控如下

这里可能有些指标没有或者promsql的label匹配有问题,这里根据实际的label匹配修改下即可。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【前端面试题】—53道常见NodeJS基础面试题(附答案)
说到前端就不得不提到后端,我们给用户展示页面所需的数据正是从后端获取的,所以了解后端的运行原理和技术的实现很有必要。
winty
2023/10/21
1K0
【前端面试题】—53道常见NodeJS基础面试题(附答案)
gulp 源码解析(一):Stream 详解
本文介绍了什么是Stream,以及基于Stream的流处理框架和工具。Stream是一种基于事件驱动的编程模型,可以用于处理异步数据流。在Node.js中,Stream的API是基于Node.js的I/O事件机制实现的。通过使用Stream,我们可以处理大量的异步数据流,例如在Web开发中,可以使用Stream来处理HTTP请求和响应。在Node.js中,可以使用Stream来处理异步操作,例如读写文件、网络编程等。在Stream处理异步数据流时,可以使用各种流处理框架和工具,例如Node.js内置的Transform和PassThrough流处理框架,以及第三方框架如through2、readable-stream等。通过使用Stream和流处理框架,我们可以提高代码的可读性和可维护性,并提高代码的性能和稳定性。
小时光
2017/06/27
1.4K0
gulp 源码解析(一):Stream 详解
一文学会 Node.js 中的流[每日前端夜话0xF4]
用 Dominic Tarr 的话来说:“流是 Node 中最好的,也是最容易被误解的想法。”即使是 Redux 的创建者和 React.js 的核心团队成员 Dan Abramov 也害怕 Node 流。
疯狂的技术宅
2019/12/11
2.6K0
NodeJS模块研究 - stream
构建复杂程序的时候,通常会将系统拆解成若干功能,这些功能的之间的接口遵循一定的规范,以实现组合连接,共同完成复杂任务。例如管道运算符 | 。
心谭博客
2020/04/21
1.1K0
nodejs的基础概念
多行表达式:这里指的是循环,与在 js 中做的循环是一致的。每输出一行回车就可以,node 会自动检测是否为连续多行表达式。
用户1134788
2022/05/09
9900
nodejs的基础概念
Node.js 流源码解读之可读流
1. 基本概念 1.1. 流的历史演变 流不是 Node.js 特有的概念。它们是几十年前在 Unix 操作系统中引入的,程序可以通过管道运算符(|)对流进行相互交互。 在基于 Unix 系统的 MacOS 以及 Linux 中都可以使用管道运算符(|),它可以将运算符左侧进程的输出转换成右侧的输入。 在 Node 中,我们使用传统的 readFile 去读取文件的话,会将文件从头到尾都读到内存中,当所有内容都被读取完毕之后才会对加载到内存中的文件内容进行统一处理。 这样做会有两个缺点: 内存方面:占用大量
用户1097444
2022/06/29
2.3K0
Node.js 流源码解读之可读流
解析Node.js 中的 Stream(流)
流(Stream)是驱动 Node.js 应用的基础概念之一。它是数据处理方法,用于按顺序将输入读写到输出中。
conanma
2022/01/05
2.9K0
Node.js--Stream 1. 概述2. Readable Stream(可读流)3. Writable Stream(可写流)4. 流模式(objectMode )5. 缓冲(highWa
  流(stream)在 Node.js 中是处理流数据的抽象接口(abstract interface)。 stream 模块提供了基础的 API 。使用这些 API 可以很容易地来构建实现流接口的对象。
菜的黑人牙膏
2019/01/21
1.6K0
NodeJs 事件循环-比官方翻译更全面
事件循环使Node.js可以通过将操作转移到系统内核中来执行非阻塞I/O操作(尽管JavaScript是单线程的)。
mrsuperli
2019/12/24
2.4K0
NodeJs 事件循环-比官方翻译更全面
这里有一份Node.js入门指南和实践,请注意查收
JS 是脚本语言,脚本语言都需要一个解析器才能运行。对于写在 HTML 页面里的 JS,浏览器充当了解析器的角色。而对于需要独立运行的 JS,NodeJS 就是一个解析器。
null仔
2020/02/28
3.8K0
这里有一份Node.js入门指南和实践,请注意查收
【nodejs原理&源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick
事件循环是Node.js能够实现非阻塞I/O的基础,尽管JavaScript应用是单线程运行的,但是它可以将操作向下传递到系统内核去执行。
大史不说话
2019/06/19
1.3K0
【nodejs原理&源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick
分享 10 道 Nodejs EventLoop 和事件相关面试题
通过对以下 10 个面试题的分享,助您更好的理解 Node.js 的事件和 EventLoop 相关知识
五月君
2019/10/14
1.5K0
分享 10 道 Nodejs EventLoop 和事件相关面试题
Node中的流
stream是数据集合,与数组、字符串差不多。但stream不一次性访问全部数据,而是一部分一部分发送/接收(chunk式的),所以不必占用那么大块内存,尤其适用于处理大量(外部)数据的场景
ayqy贾杰
2019/06/12
2.4K1
Node中的流
一篇文章构建你的 NodeJS 知识体系(W字长文)
最近读《重学前端》,开篇就是让你拥有自己的知识体系图谱,后续学的东西补充到相应的模块,既可以加深对原有知识的理解,又可以强化记忆,很不错的学习方案。
coder_koala
2020/08/27
2K0
[译]关于Node.js streams你需要知道的一切
Node.js的stream模块是有名的应用困难,更别说理解了。那现在可以告诉你,这些都不是问题了。
frontoldman
2019/09/02
1.2K0
[译]关于Node.js streams你需要知道的一切
深入理解 Node.js 的 Buffer
前言:Buffer 模块是 Node.js 非常重要的模块,很多模块都依赖它,本文介绍一下 Buffer 模块底层的原理,包括 Buffer 的核心实现和 V8 堆外内存等内容。
theanarkh
2021/10/21
2.9K0
一篇文章弄明白Node.js与二进制数据流
二进制数据就像上图一样,由0和1来存储数据。普通的十进制数转化成二进制数一般采用"除2取余,逆序排列"法,用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。例如,数字10转成二进制就是1010,那么数字10在计算机中就以1010的形式存储。
用户6835371
2021/06/01
3.6K0
一篇文章弄明白Node.js与二进制数据流
关于NodeJS工作原理的五个误解
NodeJS 诞生于 2009 年,由于它使用了 JavaScript,在这些年里获得了非常广泛的流行。它是一个用于编写服务器端应用程序的 JavaScript 运行时,但是 "它就是JavaScript" 这句话并不是 100% 正确的。
ConardLi
2020/04/01
1.7K0
「Nodejs进阶」一文吃透异步I/O和事件循环
本文讲详细讲解 nodejs 中两个比较难以理解的部分异步I/O和事件循环,对 nodejs 核心知识点,做梳理和补充。
用户6835371
2021/09/06
2.3K0
前端Node.js面试题
Node.js 是一个开源与跨平台的 JavaScript 运行时环境。在浏览器外运行 V8 JavaScript 引擎(Google Chrome 的内核),利用事件驱动、非阻塞和异步输入输出模型等技术提高性能。我们可以理解为:Node.js 就是一个服务器端的、非阻塞式I/O的、事件驱动的JavaScript运行环境。
xiangzhihong
2021/12/30
1.6K0
前端Node.js面试题
推荐阅读
相关推荐
【前端面试题】—53道常见NodeJS基础面试题(附答案)
更多 >
交个朋友
加入[腾讯云] DeepSeek开发者交流群
前沿技术深度讨论 发展开发者人脉圈
加入腾讯云技术交流站
洞悉AI新动向 Get大咖技术交流群
加入AICoding云开发技术交流群
智能编码实践分享 聚焦AI+云开发
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档