当前位置: 首页 > news >正文

K8S--安装metrics-server,解决error: Metrics API not available问题

原文网址:K8S--安装metrics-server,解决error: Metrics API not available问题-CSDN博客

简介

本文介绍K8S通过安装metrics-server来解决error: Metrics API not available问题的方法。

Metrics Server采用了Kubernetes Metrics API的标准,它使用HTTP接口来暴露度量指标数据,通过轮询来收集这些数据,然后将其存储在内存中。

通过Kubernetes Metrics API,可以获取各种度量指标数据,如CPU利用率、内存使用率、网络I/O、磁盘I/O等。

问题描述

用HPA进行动态伸缩时,发现负载的TARGETS一直是unknown。

原因分析

HPA的资源占用是通过metrics-server实现的,可能是没安装metrics-server。检查一下:

kubectl get pod -A | grep metrics-server

 如下图所示:(果然是没有安装metrics-server)

再用top命令查看一下:

kubectl top pod

如下图所示(也是说缺少metrics) 

 

解决方案

安装metrics-server。

官网文档:资源指标管道 | Kubernetes

官网github:https://github.com/kubernetes-sigs/metrics-server#installation 

1.下载yaml文件

官方提供两种类型的Metrics Server安装:

1.单副本Metrics Server
2.多副本高可用Metrics Server(需要至少两个node)

本文介绍单副本安装方式。

从官网github上下载:https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

下载后的内容如下(components.yaml文件) :

apiVersion: v1
kind: ServiceAccount
metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:labels:k8s-app: metrics-serverrbac.authorization.k8s.io/aggregate-to-admin: "true"rbac.authorization.k8s.io/aggregate-to-edit: "true"rbac.authorization.k8s.io/aggregate-to-view: "true"name: system:aggregated-metrics-reader
rules:
- apiGroups:- metrics.k8s.ioresources:- pods- nodesverbs:- get- list- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:labels:k8s-app: metrics-servername: system:metrics-server
rules:
- apiGroups:- ""resources:- nodes/metricsverbs:- get
- apiGroups:- ""resources:- pods- nodesverbs:- get- list- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:labels:k8s-app: metrics-servername: metrics-server-auth-readernamespace: kube-system
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: extension-apiserver-authentication-reader
subjects:
- kind: ServiceAccountname: metrics-servernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:labels:k8s-app: metrics-servername: metrics-server:system:auth-delegator
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: system:auth-delegator
subjects:
- kind: ServiceAccountname: metrics-servernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:labels:k8s-app: metrics-servername: system:metrics-server
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: system:metrics-server
subjects:
- kind: ServiceAccountname: metrics-servernamespace: kube-system
---
apiVersion: v1
kind: Service
metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system
spec:ports:- name: httpsport: 443protocol: TCPtargetPort: httpsselector:k8s-app: metrics-server
---
apiVersion: apps/v1
kind: Deployment
metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system
spec:selector:matchLabels:k8s-app: metrics-serverstrategy:rollingUpdate:maxUnavailable: 0template:metadata:labels:k8s-app: metrics-serverspec:containers:- args:- --cert-dir=/tmp- --secure-port=4443- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname- --kubelet-use-node-status-port- --metric-resolution=15simage: registry.k8s.io/metrics-server/metrics-server:v0.6.4imagePullPolicy: IfNotPresentlivenessProbe:failureThreshold: 3httpGet:path: /livezport: httpsscheme: HTTPSperiodSeconds: 10name: metrics-serverports:- containerPort: 4443name: httpsprotocol: TCPreadinessProbe:failureThreshold: 3httpGet:path: /readyzport: httpsscheme: HTTPSinitialDelaySeconds: 20periodSeconds: 10resources:requests:cpu: 100mmemory: 200MisecurityContext:allowPrivilegeEscalation: falsereadOnlyRootFilesystem: truerunAsNonRoot: truerunAsUser: 1000volumeMounts:- mountPath: /tmpname: tmp-dirnodeSelector:kubernetes.io/os: linuxpriorityClassName: system-cluster-criticalserviceAccountName: metrics-servervolumes:- emptyDir: {}name: tmp-dir
---
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:labels:k8s-app: metrics-servername: v1beta1.metrics.k8s.io
spec:group: metrics.k8s.iogroupPriorityMinimum: 100insecureSkipTLSVerify: trueservice:name: metrics-servernamespace: kube-systemversion: v1beta1versionPriority: 100

2.修改yaml文件

修改点如下(左侧是原来的配置,右侧是修改后的配置):

修改了两个地方都是在Deployment.spec.template.containers路径下:

  1. args增加参数:- --kubelet-insecure-tls   #表示不验证客户端证书
  2. image改为阿里镜像:registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.4

修改后的components.yaml文件如下:

