赞
踩
在没有完善k8s监控体系的情况下,基于k8s集群查看node节点的运行情况。于是想到命令:
$ kubectl top node
$ kubectl top pod
这两个命令会直接报错"Metrics API not available",这是什么原因呢?如何解决?
因为默认情况下k8s集群只提供了收集数据的模块–kubelet中的cadvisor。它类似于zabbix的agent代理程序,用来收集被监控节点的数据信息。
但是k8s集群却没有提供zabbix-server端,没有监控收集端,这时候我们需要自己安装server镜像。这个文件就是metrice-server程序。
因此,我们只需要安装一个Metrics-server端,就可以提供监控的API接口了。
监控端的项目在github上,地址为:https://github.com/kubernetes-sigs/metrics-server
通过提示,我们可以使用下面的命令下载yaml文件,来安装Metrics-server端。命令如下:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
1、默认的yaml文件提供的为外网地址,我们没有VPN是访问不到的。因此,我们需要修改指定的镜像,这里我给大家提供一个docker hub上的镜像地址。
image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.1
2、默认service端和cadvisor端是通过https的证书进行通信的,这时候我们要忽略这个配置。
args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-insecure-tls # 添加这一行
- --kubelet-preferred-address-types=InternalIP
最后,我们有了yaml文件后,执行这个文件就可以了。
$ kubectl apply -f components.yaml
解决方法:新增hostNetwork: true到components.yaml
参考地址:https://stackoverflow.com/questions/53811388/error-from-server-serviceunavailable-the-server-is-currently-unable-to-handle
apiVersion: apps/v1 kind: Deployment metadata: labels: k8s-app: metrics-server name: metrics-server namespace: kube-system spec: selector: matchLabels: k8s-app: metrics-server strategy: rollingUpdate: maxUnavailable: 0 template: metadata: labels: k8s-app: metrics-server spec: hostNetwork: true #新增 containers: - args: - --cert-dir=/tmp - --secure-port=4443 - --kubelet-insecure-tls - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname - --kubelet-use-node-status-port - --metric-resolution=15s image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.1 imagePullPolicy: IfNotPresent
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。