k8s资源监控metrics-server

简述:

在k8s早期版本中,对资源的监控使用的是heapster的资源监控工具。

但是从 Kubernetes 1.8 开始,Kubernetes 通过 Metrics API 获取资源使用指标,例如容器 CPU 和内存使用情况。

这些度量指标可以由用户直接访问,例如通过使用kubectl top 命令,或者使用集群中的控制器。

Metrics API: 通过 Metrics API,您可以获得 node 或 pod 当前的资源使用情况(但是不存储)。

metres-server比 heapster 优势在于: 访问不需要 apiserver 的代理机制,提供认证和授权等; 很多集群内组件依赖它(HPA,scheduler,kubectl top),因此它应该在集群中默认运行;

重点说明一下:

metres-server在GitHub项目地址有两个用的比较多的:

  官方稳定版的:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/metrics-server

  这个不知道是不是官方的,不过使用者也很多:https://github.com/kubernetes-incubator/metrics-server/tree/master/deploy

  首先说一下,其实两种方式的我都部署过,但是官方的最新版的metrics-server:v0.3.3和addon-resizer:1.8.5这两个组件,在默认使用资源清单部署时,试了无数次,镜像下载下来了,但死活Running不起来。

  找了好多文档,看了好多博客,就是起不来,可能是技术还没有到位。为了避免踩坑,这里建议使用早点的release-1.11版本,在:

  https://github.com/kubernetes/kubernetes/tree/release-1.11/cluster/addons/metrics-server这个版本中修改一下资源清单就可以Running起来

  第二个kubernetes-incubator没什么太大问题。

一、使用官方资源清单部署:(release-1.11版)

  1.下载资源清单:

   使用for循环快速下载资源清单:

1 for file in auth-delegator.yaml auth-reader.yaml metrics-apiservice.yaml metrics-server-deployment.yaml metrics-server-service.yaml resource-reader.yaml ;do wget https://raw.githubusercontent.com/kubernetes/kubernetes/release-1.11/cluster/addons/metrics-server/$file;done

   2.修改资源清单参数:这里使用的镜像为metrics-server:v0.2.1和addon-resizer:1.8.3

 1 vim metrics-server-deployment.yaml
 2 ......
 3       containers:
 4       - name: metrics-server
 5         image: gcr.azk8s.cn/google_containers/metrics-server-amd64:v0.2.1   #修改镜像仓库地址
 6         command:
 7         - /metrics-server
 8 #        - --source=kubernetes.summary_api:‘‘  #注释这行
 9         - --source=kubernetes.summary_api:https://kubernetes.default?kubeletHttps=true&kubeletPort=10250&insecure=true   #添加这行表示不验证客户端证书
10         ports:
11         - containerPort: 443
12           name: https
13 ......
 1 vim resource-reader.yaml
 2 ......
 3 rules:
 4 - apiGroups:
 5   - ""
 6   resources:
 7   - pods
 8   - nodes
 9   - nodes/stats   #添加这行,否则无法获取其他节点数据。
10   - namespaces
11 ......

  3.部署资源清单:

  切换到下载好资源清单的目录下

1 kubectl apply -f ./

  4.验证:

    查看集群中是否构建metrics-server的API

1 kubectl api-versions
2 ......
3 metrics.k8s.io/v1beta1
4 ......

   查看metrics-server的pod是否Running

1 kubectl get pods -n kube-system
2 ......
3 NAME                                     READY   STATUS    RESTARTS   AGE
4 metrics-server-v0.2.1-55c4957fd4-9z65b   2/2     Running   0          8h

     查看kubectl top 命令是否可用:

 1 [[email protected] ~]# kubectl top pods
 2 NAME                           CPU(cores)   MEMORY(bytes)
 3 myapp-deploy-9dc49d6f8-56s7k   0m           2Mi
 4 myapp-deploy-9dc49d6f8-gsw8c   0m           3Mi
 5 myapp-deploy-9dc49d6f8-z6mxv   0m           3Mi
 6 [[email protected] ~]# kubectl top nodes
 7 NAME         CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
 8 k8s-master   290m         3%     1027Mi          59%
 9 k8s-node1    46m          4%     463Mi           52%
10 k8s-node2    47m          4%     459Mi           52%

  5.疑问:

  即使pod可以Running起来,即使有metrics-server的API,即使可以使用kubectl top命令,但是addon-resizer:1.8.3容器中的日志依然有报错:

