K8S从⼊门到放弃系列-(13)Kubernetes集mertics-server部署
集部署好后,如果我们想知道集中每个节点及节点上的pod资源使⽤情况,命令⾏下可以直接使⽤kubectl top node/pod来查看资源使⽤情况,默认此命令不能正常使⽤,需
要我们部署对应api资源才可以使⽤此命令。从 Kubernetes 1.8 开始,资源使⽤指标(如容器 CPU 和内存使⽤率)通过 Metrics API 在 Kubernetes 中获取, metrics-server 替代了
heapster。Metrics Server 实现了Resource Metrics API,Metrics Server 是集范围资源使⽤数据的聚合器。 Metrics Server 从每个节点上的 Kubelet 公开的 Summary API 中采
集指标信息。heapster从1.13版本开始被废弃,官⽅推荐使⽤Metrics Server+Prometheus⽅案进⾏集监控。
1、下载资源清单配置⽂件(6个)
项⽬地址:
配置⽂件有两种获取⽅式:
1、
2、github/kubernetes/kubernetes/tree/release-1.14/cluster/addons/metrics-server(推荐使⽤此⽅式)
[root@k8s-master01 ~]# mkdir /opt/metrics
### 选择对应分⽀,下载指定配置⽂件
###或者直接git clone github/kubernetes/kubernetes.git,metrics-server 插件位于 kubernetes 的 cluster/addons/metrics-server/ ⽬录下
[root@k8s-master01 metrics]# for file in auth-delegator.yaml auth-reader.yaml metrics-apiservice.yaml metrics-server-deployment.yaml metrics-server-service.yaml resource-reader.yaml;do wget raw.githubusercontent/kubernetes/kub 2、修改配置⽂件
由于某些原因,有些镜像在国内⽆法下载,所以我们需要修改配置⽂件中镜像下载地址,要注意红⾊字体为镜像运⾏的参数
##镜像地址启动参数修改
[root@k8s-master01 metrics]# vim metrics-server-deployment.yaml
###mertics-server 修改启动参数镜像地址
......
containers:
- name: metrics-server
image: registry-hangzhou.aliyuncs/google_containers/metrics-server-amd64:v0.3.1
command:
- /metrics-server
- --metric-resolution=30s
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP
......
###metrics-server-nanny 修改镜像地址及启动参数
......
- name: metrics-server-nanny
image: registry-hangzhou.aliyuncs/google_containers/addon-resizer:1.8.4
.....
command:
- /pod_nanny
- --config-dir=/etc/config
- --cpu=100m
- --extra-cpu=0.5m
- --memory=100Mi
-
--extra-memory=50Mi
- --threshold=5
- --deployment=metrics-server-v0.3.1
- --container=metrics-server
- --poll-period=300000
- --estimator=exponential
......
## 在新的版本中,授权⽂内没有 node/stats 的权限,需要⼿动去添加
[root@k8s-master01 metrics]# vim resource-reader.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: system:metrics-server
rules:
- apiGroups:
- ""
resources:
- pods
- nodes
- nodes/stats ## 添加此参数
- namespaces
mertics-server镜像参数解释:
-
-kubelet-insecure-tls:不验证客户端证书
--kubelet-preferred-address-types: metrics-server连节点时默认是连接节点的主机名,但是coredns⾥⾯没有物理机主机名的解析,需要加个参数,让它连接节点的IP
特别注意:
如果不加参数,有可能会报以下错误:
unable to fully collect metrics: [unable to fully scrape metrics from source kubelet_summary:k8s-node02: unable to fetch metrics from Kubelet k8s-node02 (10.10.0.23): request
failed - "401 Unauthorized", response: "Unauthorized", unable to fully scrape metrics from source kubelet_summary:k8s-node01: unable to fetch metrics from Kubelet k8s-
node01 (10.10.0.17): request failed - "401 Unauthorized", response: "Unauthorized"]
3、kube-apiserver配置⽂件修改
⼆进制部署安装,需要⼿动修改apiserver添加开启聚合服务的参数,当然如果你已经添加,那么请跳过这⼀步
## 编辑f 添加如下参数,从下⾯参数中可以看出,需要⽣产新的证书,因此我们还需要为metrics⽣产证书
--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/metrics-proxy.pem
--proxy-client-key-file=/etc/kubernetes/ssl/metrics-proxy-key.pem
参数说明:
--requestheader-XXX、--proxy-client-XXX 是 kube-apiserver 的 aggregator layer 相关的配置参数,metrics-server & HPA 需要使⽤;
--requestheader-client-ca-file:⽤于签名 --proxy-client-cert-file 和 --proxy-client-key-file 指定的证书(ca证书),在启⽤了 metric aggregator 时使⽤;
注:如果 --requestheader-allowed-names 不为空,则--proxy-client-cert-file 证书的 CN 必须位于 allowed-names 中,默认为 aggregator;
如果 kube-apiserver 机器没有运⾏ kube-proxy,则还需要添加 --enable-aggregator-routing=true 参数
特别注意:
kube-apiserver不开启聚合层会报以下类似错误:
I0109 05:55:43.:273] Generated self-signed cert (fig/, fig/certificates/apiserver.key)
Error: cluster doesn't provide requestheader-client-ca-file
4、为metrics server⽣成证书
上⾯可以看到,kube-apiserver开启聚合层,也需要使⽤证书,为了便于区分,我们这⾥为mertics 单独⽣产证书
关于证书的创建也可参考之前部署其它组件时创建证书时候的步骤
## 创建kube-proxy证书请求
[root@k8s-master01 ~]# vim /opt/k8s/certs/metrics-proxy-csr.json
{
"CN": "metrics-proxy",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "ShangHai",
"L": "ShangHai",
"O": "metrics-proxy",
"OU": "System"
}
]
}
## ⽣成kube-proxy证书与私钥
[root@k8s-master01 ~]# cd /opt/k8s/certs/
[root@k8s-master01 certs]# cfssl gencert -ca=/etc/kubernetes/ssl/ca.pem \
-ca-key=/etc/kubernetes/ssl/ca-key.pem \
-config=/opt/k8s/certs/ca-config.json \
-profile=kubernetes metrics-proxy-csr.json | cfssljson -bare metrics-proxy
## 证书分发
[root@k8s-master01 certs]# ansible k8s-master -m copy -a 'src=/opt/k8s/certs/metrics-proxy-key.pem dest=/etc/kubernetes/ssl/'
[root@k8s-master01 certs]# ansible k8s-master -m copy -a 'src=/opt/k8s/certs/metrics-proxy.pem dest=/etc/kubernetes/ssl/'
下载vim命令## 重启kube-apiserver服务
[root@k8s-master01 ~]# ansible k8s-node -m shell -a 'systemctl restart kube-apiserver'
5、kubelet参数修改
主要检查以下两个参数,否则⽆法正常获取节点主机或者pod的资源使⽤情况
删除--read-only-port=0
添加--authentication-token-webhook=true参数
6、根据清单⽂件创建mertics server服务
[root@k8s-master01 metrics]# kubectl apply -f .
##查看mertics-server运⾏情况
[root@k8s-master01 metrics]# kubectl get pods -n kube-system |grep metrics-server
metrics-server-v0.3.1-57654875b4-6nflh 2/2 Running 0 13m
## 验证查看是否可以正常获取资源使⽤详情
[root@k8s-master01 metrics]# kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8s-master01 245m 24% 648Mi 74%
k8s-master02 166m 16% 630Mi 72%
k8s-master03 137m 13% 645Mi 73%
k8s-node01 96m 4% 461Mi 15%
k8s-node02 360m 18% 1075Mi 37%
特别注意:
我是⼆进制部署,所以刚开始并没有在master节点部署kubelet、kube-proxy组件,所以导致⼀直安装失败:
执⾏命令kubectl get ics.k8s.io -o yaml 看到报错信息:"metrics-server error "Client.Timeout exceeded while awaiting headers"",这是因为mertics⽆法与 apiserver服务通信导致,因此需要在master节点安装部署kubelet、kube-proxy组件(可以选择给master节点打污点,来决定是否让master参与pod调度上来),具体结合前⾯⽂章。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论