如何在Kubernetes中安装metrics-server以获取Node节点、Pod容器资源监控指标?

2023-10-31

关注「WeiyiGeek」公众号

设为「特别关注」每天带你玩转网络安全运维、应用开发、物联网IOT学习!

1fc620d06f287e934c507efe4a7b0dad.png


本章目录: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 访问流程图

d1b77116913af977b7f82773996d71a2.png

温馨提示: 我们可以通过 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


771c5816273541e35fa3260f763029ef.png 往期相关文章dc6cfb7e021c894cdf5fbfdb1fc322da.png

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快速颁发及自动续签泛域名证书实践指南

7ae013f115acf032fbb1a82edff46b09.png


欢迎各位志同道合的朋友一起学习交流,如文章有误请在下方留下您宝贵的经验知识,个人邮箱地址【master#weiyigeek.top】或者个人公众号【WeiyiGeek】联系我。

更多文章来源于【WeiyiGeek Blog 个人博客 - 为了能到远方,脚下的每一步都不能少 】

个人主页: 【 https://weiyigeek.top】

博客地址: 【 https://blog.weiyigeek.top 】

d4ecd29657142b38e583f51fd0cad221.png


专栏书写不易,如果您觉得这个专栏还不错的,请给这篇专栏 【点个赞、投个币、收个藏、关个注,转个发,留个言】(人间六大情),这将对我的肯定,谢谢!

  • echo  "【点个赞】,动动你那粗壮的拇指或者芊芊玉手,亲!"

  • printf("%s", "【投个币】,万水千山总是情,投个硬币行不行,亲!")

  • fmt.Printf("【收个藏】,阅后即焚不吃灰,亲!")  

  • console.info("【转个发】,让更多的志同道合的朋友一起学习交流,亲!")

  • System.out.println("【关个注】,后续浏览查看不迷路哟,亲!")

  • cout << "【留个言】,文章写得好不好、有没有错误,一定要留言哟,亲! " << endl;

06aa2d879a423531612fea68b9eae38b.gif

更多网络安全、系统运维、应用开发、全栈文章,尽在【个人博客 - https://blog.weiyigeek.top】站点,谢谢支持!

    帅哥、美女、大佬们点个【赞+在看】吧! 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Kubernetes中安装metrics-server以获取Node节点、Pod容器资源监控指标? 的相关文章

