补充:部署Metrics-server组件

### 一、Metrics-server组件介绍

metrics-server是用来监控k8s资源的组件,可以查看node或pod的CPU使用率,内存大小等。

默认k8s是没有安装的;

该组件默认在kube-system命名空间中;

二、安装

2.1 下载yaml文件

FQ下载最新版本的yaml文件

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

指定下载v0.4.1版本

https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.4.1/components.yaml

这里我下载的是最新版本的yaml文件

2.2 修改yaml文件

1.修改components.yaml

vim components.yaml
...
image: rancher/metrics-server:v0.4.1 #在137行
args:
- --kubelet-insecure-tls #添加这行
- --kubelet-preferred-address-types=InternalIP #在134行,删除ExternalIP,Hostname
...
  • 默认yaml文件中的镜像需要FQ才能下载,目前最新版本为v0.5.1,这里我使用的是国内镜像v0.4.1版本,效果是一样的。
  • --kubelet-insecure-tls:跳过验证SSL证书
  • InternalIP:使用IP方式

2.应用yaml清单

kubectl apply -f components.yaml

3.验证

kubectl get pod -n kube-system
kubectl top node
kubectl top pods

参考资料:

https://www.jianshu.com/p/262177fa9320

http://carey.akhack.com/2019/05/28/kubernetes监控metrics安装

https://www.cnblogs.com/lfl17718347843/p/14283796.html

三、遇到的报错

这里将我遇到的报错以及参考博文总结如下,我的报错都解决了,懒得复现再截图了,所以这里的报错图片均引用其他博主的图片,谢谢博主们解惑。

3.1 拉取镜像错误

在这里插入图片描述

需要指定镜像标签

详见:https://blog.csdn.net/qq_20042935/article/details/105043400

3.2 解决权限403

metrics-server组件是使用metrics-server用户去请求api的,如果没有授权metrics-server用户,是会报如下错误

img

查看API日志

img

有两种解决方案

方案一

创建anonymous集群用户

kubectl create clusterrolebinding system:anonymous --clusterrole=cluster-admin --user=system:anonymous

image-20211117160027423

这种方式最简单,但是也会带来安全问题,建议使用第二种方案

方案二

授权metrics-server用户

1.创建metrics-server证书请求文件

cd /opt/cluster/ssl
cat > kubernetes/metrics-server-csr.json << "EOF"
{
  "CN": "system:metrics-server",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "system"
    }
  ]
}
EOF

#生成证书
cd /opt/cluster/ssl
cfssl gencert \
-ca=rootca/rootca.pem \
-ca-key=rootca/rootca-key.pem \
--config=cfssl-conf.json \
-profile=common kubernetes/metrics-server-csr.json | cfssljson -bare kubernetes/metrics-server

这里需要使用到二进制部署API时用到的ca证书,用来生成metrics-server的证书文件

2.配置metrics-server RBAC授权

cat > auth-metrics-server.yaml << EOF
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: system:auth-metrics-server-reader
  labels:
    rbac.authorization.k8s.io/aggregate-to-view: "true"
    rbac.authorization.k8s.io/aggregate-to-edit: "true"
    rbac.authorization.k8s.io/aggregate-to-admin: "true"
rules:
- apiGroups: ["metrics.k8s.io"]
  resources: ["pods", "nodes"]
  verbs: ["get", "list", "watch"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: metrics-server:system:auth-metrics-server
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:auth-metrics-server-reader
subjects:
- kind: User
  name: system:metrics-server
  namespace: kube-system
EOF

#应用yaml清单
kubectl apply -f auth-metrics-server.yaml

3.修改kube-apiserver配置文件

vim /usr/lib/systemd/system/kube-apiserver.service
...
#添加如下内容
--requestheader-client-ca-file=/opt/cluster/ssl/rootca/rootca.pem \
--requestheader-allowed-names=aggregator,metrics-server \
--requestheader-extra-headers-prefix=X-Remote-Extra- \
--requestheader-group-headers=X-Remote-Group \
--requestheader-username-headers=X-Remote-User \
--proxy-client-cert-file=/opt/cluster/ssl/kubernetes/metrics-server.pem \
--proxy-client-key-file=/opt/cluster/ssl/kubernetes/metrics-server-key.pem \
...

4.重启kube-apiserver

systemctl daemon-reload
systemctl restart kube-apiserver

5.验证

kubectl top pods
kubectl top nodes

image-20211117160450597

详见:https://blog.csdn.net/zorsea/article/details/105037533

https://www.cnblogs.com/heian99/p/14608415.html

https://www.cnblogs.com/heian99/p/15144895.html

posted @ 2021-11-16 14:14  努力吧阿团  阅读(786)  评论(0编辑  收藏  举报