在查看kubernetes的测试环境中,使用top命令查看Pod的CPU、内存使用过程中,遇到以下问题:

$ kubectl top po
W0818 03:22:46.090578   26207 top_pod.go:140] Using json format to get metrics.e-protocol-buffers flag
error: Metrics API not available

如上看到ERROR信息“Metrics API not available”,这是由于该Kuernetes环境没有安装metric-server组件导致的。

安装metric-server组件可以参考Github上的安装参考资料:https://github.com/kubernetes-sigs/metrics-server,如下所示:

$ kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created

在正常可以科学上网的情况下,可以拉取到镜像“k8s.gcr.io/metrics-server/metrics-server:v0.5.0”,即可安装完成。

若是不具备科学上网的条件,可以参考《史上最全操作教程——利用阿里云FREE镜像仓库构建国外DOCKER镜像》这篇文章操作。

上述apply之后,查看该metric-server运行Pod,

$ kubectl get pods --all-namespaces | grep metrics
NAMESPACE     NAME                                READY   STATUS      RESTARTS   AGE
kube-system   metrics-server-6dfddc5fb8-f54vr     0/1     Running     0          44s

该metric-server Pod尚未准备运行完成,describe查看其详细信息:

……
Events:Type     Reason     Age               From               Message----     ------     ----              ----               -------Normal   Scheduled  79s               default-scheduler  Successfully assigned kube-system/metrics-server-6dfddc5fb8-f54vr to lokiNormal   Pulled     78s               kubelet            Container image "k8s.gcr.io/metrics-server/metrics-server:v0.5.0" already present on machineNormal   Created    78s               kubelet            Created container metrics-serverNormal   Started    78s               kubelet            Started container metrics-serverWarning  Unhealthy  9s (x5 over 49s)  kubelet            Readiness probe failed: HTTP probe failed with statuscode: 500

可以看到在描述中的事件信息中,“Readiness probe failed: HTTP probe failed with statuscode: 500”。

然后查看该Pod的日志:

$ kubectl logs -n kube-system metrics-server-6dfddc5fb8-f54vr
……
I0816 01:07:06.734107       1 server.go:188] "Failed probe" probe="metric-storage-ready" err="not metrics to serve"
I0816 01:07:16.736864       1 server.go:188] "Failed probe" probe="metric-storage-ready" err="not metrics to serve"
E0816 01:07:18.834625       1 scraper.go:139] "Failed to scrape node" err="Get \"https://192.168.130.100:10250/stats/summary?only_cpu_and_memory=true\": x509: cannot validate certificate for 192.168.130.100 because it doesn't contain any IP SANs" node="loki"

如上可以看到Readiness Probe探针检测到Metris Server容器启动后对httpGet探针存活没反应,具体原因是“cannot validate certificate for 192.168.130.100 because it doesn't contain any IP SANs”。

查看Metris Server的deployment文件的Readiness Probe探针描述:

​​​​​​​

……
readinessProbe:failureThreshold: 3httpGet:path: /readyzport: httpsscheme: HTTPSinitialDelaySeconds: 20
periodSeconds: 10
……

如上可知,该Readiness Probe探针判断容器是否可用(Ready状态),通过配置HTTPGetAction方式,kubelet定时发送HTTP请求到https://readyz来进行容器是否Ready的检查。

  1. “InitialDealySeconds:20”:启动容器后进行首次检查的等待时间为20s;
  2. “periodSeconds:10”:间隔10s进行一次探测。

针对“cannot validate certificate for 192.168.130.100 because it doesn't contain any IP SANs”这个报错,可以仔细查阅Github上的安装参考资料:https://github.com/kubernetes-sigs/metrics-server。其中有提到:

1)安装要求,如下红框中说明,Kubelet证书需要由群集证书颁发机构签名(或可以禁用证书验证,通过对Metrics Server配置参数--Kubelet-insecure-tls不安全)

2)配置,如下红框中说明,添加了“--Kubelet-insecure-tls”这个配置,就不会去验证Kubelets提供的服务证书的CA。但是仅用于测试。

本次Kubernetes环境仅作为本机测试使用,可以修改之前的apply的components.yaml文件,添加“--Kubelet-insecure-tls”参数,如下所示(具体内容跟前后都已经省略):

……
template:metadata:labels:k8s-app: metrics-serverspec:containers:- args:- --cert-dir=/tmp- --secure-port=443- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname- --kubelet-use-node-status-port- --metric-resolution=15s- --kubelet-insecure-tlsimage: k8s.gcr.io/metrics-server/metrics-server:v0.5.0imagePullPolicy: IfNotPresent
……

然后重新apply该components.yaml文件,以及查看Pod,详细信息:

$ kubectl apply -f components.yaml
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created$ kubectl get pods --all-namespaces | grep metrics
NAMESPACE    NAME                              READY   STATUS      RESTARTS    AGE
kube-system  metrics-server-6dfddc5fb8-f54vr   1/1     Running      0          44s$ kubectl describe pod/metrics-server-5cd859f5c-nr7h5 -n kube-system
……
Events:Type    Reason     Age   From               Message----    ------     ----  ----               -------Normal  Scheduled  41s   default-scheduler  Successfully assigned kube-system/metrics-server-5cd859f5c-nr7h5 to lokiNormal  Pulled     40s   kubelet            Container image "k8s.gcr.io/metrics-server/metrics-server:v0.5.0" already present on machineNormal  Created    40s   kubelet            Created container metrics-serverNormal  Started    40s   kubelet            Started container metrics-server

