前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何通过TMP监控TKE独立集群的etcd

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

原创
作者头像
聂伟星
发布2023-06-13 17:21:57
4420
发布2023-06-13 17:21:57
举报

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

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

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

tmp关联tke独立集群:/document/product/457/84543

1. 给etcd创建service

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

代码语言:javascript
复制
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
复制
[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
复制
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
复制
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
复制
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
复制
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
复制
kubectl get prometheuses  tke-cls-xxxxx -n prom-86rajg7v -o yaml

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

代码语言:javascript
复制
kubectl label serviceMonitor etcd-k8s -n prom-86rajg7v prom_id=prom-86rajg7v

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

这里能正常搜到etcd的监控数据,说明采集正常,tmp默认是没有提供prometheus这种可视化检索页面的,这里可以参考文档配置下/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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 给etcd创建service
  • 2. 通过secret挂载etcd证书
  • 3. 创建serviceMonitor
  • 4. grafana配置etcd的dashboard
相关产品与服务
Prometheus 监控服务
Prometheus 监控服务(TencentCloud Managed Service for Prometheus,TMP)是基于开源 Prometheus 构建的高可用、全托管的服务,与腾讯云容器服务(TKE)高度集成,兼容开源生态丰富多样的应用组件,结合腾讯云可观测平台-告警管理和 Prometheus Alertmanager 能力,为您提供免搭建的高效运维能力,减少开发及运维成本。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com