1 [[email protected] ~]# kubectl logs kube-state-metrics-8578649b5-gj29z -n kube-system -c addon-resizer
2 ERROR: logging before flag.Parse: I0605 10:34:09.624889       1 pod_nanny.go:65] Invoked by [/pod_nanny --container=kube-state-metrics --cpu=100m --extra-cpu=1m --memory=100Mi --extra-memory=2Mi --threshold=5 --deployment=kube-state-metrics]
3 ERROR: logging before flag.Parse: I0605 10:34:09.624969       1 pod_nanny.go:81] Watching namespace: kube-system, pod: kube-state-metrics-8578649b5-gj29z, container: kube-state-metrics.
4 ERROR: logging before flag.Parse: I0605 10:34:09.624972       1 pod_nanny.go:82] storage: MISSING, extra_storage: 0Gi
5 ERROR: logging before flag.Parse: I0605 10:34:09.625799       1 pod_nanny.go:171] Failed to read data from config file "MISSING/NannyConfiguration": open MISSING/NannyConfiguration: no such file or directory, using default parameters
6 ERROR: logging before flag.Parse: I0605 10:34:09.625829       1 pod_nanny.go:109] cpu: 100m, extra_cpu: 1m, memory: 100Mi, extra_memory: 2Mi
7 ERROR: logging before flag.Parse: I0605 10:34:09.625838       1 pod_nanny.go:138] Resources: [{Base:{i:{value:100 scale:-3} d:{Dec:<nil>} s:100m Format:DecimalSI} ExtraPerNode:{i:{value:1 scale:-3} d:{Dec:<nil>} s:1m Format:DecimalSI} Name:cpu} {Base:{i:{value:104857600 scale:0} d:{Dec:<nil>} s:100Mi Format:BinarySI} ExtraPerNode:{i:{value:2097152 scale:0} d:{Dec:<nil>} s:2Mi Format:BinarySI} Name:memory}]

期望有大佬可以给出解释

二、使用kubernetes-incubator的资源清单部署 

  1.下载资源清单(我这里直接克隆整个项目):   

1 git clone https://github.com/kubernetes-incubator/metrics-server.git

   2.进入目录,修改资源清单:

 1 cd metrics-server/deploy/1.8+/
 2 vim metrics-server-deployment.yaml
 3 ......
 4       containers:
 5       - name: metrics-server
 6         image: gcr.azk8s.cn/google_containers/metrics-server-amd64:v0.3.3  #修改镜像仓库地址
 7         imagePullPolicy: IfNotPresent
 8         command:                                                           #添加这行
 9             - /metrics-server                                              #添加这行
10             - --kubelet-preferred-address-types=InternalIP                 #添加这行
11             - --kubelet-insecure-tls                                       #添加这行表示不验证客户端证书
12         volumeMounts:
13         - name: tmp-dir
14           mountPath: /tmp
 1 vim resource-reader.yaml
 2 ......
 3 rules:
 4 - apiGroups:
 5   - ""
 6   resources:
 7   - pods
 8   - nodes
 9   - namespaces
10   - nodes/stats  #检查是否存在此项,若不存在,则添加
11 ......

  3.部署:

1 kubectl apply -f ./

4.验证:

  同上面的验证方式一样,这里不在叙述

    使用这种方式部署成功后,查看容器日志,未发现报错:

1 kubectl logs metrics-server-5cf4b94d8b-pllxh -n kube-system
2 I0605 15:13:00.513687       1 serving.go:312] Generated self-signed cert (apiserver.local.config/certificates/apiserver.crt, apiserver.local.config/certificates/apiserver.key)
3 I0605 15:13:01.126262       1 secure_serving.go:116] Serving securely on [::]:443

至此,metrics-server资源监控插件部署完成

原文地址:https://www.cnblogs.com/Smbands/p/10982544.html

时间: 2024-08-27 22:18:36

k8s资源监控metrics-server的相关文章

启用k8s metrics server监控

1.创建aggregator证书 方法一:直接使用二进制源码包安装 $ wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 $ chmod +x cfssl_linux-amd64 $ mv cfssl_linux-amd64 /usr/local/bin/cfssl $ wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 $ chmod +x cfssljson_linux-amd64 $

