关注「WeiyiGeek」公众号
设为「特别关注」每天带你玩转网络安全运维、应用开发、物联网IOT学习!
本章目录:Kubernetes中安装metrics-server以获取客户端资源监控指标
原文地址: /2022/
0x01 Kubernetes中安装metrics-server以获取客户端资源监控指标
描述: 通常在集群安装完成后,我们需要对其设置持久卷、网络存储等插件, 除此之外我们还需安装metrics-server以便于获取Node与Pod相关资源消耗等信息,否则你在执行kubectl top
命令时会提示error: Metrics API not available
, 所以本小节将针对Metrics-server的安装进行讲解。
项目地址: /kubernetes-sigs/metrics-server
Q: 什么是metrics-server?
Metrics Server 是 Kubernetes 内置自动缩放管道的可扩展、高效的容器资源指标来源。
Metrics Server 从 Kubelets 收集资源指标,并通过 Metrics API 在 Kubernetes apiserver 中公开它们,供 Horizontal Pod Autoscaler 和 Vertical Pod Autoscaler 使用。
简单的说: Metrics Server 是集群解析监控数据的聚合器,安装后用户可以通过标准的API(/apis/metrics.)来访问监控数据,此处值得注意的是Metrics-Server并非kube-apiserver的一部分,而是通过Aggregator这种插件机制,在独立部署的情况下同kube-apiserver一起统一对外服务的,当进行api请求时kube-aggregator统一接口会分析访问api具体的类型,帮我们负载到具体的api上。
-
GET /apis/metrics./V1beta1
-
|
-
Kube-aggregator
-
| | |
-
Kube-apiserver Metrics-server another-add-onapiserver
Metrics Server 特点:
-
适用于大多数集群的单一部署(请参阅要求)
-
快速自动缩放,每 15 秒收集一次指标。
-
资源效率,集群中每个节点使用 1 mili 的 CPU 核心和 2 MB 的内存。
-
可扩展支持多达 5,000 个节点集群。
Metrics Server 功能:( 水平扩展必备)
-
基于CPU/内存的水平自动缩放
-
自动调整/建议容器所需的资源
Metrics Server 访问流程图
温馨提示: 我们可以通过 kubectl top
命令来访问 Metrics API 获取资源监控相关数据。
温馨提示: 注意 Metrics API 只可以查询当前度量数据,并不保存历史数据。
安装使用
步骤 Server 可以直接从 YAML 清单安装,也可以通过官方 Helm 图表安装。
-
# 下载 YAML 清单
-
wget https:///kubernetes-sigs/metrics-server/releases/latest/download/
-
-
# 提前下载相应的镜像加快部署
-
grep "image:"
-
# image: /metrics-server/metrics-server:v0.6.1
-
-
# 由于其镜像国内无法访问此处我们采用阿里云镜像源
-
sed -i 's#/metrics-server#/google_containers#g'
-
-
# 部署资源清单
-
kubectl apply -f
-
# serviceaccount/metrics-server created
-
......
-
# ./. created
步骤 Server 默认是安装在kube-system名称空间下,我们可以查看其deployment、Pod运行以及SVC情况。
-
# 1.部署清单状态查看
-
kubectl get deploy,pod,svc -n kube-system -l k8s-app=metrics-server
-
# NAME READY UP-TO-DATE AVAILABLE AGE
-
# /metrics-server 1/1 1 0 91s
-
-
# NAME READY STATUS RESTARTS AGE
-
# pod/metrics-server-6ffc8966f5-cf2qh 1/1 Running 0 91s
-
-
# NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
-
# service/metrics-server ClusterIP 10.96.28.153 <none> 443/TCP 91s
-
-
# 2.注册到K8S集群中的 metrics. API 查看
-
kubectl get . | grep "metrics"
-
# . kube-system/metrics-server True 14h
步骤 03.查看各个节点以及Pod的资源指标(CPU/MEM)
-
$ kubectl top node
-
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
-
master-223 102m 2% 1147Mi 61%
-
master-224 119m 2% 2188Mi 57%
-
master-225 139m 3% 3773Mi 48%
-
node-1 54m 1% 921Mi 49%
-
node-2 61m 1% 824Mi 44%
-
-
# 默认名称空间中Pod的资源信息
-
$ kubectl top pod
-
NAME CPU(cores) MEMORY(bytes)
-
hello-nginx-7f4ff84cb-mjw79 0m 6Mi
-
nginx-web-0 0m 6Mi
-
nginx-web-1 0m 5Mi
问题解决:
问题1.部署 metrics-server 资源清单后 Pod 状态为 0/1 并报出annot validate certificate for 10.10.107.223 because it doesn't contain any IP SANs"
错误问题解决。
-
错误信息:
-
$ kubectl describe pod -n kube-system metrics-server-6ffc8966f5-cf2qh
-
# Warning Unhealthy 8s (x17 over 2m27s) kubelet Readiness probe failed: HTTP probe failed with statuscode: 500
-
-
$ kubectl logs -f --tail 50 -n kube-system metrics-server-6ffc8966f5-cf2qh
-
# E0520 11:13:17.379944 1 scraper.go:140] "Failed to scrape node" err="Get \"https://10.10.107.226:10250/metrics/resource\": x509: cannot validate certificate for 10.10.107.226 because it doesn't contain any IP SANs" node="node-1"
-
# E0520 11:13:17.382948 1 scraper.go:140] "Failed to scrape node" err="Get \"https://10.10.107.223:10250/metrics/resource\": x509: cannot validate certificate for 10.10.107.223 because it doesn't contain any IP SANs" node="master-223"
-
问题原因: 由于 metrics-server 未获得TLS Bootstrap 签发证书的导致访问各节点资源时报错。
-
解决办法: 启用 TLS BootStrap 证书签发
-
# 1.分别在 Master 与 Node 节点中启用TLS BootStrap 证书签发,在 kubelet 的 yaml 配置中追加入如下K/V.
-
# 方式1.Kubeadm 搭建的集群
-
$ vim /var/lib/kubelet/
-
...
-
serverTLSBootstrap: true
-
-
# 方式2.二进制搭建的集群(注意此路径根据你的进行配置), 此处我们定义的路径为 /etc/kubernetes/cfg/
-
$ tee -a /etc/kubernetes/cfg/ <<'EOF'
-
serverTLSBootstrap: true
-
EOF
-
-
# 2.最后分别重启各个节点kubelet服务即可
-
systemctl daemon-reload && systemctl restart
-
-
# 3.查看节点的证书签发请求
-
kubectl get csr
-
# NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
-
# csr-2m5d6 2m27s /kubelet-serving system:node:master-223 <none> Pending
-
# csr-ff7vb 19m /kubelet-serving system:node:master-225 <none> Pending
-
# csr-gg8gq 86s /kubelet-serving system:node:master-224 <none> Pending
-
# csr-56k9s 55s /kubelet-serving system:node:node-1 <none> Pending
-
# csr-dmghl 3s /kubelet-serving system:node:node-2 <none> Pending
-
-
# 4.手动允许节点证书签发请求
-
kubectl certificate approve csr-2m5d6
-
kubectl certificate approve csr-56k9s
-
kubectl certificate approve csr-ff7vb
-
kubectl certificate approve csr-gg8gq
-
# ./csr-gg8gq approved
-
-
# 5.查看签发的 certificate 特征
-
kubectl get csr csr-dmghl
-
# NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
-
# csr-dmghl 10m /kubelet-serving system:node:node-2 <none> Approved,Issued
本文至此完毕,更多技术文章,尽情期待下一章节!
原文地址: /2022/
往期相关文章
1.还不会部署高可用的kubernetes集群?看我手把手教你使用二进制部署v1.23.6的K8S集群实践(上)
2.还不会部署高可用的kubernetes集群?看我手把手教你使用二进制部署v1.23.6的K8S集群实践(下)
Jenkins Pipeline 流水线如何根据代仓库的 webhook 自动触发拉取提交的分支代码并构建?
如何在 Kubernetes 中进行 ingress-nginx 配置优化以及HTTP请求速率限制
如何配置Kubernetes仪表板dashboard支持http方式并使用ingress-nginx代理访问实践
在k8s集群中Kubernetes仪表板dashboard使用RABC机制限制指定用户针对指定名称空间中的资源进行管理实践
Let'sEncrypt快速颁发及自动续签泛域名证书实践指南
欢迎各位志同道合的朋友一起学习交流,如文章有误请在下方留下您宝贵的经验知识,个人邮箱地址【master#】
或者个人公众号【WeiyiGeek】
联系我。
更多文章来源于【WeiyiGeek Blog 个人博客 - 为了能到远方,脚下的每一步都不能少 】
个人主页: 【 】
博客地址: 【 】
专栏书写不易,如果您觉得这个专栏还不错的,请给这篇专栏 【点个赞、投个币、收个藏、关个注,转个发,留个言】(人间六大情),这将对我的肯定,谢谢!
。
-
echo "【点个赞】,动动你那粗壮的拇指或者芊芊玉手,亲!"
-
printf("%s", "【投个币】,万水千山总是情,投个硬币行不行,亲!")
-
("【收个藏】,阅后即焚不吃灰,亲!")
-
("【转个发】,让更多的志同道合的朋友一起学习交流,亲!")
-
("【关个注】,后续浏览查看不迷路哟,亲!")
-
cout << "【留个言】,文章写得好不好、有没有错误,一定要留言哟,亲! " << endl;
更多网络安全、系统运维、应用开发、全栈文章,尽在【个人博客 - 】站点,谢谢支持!
帅哥、美女、大佬们点个【赞+在看】吧! ????
↓????↓ 点击【"阅读原文"】,即可获取更多知识!