补充:部署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用户,是会报如下错误
查看API日志
有两种解决方案
方案一
创建anonymous集群用户
kubectl create clusterrolebinding system:anonymous --clusterrole=cluster-admin --user=system:anonymous
这种方式最简单,但是也会带来安全问题,建议使用第二种方案
方案二
授权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
详见:https://blog.csdn.net/zorsea/article/details/105037533