作者:李毓

在正常 情况下,控制台输入kubectl top pods 命令,会返回如下提示:

[root@adm-master ~]# kubectl top pods 
Error from server (NotFound): the server could not find the requested resource (get services http:heapster:)

这是因为还缺少个组件,这个组件叫做metric-server。

这是一个K8S的资源监控工具,监控CPU和内存的使用情况。他是一款必须安装的组件,因为有其他许多组件依赖他,比如HPA,scheduler,kubectl top

下面我们来安装:

在这里下载最新的版本

https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/metrics-server
[root@adm-master ~]# kubectl apply -f metrics-server-latest/
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
serviceaccount/metrics-server created
configmap/metrics-server-config created
deployment.apps/metrics-server-v0.3.6 created
service/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created

然后你会发现,仍然提示刚才的错误。

其实,官网已经提示了,metric-server安装要满足2个条件

1、在master节点要能访问metrics server pod ip(kubeadm部署默认已经满足该条件,二进制部署需注意要在master节点也部署node组件)
2、apiserver启用聚合层支持(kubeadm默认已经启用,二进制部署需自己启用)
yaml里增加两个参数:跳过证书验证和使用node ip通信

  • --kubelet-insecure-tls
  • --kubelet-preferred-address-types=InternalIP

在deployment.yaml 修改配置:

- name: metrics-server
        image: registry.cn-shenzhen.aliyuncs.com/carp/metrics-server-amd64:0.3.1
        imagePullPolicy: IfNotPresent
        args:
          - --cert-dir=/tmp
          - --secure-port=4443
          - --kubelet-insecure-tls
          - --kubelet-preferred-address-types=InternalIP

kubectl apply -f 之后仍然提示之前的错误。

我们再看一下api 的日志

E0817 14:43:50.033248       1 available_controller.go:420] v1beta1.metrics.k8s.io failed with: failing or missing response from https://10.1.194.67:443/apis/metrics.k8s.io/v1beta1: Get https://10.1.194.67:443/apis/metrics.k8s.io/v1beta1: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

我们在/etc/kubernetes/manifests里面改一下apiserver的配置

注意:这个是k8s在1.7的新特性,如果是1.16版本的可以不用添加,1.17以后要添加。这个参数的作用是Aggregation允许在不修改Kubernetes核心代码的同时扩展Kubernetes API。

--enable-aggregator-routing=true

重新应用一下
kubectl apply -f kube-apiserver.yaml

大功告成

K8S中安装metrics-server的正确方式