云原生技术Kubernetes之Metrics Server

举报
人工智能-张晨光 发表于 2024/12/19 21:41:38 2024/12/19
【摘要】 19-监控Metrics Server  如果你对 Linux 系统有所了解的话,应该知道有一个命令 top 能够实时显示当前系统的 CPU和内存利用率,它是性能分析和调优的基本工具,非常有用。Kubernetes 也提供了类似的命令,就是 kubectl top,不过默认情况下这个命令不会生效,必须要安装一个插件 MetricsServer 才可以。  Metrics Server 是一个...

19-监控

Metrics Server  

如果你对 Linux 系统有所了解的话,应该知道有一个命令 top 能够实时显示当前系统的 CPU和内存利用率,它是性能分析和调优的基本工具,非常有用。Kubernetes 也提供了类似的命令,就是 kubectl top,不过默认情况下这个命令不会生效,必须要安装一个插件 MetricsServer 才可以。  

Metrics Server 是一个专门用来收集 Kubernetes 核心资源指标(metrics)的工具,它定时从所有节点的 kubelet 里采集信息,但是对集群的整体性能影响极小,每个节点只大约会占用1m 的 CPU 和 2MB 的内存,所以性价比非常高。  

下面的这张图来自 Kubernetes 官网,你可以对 Metrics Server 的工作方式有个大概了解:
它调用 kubelet 的 API 拿到节点和 Pod 的指标,再把这些信息交给 apiserver,这样 kubectl、HPA 就可以利用 apiserver 来读取指标了:  


 

Metrics Server Github 地址

 

兼容列表:

 

 

JSON
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml

 

修改YAML  添加 --kubelet-insecure-tls

部署

JSON
kubectl apply -f metrics-server-1.21+.yaml

 

验证

JSON
[root@master-01 19-monitor]# kubectl  top node
NAME        CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
node        204m         10%    1310Mi          69%       
worker-01   88m          4%     1085Mi          57%       
[root@master-01 19-monitor]#
[root@master-01 19-monitor]#
[root@master-01 19-monitor]#
[root@master-01 19-monitor]# kubectl  top pods
NAME                         CPU(cores)   MEMORY(bytes)   
busybox                      0m           0Mi             
httpserver-d8557894d-4fg29   0m           1Mi             
n1                           0m           2Mi             
n2                           0m           2Mi             
nginx                        0m           2Mi             

 

HorizontalPodAutoscaler(HPA)

有了 Metrics Server,我们就可以轻松地查看集群的资源使用状况了,不过它另外一个更重要
的功能是辅助实现应用的“水平自动伸缩”。  

 

Kubernetes 为此就定义了一个新的 API 对象,叫做“HorizontalPodAutoscaler”,简称是
“hpa”。顾名思义,它是专门用来自动伸缩 Pod 数量的对象,适用于 Deployment 和
StatefulSet,但不能用于 DaemonSet  

 

HorizontalPodAutoscaler 的能力完全基于 Metrics Server,它从 Metrics Server 获取当前应用
的运行指标,主要是 CPU 使用率,再依据预定的策略增加或者减少 Pod 的数量。
下面我们就来看看该怎么使用 HorizontalPodAutoscaler,首先要定义 Deployment 和
Service,创建一个 Nginx 应用,作为自动伸缩的目标对象:  

 

YAML
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-hpa
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-hpa
  template:
    metadata:
      labels:
        app: nginx-hpa
    spec:
      containers:
      - name: nginx
        image: nginx:1.22.1
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 50m
            memory: 10Mi
          limits:
            cpu: 100m
            memory: 20Mi

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-hpa-svc
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx-hpa

 

接下来我们要用命令 kubectl autoscale 创建一个 HorizontalPodAutoscaler 的样板 YAML
文件,它有三个参数:  

  • min,Pod 数量的最小值,也就是缩容的下限。
  • max,Pod 数量的最大值,也就是扩容的上限。
  • cpu-percent,CPU 使用率指标,当大于这个值时扩容,小于这个值时缩容。  

 

好,现在我们就来为刚才的 Nginx 应用创建 HorizontalPodAutoscaler,指定 Pod 数量最少 2
个,最多 10 个,CPU 使用率指标设置的小一点,5%,方便我们观察扩容现象:  

YAML
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
spec:
  maxReplicas: 10
  minReplicas: 2
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-hpa
  targetCPUUtilizationPercentage: 5

 

HorizontalPodAutoscaler 会根据 YAML 里的描述,找到要管理的
Deployment,把 Pod 数量调整成 2 个,再通过 Metrics Server 不断地监测 Pod 的 CPU 使用
率。  

 

下面我们来给 Nginx 加上压力流量,运行一个测试 Pod,使用的镜像是“httpd:alpine”,它里
面有 HTTP 性能测试工具 ab(Apache Bench):  

YAML
kubectl run test -it --image=httpd:alpine -- sh
ab -c 10 -t 60 -n 100000 'http://nginx-hpa-svc/'

 

YAML
kubectl  get hpa nginx-hpa  -w

因为 Metrics Server 大约每 15 秒采集一次数据,所以 HorizontalPodAutoscaler 的自动化扩容和缩容也是按照这个时间点来逐步处理的。


当它发现目标的 CPU 使用率超过了预定的 5% 后,就会以 2 的倍数开始扩容,一直到数量上限,然后持续监控一段时间,如果 CPU 使用率回落,就会再缩容到最小值。  

 

kube-prometheus

111111.png


  

33333.png

组件

Kube-prometheus 包含的组件:

 

使用 Helm 安装 Kube-prometheus

 

  • 添加 helm 仓库

Bash
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

 

  • 版本查询  

Bash
helm search repo prometheus-community
helm search repo prometheus-community/kube-prometheus-stack -l

图片1444.png

 

Bash
helm pull prometheus-community/kube-prometheus-stack --version=54.1.0

tar xvf kube-prometheus-stack-54.1.0.tgz

 

Chart.yaml 中显示 kube-prometheus 所依赖的各种组件及相关版本。

图片1555.png

 

  • 安装

Bash
helm upgrade --install prometheus-stack -f  kube-prometheus-stack/promethues-values.yaml ./kube-prometheus-stack/ --create-namespace --namespace prometheus-stack

  图片16.png

图片17.png

图片18.png

  • 修改 SVC

 

Bash
kubectl port-forward -n prometheus-stack  --address 0.0.0.0 svc/kube-prometheus-stack-grafana 9000:80
kubectl port-forward -n prometheus-stack  --address 0.0.0.0 svc/kube-prometheus-stack-prometheus 9090:9090

  • 访问 Grafana

Bash
admin
prom-operator

 

图片19.png

图片20.png总结

kubernetes的新监控体系中,metrics-server属于Core metrics(核心指标),提供API metrics.k8s.io,仅提供Node和Pod的CPU和内存使用情况。而其他Custom Metrics(自定义指标)由Prometheus等组件来完成,后续文章将对自定义指标进行解析。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/agonie201218/article/details/128339568

 

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。