云原生技术Kubernetes之Metrics Server

举报
tea_year 发表于 2024/12/19 21:41:38 2024/12/19
316 0 0
【摘要】 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,这样 kubectlHPA 就可以利用 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             

HorizontalPodAutoscalerHPA

有了 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
文件,它有三个参数:  

  • minPod 数量的最小值,也就是缩容的下限。
  • maxPod 数量的最大值,也就是扩容的上限。
  • cpu-percentCPU 使用率指标,当大于这个值时扩容,小于这个值时缩容。  

好,现在我们就来为刚才的 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 性能测试工具 abApache 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

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

    全部回复

    上滑加载中

    设置昵称

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

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

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