如上查看到的信息都正常。

验证top命名:

$ kubectl top po
W0815 21:13:43.801129   47845 top_pod.go:140] Using json format to get metrics. Next release will switch to protocol-buffers, switch early by passing --use-protocol-buffers flag
NAME                         CPU(cores)   MEMORY(bytes)
cpu-loader-5c8d96447-49rzf       0m           5Mi
cpu-loader-5c8d96447-4ptbt       0m           3Mi
cpu-loader-5c8d96447-f4nsc       0m           3Mi

验证完无误。

Metrics Server安装以及报错解决相关推荐

  1. 遇到Redis server went away报错解决

    遇到Redis server went away报错解决 这个问题网上有很多思路,现在记录一下我碰到的 **环境:Windows(TP5)+Centos 7服务器(redis)**首先,在config ...

  2. mac上安装webpack报错解决方法Hit error EACCES: permission denied, mkdir ‘/usr/local/lib/node_modules/webpack

    mac上安装webpack报错解决方法Hit error EACCES: permission denied, mkdir '/usr/local/lib/node_modules/webpack 参 ...

  3. Jenkins安装插件报错解决方法

    Jenkins安装插件报错解决方法 1.报错场景 2.场景分析 3.问题解决(不一定能全解决,看运气) 1.报错场景 按正常方式安装完Jenkins后安装插件会报错如下: // An highligh ...

  4. npm 安装依赖报错解决方法总结

    npm 安装依赖报错解决方法总结 参考文章: (1)npm 安装依赖报错解决方法总结 (2)https://www.cnblogs.com/ysxq/p/11658571.html (3)https: ...

  5. 深度学习部署:Windows安装pycocotools报错解决方法

    深度学习部署:Windows安装pycocotools报错解决方法 1.pycocotools库的简介 2.pycocotools安装的坑 3.解决办法 更多Ai资讯:公主号AiCharm 本系列是作 ...

  6. pycharm安装pandas报错解决办法

    pycharm安装pandas报错解决办法 当使用pycharm自动安装pandas时,提示安装失败并要求在命令提示符界面进行安装.在使用命令提示符安装成功之后,发现pycharm仍然无法安装pand ...

  7. 安装onnxruntime报错解决

    安装onnxruntime报错解决 对于onnxruntime出现以下错误 ERROR: Could not find a version that satisfies the requirement ...

  8. 解决虚拟机安装系统报错解决方法

    解决虚拟机安装系统报错解决方法 虚拟机安装系统报错提示: 错误原因:当你打开虚拟机安装系统时,它需要调用CPU虚拟化功能,因为他要把所有底层硬件虚拟给(VMwere 虚拟机),所以要开启虚拟化功能.虚 ...

  9. Redis server went away报错解决

    redis:Redis server went away报错解决 1.查看redis.conf 绑定ip是否为0.0.0.0默认是127.0.0.1 如果127.0.0.1 redis-cli 连接时 ...

最新文章

  1. 教你如何在 AlertManager 报警通知中展示监控图表
  2. 独家 | 为什么在CV(视觉识别)领域,Transformers正在缓慢逐步替代CNN?
  3. Laravel 5.5 的错误异常处理机制以及应用实例
  4. java常用注解及功能_SpringBoot 中常用注解及各种注解作用
  5. JDBC:java.sql.SQLException: Before start of result set怎么办
  6. php++mpdf.mpdf,使用php第三方包mpdf将网页装换成pdf文件【2】
  7. win10设置默认输入法_为什么说win10越来越好用了?(技巧篇)
  8. Android在使用WebView时,通过Javascript调用JAVA函数
  9. 搭建分布式hadoop2.x集群
  10. php mysql 排序规则_使用PHP的MySQL最好的排序规则是什么?
  11. C++ Socket 编程
  12. php获取多选框的值
  13. 第六讲 复数和复指数
  14. 【信息系统项目管理师】第十七章 项目管理高级知识
  15. Stable Diffusion采样速度翻倍!仅需10到25步的扩散模型采样算法
  16. 可视化利器Tensorboard
  17. 分享:用Python语言轻松实现二代身份证阅读器(读卡器)自动读卡,支持定制开发
  18. 2022年云南最新建筑八大员(市政)模拟考试题库及答案
  19. 一个半径为R的球沉入水中,球面顶部正好与水面相切,球的密度为1,求将球从水中取出所做的功
  20. 半导体设备基本通信标准介绍系列之-开篇

热门文章

  1. 【Quartz】定时任务
  2. 互联网药库试水:北京今年展开互联网虚拟药库
  3. 【新书推荐】【2018.03】基于超材料表面等离子体的传输线与天线设计
  4. 水箱自洁式消毒器定时器调整步骤
  5. 吐血整理:常用的大数据采集工具,你不可不知
  6. AutoCAD Architecture 2021中文版
  7. 国行new moto x升级android6,摩托罗拉Android6.0升级计划:全都在
  8. Python爬虫小实践:寻找失踪人口,爬取失踪儿童信息并写成csv文件,方便存入数据库
  9. Visual SLAM:What are the Current Trends and What to Expect?
  10. LibUsbDotNet使用方法