现在很多业务为了能否在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
独立集群的etcd默认是没有创建service的,并且etcd对应的pod是没有配置label,因此,这里我们需要手动创建endpoint加入所有etcd的master节点,然后配置service关联endpoint才行。
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。
[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即可。
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也不需要做太多变动。
因为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/目录
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
kubectl label secret etcd-certs -n prom-86rajg7v prometheus.tke.tencent.cloud.com/scrape-mount=true
这个时候我们到tmp后端eks集群登陆对应独立集群的file-sync是否能看到证书文件
这里证书已经正常挂载到后端promethues的pod里面了,下面我们来配置serviceMonitor。
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配置,是不是有特殊的配置。
kubectl get prometheuses tke-cls-xxxxx -n prom-86rajg7v -o yaml
看了下配置,serviceMonitorSelector有个label匹配选项,prom_id: prom-86rajg7v,这里是需要给serviceMonitor加上这个label才行
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
独立集群的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 删除。