解决metrics部署过程中出现的问题
一、部署metrics过程中因忽视kubernetes管理节点没有部署kubelet和kube-proxy出现的报错
1、当时在测试环境部署完metrics后,正常的kubectl top po 是能正常的查询到容器的cpu和内存使用率,然后拿着测试上的metrics镜像和yaml到生产环境部署就出现无法正常top po显示容器的资源使用率。
在生产环境查看pod的容器状态,并查看日志如下:
发现容器状态是没有问题的,日志显示的其中一个node节点的10250端口拒绝连接,这个端口正好是kubelet的监听端口,这个节点正是我这个kubernetes集群的管理节点,当时是没有部署kubelet和kube-proxy的,解决办法如下,需要添加–enable-aggregator-routing=true到kube-apiserver的配置文件中,然后重启kube-apiserver,如下图:
然后查看容器资源情况,发现可以正常获取了:
注:k8s版本是1.15.7 metrics版本是0.3.6,如果您没有在运行API服务器的主机上运行kube-proxy,则必须确保使用以下kube-apiserver标志启用系统:
–enable-aggregator-routing=true
二、解决metrics中出现报错:Cluster doesn’t provide requestheader-client-ca-file
1、拿着metrics版本是0.3.6的yaml和镜像到其它环境部署,结果部署完成,发现无法正常获取pod的容器资源,这个环境的集群都部署了kubelet和kube-proxy,那么这个基本可以排除,只能查看日志错误了:
从报错提示中看到显示集群无法提供客户端的ca证书导致无法正常的工作,但是我的metrics得yaml中已经添加了
–kubelet-insecure-tls跳过证书检查:
跟之前部署的环境相比除了k8s版本不同,其它基本不同,之前那个环境的k8s版本是1.15.7,这个环境的k8s版本是1.18.4,于是到metric的github逛逛看,发现0.3版本的metrics也是支持k8s1.8+版本的
最后还是换个metrics版本重新下载试试,metrics版本换成0.4.1,在kube-apiserver中启用聚合层,如下:
1.1 私钥文件通过 --proxy-client-key-file
1.2 通过签名的客户证书文件 --proxy-client-cert-file
1.3 通过签署客户端证书文件的CA的证书 --requestheader-client-ca-file
1.4 通过以下方式在已签名的客户端证书中提供有效的通用名称(CN): --requestheader-allowed-names
1.5 用来存储用户名的标题 --requestheader-username-headers
1.6 通过其存储组的标题 --requestheader-group-headers
1.7 通过附加到所有额外标题的前缀 --requestheader-extra-headers-prefix
2、修改下载下来的metrics的yaml文件,主要修改镜像地址和容器的args部分:
然后创建成功,查看容器资源使用情况:
ok,已经能正常使用!
关于kubenetes的聚合层配置参数详解可以参考kubernetes官方文档:https://kubernetes.io/docs/tasks/extend-kubernetes/configure-aggregation-layer/