Metrics API not available in Kubernetes minikube
Published in:2021-05-03 | Category: DevOps
Words: 608 | Reading time: 2min

问题

当完成安装minikube并启动集群后,如果我们直接使用kubectl top命令去查看node的资源信息,会提示metrics-server服务不可用。

1
kubectl top node

解决方法

通常情况下,minikube是不自带metrics-server的,需要手动安装。

Step 1: 查看metrics-server的Pod是否存在

1
kubectl get pods -n kube-system 

执行完这个命令后发现没有metrics-server的Pod存在。

Step 2: 安装metrics-server

执行下面命令安装metrics-server组件:

1
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

安装完成后,执行kubectl top node命令,仍然提示Metrics API not available。 通过以下命令查看metrics-server的deployment状态:

1
kubectl -n kube-system get deployment metrics-server

READY状态为0/1,表示metrics-server组件未正常运行。

通过以下命令查看metrics-server的log日志信息

1
kubectl -n kube-system logs deployment/metrics-server

服务器日志中显示metrics-server组件启动失败,原因是failed to verify certificate。这种情况下,我们可以更改metrics-server组件的启动参数,添加--kubelet-insecure-tls参数,以跳过证书验证。将下面的command参数添加到metrics-serverDeployment中:

1
2
3
4
command:
- /metrics-server
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP

运行以下命令将metrics-server的component.yaml文件下载下来然后添加上面的参数.

1
curl -L https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -o components.yaml

编辑components.yaml文件,找到metrics-serverDeployment部分,添加上面的参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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:
containers:
- args:
- --cert-dir=/tmp
- --secure-port=10250
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --kubelet-use-node-status-port
- --metric-resolution=15s
image: registry.k8s.io/metrics-server/metrics-server:v0.7.1
imagePullPolicy: IfNotPresent
command:
- /metrics-server
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP
livenessProbe:
failureThreshold: 3
httpGet:
path: /livez
port: https
scheme: HTTPS
periodSeconds: 10
name: metrics-server
ports:
- containerPort: 10250
name: https
protocol: TCP
.................

保存文件,然后运行以下命令安装metrics-server组件。

1
kubectl apply -f components.yaml

Step 3: Stop minikube

安装完metrics-server组件后,需要停止minikube集群。

1
minikube stop

Step 4: Start minikube

启动minikube集群。

1
minikube start

Step 5: 检查 metrics-server的状态

执行kubectl top node命令,查看node的资源信息。可以看到这次就运行正常了。

1
kubectl top node

总结

minikube默认情况下是不自带metrics-server组件的,需要手动安装。安装完成后,需要停止minikube集群,然后启动集群,才能正常使用kubectl top命令查看node的资源信息。

Prev:
Kubernetes Deployment 的伸缩性
Next:
Kubernetes Network Policy Pod之间的网络策略通信