这次变了😄,文档下面详说下,强调一下当前背景:
- 这是基于之前的搭建情况下进行的,条件有限,我们当前使用的是单节点集群(只有一个master,既当控制面又当工作节点)。
我与Metrics Server的那点事
本来是不想先整metrics的,dashboard弄好了,本来挺舒服的,又去dashboard仓库转了一圈,看到了下面这张图,然后就发现,我的CPU Usage 和Memory Usage呢???
然后Google一下,,,有人说是Metrics API有问题,就去看了一下,dashboard-metrics-scraper日志,果然。。。k8s自己本身api server 不提供Metrics数据指标整合接口实现。。。kubectl top 命令也是显示
error: metrics not available yet
。。没办法,那整一下Metrics Server吧😔
仔细分析一波文档
k8s官方文档中Metrics API 相关介绍,详见
API Server没有提供Metrics API的具体实现,k8s只提供了一套API定义供相关第三方工具去自己实现相关指标整合,并将Metrics接口服务注册到API Server。
实现Metrics API的指标采集工具,目前我了解到的是下面这俩:
Prometheus:这个之前有使用过,搭配Alertmanager和Grafana,做服务预警和指标监控,就感觉挺爽。
Metrics Server:这个看文档说的好像是没有Prometheus专业,也不推荐Prometheus直接使用它的指标数据,因为它的数据是实时的没有提供持久化(这里我就理解它为轻量一点吧😄)。
为了让dashboard能采集到node和pod的相关指标,以及kubectl top可以使用,就怎么简单怎么来,选择Metrics server作为Metrics API实现server。
Metrics Server仓库地址 [->戳这<-],下面我们来简述一下,对我们有用的文档内容:
安装前置条件
Metrics Server到API server的网络是可以访问的。
k8s API Server是开启聚合层配置的,详见。
- 这块主要是双向鉴权相关的内容(即从client request => api server => metrics server之间的双向鉴权)。
需要开启Kubelet 认证/鉴权,详见,这个应该创建集群的时候,不特殊指定,默认开启的:
这块主要是 metrics server => kubelet 提供的指标采集api 之间的鉴权。
kubelet默认工作目录:/var/lib/kubelet
查看配置文件/var/lib/kubelet/config.yaml,可见webhook是开启的,并且使用的x509认证,证书就是集群自签的ca.crt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17有点长,这里之查看前15行内容
head --line 15 config.yaml
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 0s
enabled: true
x509:
clientCAFile: /etc/kubernetes/pki/ca.crt
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 0s
cacheUnauthorizedTTL: 0s
cgroupDriver: systemd
kubelet使用的ca需要是集群的ca,这个确实是集群的ca,上面的clientCAFile: /etc/kubernetes/pki/ca.crt就是集群的ca,
- 自签的这个证书上并没有绑定具体的node ip,就会产生x509校验不过问题。
- 最简单的办法,在启动Metrics Server容器时使用–kubelet-insecure-tls,使用不安全的tls访问kubelet的指标接口。
- 这个x509校验要是不过,Metrics Server是没办法注册到API Server的。
容器运行时,需要实现Container Metrics RPCs ,我们使用的是Docker,这个具体没有去研究,也是有一套API,Docker肯定是实现了,不然kubelet也不可能采集到Pod的数据
- 这个主要是kubelet去采集当前node上的各个pod的指标数据
容器启动参数
- –kubelet-preferred-address-types:访问节点地址,优先使用顺序,默认:[Hostname, InternalDNS, InternalIP, ExternalDNS, ExternalIP]
- –kubelet-insecure-tls:这个就是上面说的,可以不校验ca,文档上说仅对测试目的这么用,但是自己学习环境,也差不多。
- –requestheader-client-ca-file:指定一个根证书文件,用于发起请求的客户端(也就是Metrics Server)的验证。
提供helm安装和yaml文件直接安装,下面我们使用yaml文件安装
开始安装
下载yaml文件, 这块文档提供的github地址不是最终文件地址,需要重定向跳转,没办法使用jsdelivr转换地址,只能科学上了。
1
2
3
4
5
6
7
8
9
10
11
12
13切换目录到自定义的插件目录
cd ~/.kube/addons
科学上网下载
curl -o metrics-server.yaml https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -L
修改一下metrics-server.yaml文件加上--kubelet-insecure-tls参数
创建metrics-server相关负载
kubectl apply -f metrics-server.yaml
查看deployment状态
kctl -n kube-system get deployment.apps/metrics-server
END
Metrics Server安装完了,再去dashboard上看看,CPU usage 和 Memory usage有了,还有需要注意得一个地方,访问dashboard的/overview路径是对应的上面的那个例图,我的Dashboard v2.4.0+0.ge75ebcf68,点击logo跳转的是/workloads,不是/overview。。。。反正是访问/overview就和上面那个例图一样了。。😄