apiVersion: v1
kind: ServiceAccount
metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:labels:k8s-app: metrics-serverrbac.authorization.k8s.io/aggregate-to-admin: "true"rbac.authorization.k8s.io/aggregate-to-edit: "true"rbac.authorization.k8s.io/aggregate-to-view: "true"name: system:aggregated-metrics-reader
rules:
- apiGroups:- metrics.k8s.ioresources:- pods- nodesverbs:- get- list- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:labels:k8s-app: metrics-servername: system:metrics-server
rules:
- apiGroups:- ""resources:- nodes/metricsverbs:- get
- apiGroups:- ""resources:- pods- nodesverbs:- get- list- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:labels:k8s-app: metrics-servername: metrics-server-auth-readernamespace: kube-system
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: extension-apiserver-authentication-reader
subjects:
- kind: ServiceAccountname: metrics-servernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:labels:k8s-app: metrics-servername: metrics-server:system:auth-delegator
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: system:auth-delegator
subjects:
- kind: ServiceAccountname: metrics-servernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:labels:k8s-app: metrics-servername: system:metrics-server
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: system:metrics-server
subjects:
- kind: ServiceAccountname: metrics-servernamespace: kube-system
---
apiVersion: v1
kind: Service
metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system
spec:ports:- name: httpsport: 443protocol: TCPtargetPort: httpsselector:k8s-app: metrics-server
---
apiVersion: apps/v1
kind: Deployment
metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system
spec:selector:matchLabels:k8s-app: metrics-serverstrategy:rollingUpdate:maxUnavailable: 0template:metadata:labels:k8s-app: metrics-serverspec:containers:- args:- --cert-dir=/tmp- --secure-port=4443- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname- --kubelet-use-node-status-port- --metric-resolution=15s- --kubelet-insecure-tls   #表示不验证客户端证书image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.4  #使用阿里镜像imagePullPolicy: IfNotPresentlivenessProbe:failureThreshold: 3httpGet:path: /livezport: httpsscheme: HTTPSperiodSeconds: 10name: metrics-serverports:- containerPort: 4443name: httpsprotocol: TCPreadinessProbe:failureThreshold: 3httpGet:path: /readyzport: httpsscheme: HTTPSinitialDelaySeconds: 20periodSeconds: 10resources:requests:cpu: 100mmemory: 200MisecurityContext:allowPrivilegeEscalation: falsereadOnlyRootFilesystem: truerunAsNonRoot: truerunAsUser: 1000volumeMounts:- mountPath: /tmpname: tmp-dirnodeSelector:kubernetes.io/os: linuxpriorityClassName: system-cluster-criticalserviceAccountName: metrics-servervolumes:- emptyDir: {}name: tmp-dir
---
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:labels:k8s-app: metrics-servername: v1beta1.metrics.k8s.io
spec:group: metrics.k8s.iogroupPriorityMinimum: 100insecureSkipTLSVerify: trueservice:name: metrics-servernamespace: kube-systemversion: v1beta1versionPriority: 100

3.部署metrics-server

kubectl apply -f components.yaml

4.查看结果

1.查看dashboard

可以看到:metrics-server成功运行,而且CPU和内存使用率都有数据了!

2.用命令查看metrics-server的Pod

kubectl get pod -A | grep metrics-server

可以看到:成功运行

3.查看top结果

kubectl top pod

可以看到:有数据了

http://www.lryc.cn/news/286630.html

相关文章:

  • flume自定义拦截器
  • 安卓Spinner文字看不清
  • 深入浅出hdfs-hadoop基本介绍
  • 宝塔面板部署MySQL并结合内网穿透实现公网远程访问本地数据库
  • 数据结构<1>——树状数组
  • Servlet生命周期
  • npm i 报一堆版本问题
  • Linux设备管理模型-01:基础数据结构
  • opencv#32 可分离滤波
  • android 导航app 稳定性问题总结
  • 第11次修改了可删除可持久保存的前端html备忘录:将样式分离,可以自由秒添加秒删除样式
  • hcip高级网络知识
  • 常用电子器件学习——MOS管
  • System.Data.SqlClient.SqlException:“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误
  • 数据库(SQL语句:DMLDQL)
  • AnimatedDrawings:让绘图动起来
  • 红黑树浅浅学习
  • QGraphicsView 如何让图形大小适配窗口
  • sqlmap使用教程(3)-探测注入漏洞
  • 期待已久!阿里云容器服务 ACK AI 助手正式上线
  • [BUG] Authentication Error
  • 23种设计模式概述
  • 英文阅读-LinkedIn‘s Tips for Highly Effective Code Review
  • 性能优化-高通的Hexagon DSP和NPU
  • 第137期 Oracle的数据生命周期管理(20240123)
  • 电脑的GPU太强了,pytorch版本跟不上,将cuda驱动进行降级
  • 1 认识微服务
  • PHP+SOCKET 服务端多进程处理多客户端请求 demo
  • Matplotlib笔记:安装Matplotlib+常用绘图
  • Confluence6+mysql5.7安装避坑详细记录