1、背景

基于kubesphere最小化安装,ks默认不开启对etcd的监控,那么对于外部的etcd集群我们如何对接到ks里面来呢。
这篇文档接我上一篇排查apiserver监控的文章,最好先过目下:https://kubesphere.com.cn/forum/d/1374-kube-apisrever-kubesphere

2、对接方法

首先,老规矩查看prometheus server的配置,看看默认对于etcd是怎样监控的,容器中查看配置:

可以看到,还是使用的endpoints的方式来自动发现并监控的,并且是https的方式,这里的证书配置都写死了。好吧,写死了不要紧,你得看看这个证书配置是怎么挂载到容器里面的,直接在ks控制台查看prometheus-k8s-system服务的配置文件:

OK,我们这个证书的目录竟然来自于一个secret,吱吱,原来如此,那就一查到底:

明白了吧,也就是说,这个secret是必须要存在的,到这里就清楚了吧,如何加上etcd监控,利用etcd的证书创建个secret就行:

但是同志,这样还是不行的,我的是最小化安装也就是说我之前部署ks的yaml文件是没有开启etcd监控的,我记得配置默认关于etcd是这样的:

这里的ip我估计是你如果采用ks来部署etcd,默认给你的etcd三个service ip,这里是写死的(我猜的,不知道对不对),然后我们改成如下的配置:

三个ip替换成你自己的etcd集群IP,另外修改monitoring: True即可,好了到这里就完事了,我们修改一下ks-install的配置就行,k8s会自动帮我们重新部署,在这里修改即可哦:

耐心等待安装完成后,我们查看集群的监控配置:
开启了etcd的service monitor:

看看etcd monitor对应的svc是啥:

在kube-system里面:

好了,我们看看界面上的监控效果:

3、注意

有些同学可能会问,要是我的外部etcd集群用的是http呢,还需要创建么,需要的,因为这个配置写死了,我们创建一个空的secret就行,其余的操作不变:
kubectl -n kubesphere-monitoring-system create secret generic kube-etcd-client-certs

4、总结

如果懂得了prometheus在k8s上的实践原理,自动发现机制,其实没啥难度的,任何看起来高大上的东西都构建在基础知识之上,了解运行机制,就能举一反三。

    10 个月 后

    vincentgao 看了这篇帖子收益匪浅, 请问能介绍下怎么改造 kubesphere 3.0 么?

    # kubectl get endpoints,svc -n kube-system | grep etcd
    endpoints/etcd                                                 10.67.39.198:2379,10.67.39.199:2379,10.67.39.200:2379                   28d
    endpoints/prometheus-kube-prometheus-kube-etcd                 10.67.39.198:2379,10.67.39.199:2379,10.67.39.200:2379                   60d
    service/etcd                                                 ClusterIP   None            <none>        2379/TCP                       28d
    service/prometheus-kube-prometheus-kube-etcd                 ClusterIP   None            <none>        2379/TCP                       60d