k8s Metrics Server 获取资源指标与 hpa 部署

使用 helm 部署 Metrics Server helm repo add bitnami https://charts.bitnami.com/bitnami helm install bitnami/metrics-server 会有报错,执行以下命令 helm upgrade loopy-saola bitnami/metrics-server --set apiService.create=true $ kubectl get pod 查看节点 loopy-saola-metrics

kubeadm1.14.1 安装Metrics Server

Metrics API 介绍Metrics-Server之前,必须要提一下Metrics API的概念 Metrics API相比于之前的监控采集方式(hepaster)是一种新的思路,官方希望核心指标的监控应该是稳定的,版本可控的,且可以直接被用户访问(例如通过使用 kubectl top 命令),或由集群中的控制器使用(如HPA),和其他的Kubernetes APIs一样. 官方废弃heapster项目,就是为了将核心资源监控作为一等公民对待,即像pod.service那样直接通过api-

k8s的监控

监控 资源指标和资源监控 一个集群系统管理离不开监控,同样的Kubernetes也需要根据数据指标来采集相关数据,从而完成对集群系统的监控状况进行监测.这些指标总体上分为两个组成:监控集群本身和监控Pod对象,通常一个集群的衡量性指标包括以下几个部分: 节点资源状态:主要包括网络带宽.磁盘空间.CPU和内存使用率 节点的数量:即时性了解集群的可用节点数量可以为用户计算服务器使用的费用支出提供参考. 运行的Pod对象:正在运行的Pod对象数量可以评估可用节点数量是否足够,以及节点故障时是否能平衡负

Kubernetes1.15.2集群部署并部署Metrics Server插件

环境信息: 操作系统 主机名 IP地址 CentOS 7.6 k8s-master 192.168.31.61 CentOS 7.6 k8s-node1 192.168.31.62 CentOS 7.6 k8s-node2 192.168.31.63 1. 安装要求 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 操作系统 CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多 集群中所有机器之间网络互通 可以访问外网,需要

Performance Monitor3:监控SQL Server的内存压力

SQL Server 使用的资源受到操作系统的调度,同时,SQL Server在内部实现了一套调度算法,用于管理从操作系统获取的资源,主要是对内存和CPU资源的调度.一个好的数据库系统,必定在内存中缓存足够多的信息,以减少从物理硬盘中读取数据的次数:如果内存是系统瓶颈,那么SQL Server一定会运行的非常慢.监控SQL Server的内存压力,需要从Widnows级别上,对内存使用的整体使用情况进行监控:从SQL Server级别上,监控SQL Server对内存资源的使用情况. 一,从Wi

大开测试:性能-如何实现对Web应用程序服务器资源监控(连载25)

7.25  如何实现对Web应用程序服务器资源监控 1.问题提出 如何实现对Web应用程序服务器资源监控? 2.问题解答 可以使用LoadRunner的Web应用程序服务器资源监控器,在场景或会话步骤运行期间监控Web应用程序服务器,并隔离应用程序服务器性能瓶颈. Web应用程序服务器资源监控器提供了场景或会话步骤执行过程中,有关Ariba.ATG Dynamo.BroadVision.ColdFusion.Fujitsu INTERSTAGE.iPlanet (NAS).Microsoft A

服务器资源监控指标

内存:1 UNIX资源监控中指标内存页交换速率(Paging rate,使用称为“页面”的单位,将固定大小的代码和数据块从 RAM 移动到磁盘的过程,其目的是为了释放内存空间),如果该值偶尔走高,表明当时有线程竞争内存.如果持续很高,则内存可能是瓶颈.也可能是内存访问命中率低.2 Windows资源监控中,如果Process/Private Bytes计数器和Process/Working Set计数器的值在长时间内持续升高,同时Memory/Available bytes计数器的值持续降低,则

深度解析Tengine的调试与资源监控方法论

摘要: Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,提供更强大的流量负载均衡能力.全站HTTPS服务.安全防×××.链路追踪等众多高级特性.团队的核心成员来自于淘宝.搜狗等互联网企业,从2011年12月开始,Tengine成为一个开源项目,团队在积极地开发和维护着它,最终目标是打造一个高效.稳定.安全.易用的Web平台. 阿里云CDN现在服务超过24万家客户,Tengine作为接入层提供高性能Web Server服务,是CDN系统最核心的组件之