随机推荐

  • SpringBoot 二维码生成

    来源 https www cnblogs com songweipeng p 16623793 html 一 基于Google开发工具包ZXing生成二维码
  • 算法与数据结构之带头结点的单链表

    单链表优缺点 链表是非随机存取的存储结构 和顺序表相比 链表存储结构在实现插入 删除的操作时 不需要移动大量数据元素 但不容易实现随机存取线性表的第 i 个数据元素的操作 所以 链表适用于经常需要进行插入和删除操作的线性表 如飞机航班的乘客
  • 【机器学习 - 5】:多元线性回归

    文章目录 多元线性回归 多元线性回归公式推导 举例 波士顿房价 取特征值RM为例 取所有特证为例 多元线性回归 多元线性回归方程 特征值为两个或两个以上 以下是多元线性回归的模型 我们需要求出theta 使得真实值和预测值的差值最小 多元线
  • 前端系列19集-vue3引入高德地图,响应式,自适应

    npm i amap amap jsapi loader save import AMapLoader from amap amap jsapi loader 使用加载器加载JSAPI 可以避免异步加载 重复加载等常见错误加载错误 为地图注
  • 四种推荐系统原理介绍(基于内容过滤/协同过滤/关联规则/序列模式)

    在推荐系统中常用的技术可大致分为四类 基于内容的过滤 协同过滤 基于规则的方法和混合方法 一 基于内容过滤 基于内容过滤推荐系统思路如下 1 通过在抓取每个商品的一系列特征来构建商品档案 2 通过用户购买的商品特征来构建基于内容的用户档案
  • Jmeter怎么添加token?

    不需要token的场景 随便进入一个购物app 都是可以看里面的商品的 这时不需要token 但是当你要买它的时候就需要你登录自己的账号 登录状态需要token 什么时候需要用到token 比如 京东商城里面 我需要查看我的消息列表 这时候
  • Jenkins自动化构建网站与流水线构建Maven项目实战

    1 gitlab Jenkins自动化构建网站实战 基本架构 通过gitlab jenkins构建一个常规网站的原理图 Jenkins插件和环境配置 配置全局变量 要配置的全局变量有Git JDK和Maven 指定JDK的路径 设置Git可
  • vue2.0 vue3.0 input组件封装

    vue2
  • tar -xf node-v12.16.1-linux-armv7l.tar.xz 错误

    1 tar解压tar xz能会出错 因为你的系统里没有对应的解压工具 你安装上xz和tar对应工具包就行 apt get install xz utils 2 chmod无法访问 没有那个文件或目录 方案之一 修改 etc selinux
  • UEFI模式安装下Ubuntu 18.04 系统分区参考(win10+Ubuntu双系统)

    由于这几天给自己的电脑成功装了双系统 所以在此记录下当时在装Ubuntu系统中最难懂的部分 系统分区 以供大家以及自己今后参考 具体安装步骤我就不一一细说了 可以参考其他博主的文章 小米笔记本安装Win10 Ubuntu16 04 LTS
  • 金山卫士开源软件之旅(二) 简单教程:如何创建一个基于金山卫士界面库的工程

    完整解决方案代码压缩包 test full zip 267 59 KB 参考 http bbs code ijinshan com thread 1391 1 1 html 为了让更多的朋友能够让自己的程序使用上金山卫士的界面库 现将创建界
  • oracle case when的使用方法

    大家都知道Case when的用法 一旦满足了某一个WHEN 则这一条数据就会退出CASE WHEN 而不再考虑其他CASE 文章来详细的介绍了case when的用法并举例说明了 Case when 的用法 简单Case函数 简单CASE
  • C++ 接口(抽象类)

    C 接口是使用抽象类来实现的 接口描述了类的行为和功能 而不需要完成类的特定实现 且抽象类与数据抽象互不混淆 如果类中至少有一个函数被声明为纯虚函数 则这个类就是抽象类 数据抽象则是一个把实现细节与相关的接口分离开的概念 如果类中至少有一个
  • Ubuntu18.04安装ROS教程bug解决办法

    Ubuntu18 04安装ROS教程bug解决办法 写在前面 一 配置源文件bug 二 rosdep update 报错 三 安装ROS中出现bash opt ros melodic setup bash 没有那个文件或目录或者bash o
  • linux设置时间为24小时制,设置时区

    1 查看系统时间 root localhost localdomain date Thu Feb 4 14 24 18 CST 2010 时区是CST 为了彻底弄明白GMT UTC CST 我查阅了下网上的相关教程 进行整理 一般来说 UT
  • Android 应用内部存储之应用文件缓存

    前言 Android 应用内部存储之应用文件缓存的重点在最后总结 如果想快速学习 直接查看最后总结 在向手机上保存数据 一般是把数据保存在sdcard中的 大部分应用是直接在sdcard的根目录下创建一个文件夹 然后把数据保存在该文件夹中
  • 一个TCP长连接设备管理后台工程(四)---jtt808协议解析

    协议解析 从前面内容我们可以发现 808协议是一个很典型的协议格式 固定字段 变长字段 其中固定字段用来检测一个帧格式的完整性和有效性 所以一般会包含一下内容 帧头 变长字段对应的长度 校验 由于这一段的数据格式固定 目的单一 所以处理起来
  • vue/react/node项目通过eslint检查语法规范

    首先 我们打开终端 全局安装依赖 npm install g eslint 然后 以管理员身份运行项目终端 输入 eslint init 然后 这里 在初始化时会问我们想如何使用它 分别对应 仅检查语法 检查语法并发现问题 检查语法 发现问
  • 面试官:为啥索引可以让查询变快?

    您好 我是路人 更多优质文章见个人博客 http itsoku com 概述 人类存储信息的发展历程大致经历如下 由于是个人凭着自己理解总结的 因此可能不一定精确 但是毋庸置疑的是 在当代 各大公司机构部门的数据都是维护在数据库当中的 数据
  • 如何在Kubernetes中安装metrics-server以获取Node节点、Pod容器资源监控指标?

    关注 WeiyiGeek 公众号 设为 特别关注 每天带你玩转网络安全运维 应用开发 物联网IOT学习 本章目录 Kubernetes中安装metrics server以获取客户端资源监控指标 原文地址 https blog weiyige
Powered by Hwhale