关注「WeiyiGeek」公众号
设为「特别关注」每天带你玩转网络安全运维、应用开发、物联网IOT学习!
本章目录:Kubernetes中安装metrics-server以获取客户端资源监控指标
原文地址: https://blog.weiyigeek.top/2022/2-27-620.html
0x01 Kubernetes中安装metrics-server以获取客户端资源监控指标
描述: 通常在集群安装完成后,我们需要对其设置持久卷、网络存储等插件, 除此之外我们还需安装metrics-server以便于获取Node与Pod相关资源消耗等信息,否则你在执行kubectl top
命令时会提示error: Metrics API not available
, 所以本小节将针对Metrics-server的安装进行讲解。
项目地址: https://github.com/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.k8s.io)来访问监控数据,此处值得注意的是Metrics-Server并非kube-apiserver的一部分,而是通过Aggregator这种插件机制,在独立部署的情况下同kube-apiserver一起统一对外服务的,当进行api请求时kube-aggregator统一接口会分析访问api具体的类型,帮我们负载到具体的api上。
GET apis/metrics.k8s.io/V1beta1
|
Kube-aggregator
| | |
Kube-apiserver Metrics-server another-add-onapiserver
Metrics Server 特点:
适用于大多数集群的单一部署(请参阅要求)
快速自动缩放,每 15 秒收集一次指标。
资源效率,集群中每个节点使用 1 mili 的 CPU 核心和 2 MB 的内存。
可扩展支持多达 5,000 个节点集群。
Metrics Server 功能:(horizontalpodautoscalers.autoscaling 水平扩展必备)
基于CPU/内存的水平自动缩放
自动调整/建议容器所需的资源
Metrics Server 访问流程图
温馨提示: 我们可以通过 kubectl top
命令来访问 Metrics API 获取资源监控相关数据。
温馨提示: 注意 Metrics API 只可以查询当前度量数据,并不保存历史数据。
安装使用
步骤 01.Metrics Server 可以直接从 YAML 清单安装,也可以通过官方 Helm 图表安装。
# 下载 YAML 清单
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# 提前下载相应的镜像加快部署
grep "image:" components.yaml
# image: k8s.gcr.io/metrics-server/metrics-server:v0.6.1
# 由于其镜像国内无法访问此处我们采用阿里云k8s.gcr.io镜像源
sed -i 's#k8s.gcr.io/metrics-server#registry.cn-hangzhou.aliyuncs.com/google_containers#g' components.yaml
# 部署资源清单
kubectl apply -f components.yaml
# serviceaccount/metrics-server created
......
# apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
步骤 02.Metrics 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
# deployment.apps/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.k8s.io API 查看
kubectl get apiservices.apiregistration.k8s.io | grep "metrics"
# v1beta1.metrics.k8s.io 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/config.yaml
...
serverTLSBootstrap: true
# 方式2.二进制搭建的集群(注意此路径根据你的kubelet.service进行配置), 此处我们定义的路径为 etc/kubernetes/cfg/kubelet-config.yaml
$ tee -a etc/kubernetes/cfg/kubelet-config.yaml <<'EOF'
serverTLSBootstrap: true
EOF
# 2.最后分别重启各个节点kubelet服务即可
systemctl daemon-reload && systemctl restart kubelet.service
# 3.查看节点的证书签发请求
kubectl get csr
# NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
# csr-2m5d6 2m27s kubernetes.io/kubelet-serving system:node:master-223 <none> Pending
# csr-ff7vb 19m kubernetes.io/kubelet-serving system:node:master-225 <none> Pending
# csr-gg8gq 86s kubernetes.io/kubelet-serving system:node:master-224 <none> Pending
# csr-56k9s 55s kubernetes.io/kubelet-serving system:node:node-1 <none> Pending
# csr-dmghl 3s kubernetes.io/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
# certificatesigningrequest.certificates.k8s.io/csr-gg8gq approved
# 5.查看签发的 certificate 特征
kubectl get csr csr-dmghl
# NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
# csr-dmghl 10m kubernetes.io/kubelet-serving system:node:node-2 <none> Approved,Issued
本文至此完毕,更多技术文章,尽情期待下一章节!
原文地址: https://blog.weiyigeek.top/2022/2-27-620.html
往期相关文章
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.top】
或者个人公众号【WeiyiGeek】
联系我。
更多文章来源于【WeiyiGeek Blog 个人博客 - 为了能到远方,脚下的每一步都不能少 】
个人主页: 【 https://weiyigeek.top】
博客地址: 【 https://blog.weiyigeek.top 】
专栏书写不易,如果您觉得这个专栏还不错的,请给这篇专栏 【点个赞、投个币、收个藏、关个注,转个发,留个言】(人间六大情),这将对我的肯定,谢谢!
。
echo "【点个赞】,动动你那粗壮的拇指或者芊芊玉手,亲!"
printf("%s", "【投个币】,万水千山总是情,投个硬币行不行,亲!")
fmt.Printf("【收个藏】,阅后即焚不吃灰,亲!")
console.info("【转个发】,让更多的志同道合的朋友一起学习交流,亲!")
System.out.println("【关个注】,后续浏览查看不迷路哟,亲!")
cout << "【留个言】,文章写得好不好、有没有错误,一定要留言哟,亲! " << endl;
更多网络安全、系统运维、应用开发、全栈文章,尽在【个人博客 - https://blog.weiyigeek.top】站点,谢谢支持!
帅哥、美女、大佬们点个【赞+在看】吧! 👇
↓👇↓ 点击【"阅读原文"】,即可获取更多知识!