aOEWh8.jpg

前段时间二进制安装了个集群,没有安装metrics-server插件,此文档用于记录metrics-server的部署过程。

环境:

k8s版本:1.17.5、部署方式:二进制

简介

从v1.8开始,Kubernetes集群资源监控可以通过Metrics API的形式获取,在1.11就开始逐渐废弃heapster了,采用metrics-server来代替,metrics-server是集群的核心监控数据的聚合器,它是kubelet公开的Summary API中采集指标信息,Metrics-server是扩展的APIServer。

前期准备

生成证书

此步骤在ca证书的目录下进行

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
$ vim aggregator-proxy-csr.json
{
  "CN": "aggregator",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "QingDao",
      "L": "QingDao",
      "O": "k8s",
      "OU": "System"
    }
  ]
}

生成证书

1
cfssl gencert -ca=ca.pem   -ca-key=ca-key.pem   -config=ca-config.json   -profile=kubernetes aggregator-proxy-csr.json | cfssljson -bare aggregator

开启聚合层

  • 设置kube-apiserver启动参数
1
2
3
4
5
6
7
8
9
  # 具体配置
  --requestheader-client-ca-file=/etc/kubernetes/ssl/ca.pem \
  --requestheader-allowed-names= \
  --requestheader-extra-headers-prefix=X-Remote-Extra- \
  --requestheader-group-headers=X-Remote-Group \
  --requestheader-username-headers=X-Remote-User \
  --proxy-client-cert-file=/etc/kubernetes/ssl/aggregator.pem \
  --proxy-client-key-file=/etc/kubernetes/ssl/aggregator-key.pem \
  --enable-aggregator-routing=true \
1
2
3
4
5
6
7
8
--requestheader-client-ca-file:ca 证书
--requestheader-allowed-names:  客户端证书常用名称列表。允许在--requestheader-username-headers指定的标头中提供用户名,如果为空,则允许在--requestheader-client-ca文件中通过当局验证的任何客户端证书
 --requestheader-extra-headers-prefix:  要检查的请求标头前缀列表
 --requestheader-group-headers:  要检查组的请求标头列表
--requestheader-username-headers:  要检查用户名的请求标头列表
--proxy-client-cert-file:  用于证明aggregator或kube-apiserver在请求期间发出呼叫的身份的客户端证书
--proxy-client-key-file:  用于证明聚合器或kube-apiserver的身份的客户端证书的私钥,当它必须在请求期间调用时使用。包括将请求代理给用户api-server和调用webhook admission插件
--enable-aggregator-routing=true:  打开aggregator路由请求到endpoints IP,而不是集群IP
  • 重启kube-apiserver
1
2
$ systemctl daemon-reload 
$ systemctl restart kube-apiserver

安装metrics-server

由于需要更改yaml文件内容,所以没用官方github上直接kubectl apply -f方式

  • 下载yaml文件
1
$ wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml
  • 编辑yaml文件
1
2
3
4
5
6
7
8
9
$ vim components.yaml
......
        args:
          - --cert-dir=/tmp
          - --secure-port=4443
          #添加以下两行
          - --kubelet-insecure-tls #跳过证书校验
          - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,externalDNS  #解析到对应ip
......
  • 部署yaml文件
1
$ kubectl apply -f components.yaml

验证

  • 查看状态
1
2
3
4
$ kubectl get pods -n kube-system |grep metrics
metrics-server-5799d89f84-dfjgx   1/1     Running   0          3h
$ kubectl get apiservice | grep metrics
v1beta1.metrics.k8s.io                 kube-system/metrics-server   True        3h
  • top验证
1
2
3
4
$ kubectl top nodes
NAME            CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
172.16.77.153   20m          0%     2568Mi          16%
172.16.77.167   75m          0%     8298Mi          52%

参考

官方文档

https://blog.csdn.net/ameng734086045/article/details/88245385