一: metircserver概述:

1.1 Kubernetes Metrics Server:

1.Kubernetes Metrics Server 是 Cluster 的核心监控数据的聚合器,kubeadm 默认是不部署的。

2. Metrics Server 供 Dashboard 等其他组件使用,是一个扩展的 APIServer,依赖于 API Aggregator。所以,在安装 Metrics Server 之前需要先在 kube-apiserver 中开启 API Aggregator。

3. Metrics API 只可以查询当前的度量数据,并不保存历史数据。

4. Metrics API URI 为 /apis/metrics.k8s.io/,在 k8s.io/metrics 下维护。

必须部署 metrics-server 才能使用该 API,metrics-server 通过调用 kubelet Summary API 获取数据。

1.2 前提条件

注意:使用 Metrics Server 有必备两个条件:

1、API Server 启用 Aggregator Routing 支持。否则 API Server 不识别请求:

Error from server (ServiceUnavailable): the server is currently unable to handle the request (get pods.metrics.k8s.io)

2、API Server 能访问 Metrics Server Pod IP。否则 API Server 无法访问 Metrics Server:

E1223 07:23:04.330206       1 available_controller.go:420] v1beta1.metrics.k8s.io failed with: failing or missing response from https://10.171.248.214:4443/apis/metrics.k8s.io/v1beta1: Get https://10.171.248.214:4443/apis/metrics.k8s.io/v1beta1: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

3、启用API Aggregator,API Aggregation 允许在不修改 Kubernetes 核心代码的同时扩展 Kubernetes API,即:将第三方服务注册到 Kubernetes API 中,这样就可以通过 Kubernetes API 来访问第三方服务了,例如:Metrics Server API。注:另外一种扩展 Kubernetes API 的方法是使用 CRD(Custom Resource Definition,自定义资源定义)。

1.3 k8s 1.22.4 部署metricserver

github地址:

https://github.com/kubernetes-sigs/metrics-server/releases
最新版本:
 https://github.com/kubernetes-sigs/metrics-server/releases/tag/v0.5.2

wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.5.2/components.yaml --no-check-certificate
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.5.2/components.yaml

cat components.yaml |grep image

需要先下载镜像

k8s.gcr.io/metrics-server/metrics-server:v0.5.2

registry.aliyuncs.com/google_containers/metrics-server:v0.5.2

vim components.yaml
----

image: registry.aliyuncs.com/google_containers/metrics-server:v0.5.2

-----

image.png

image.png
image.png

1.3 修改kube-apiserver 配置文件

二、修改配置

1、检查 API Server 是否开启了 Aggregator Routing:查看 API Server 是否具有 --enable-aggregator-routing=true 选项。

重启kube-apiserver 
service kube-apiserver restart 

ps -ef |grep kube-apiserver

image.png

image.png

1.4 配置 components.yaml

vim components.yaml

----
 spec:
      containers:
      - args:
        - --cert-dir=/tmp
        - --secure-port=4443
        - --kubelet-preferred-address-types=InternalIP   # 删掉 ExternalIP,Hostname这两个,这里已经改好了,你那边要自己核对一下
        - --kubelet-use-node-status-port
        - --metric-resolution=15s
        - --kubelet-insecure-tls     ### 加上这句配置
        image: registry.aliyuncs.com/google_containers/metrics-server/metrics-server:v0.5.2
        imagePullPolicy: IfNotPresent

-----

kubectl apply -f components.yaml

image.png

image.png

1.5 验证:

kubectl top node 
kubectl top pod -n kube-system 

image.png
image.png