0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Prometheus的全方位监控平台设计

阿铭linux 来源:阿铭linux 2023-06-29 11:37 次阅读

一、背景:

Kubernetes集群规模大、动态变化快,而且容器化应用部署和服务治理机制的普及,传统的基础设施监控方式已经无法满足Kubernetes集群的监控需求。

需要使用专门针对Kubernetes集群设计的监控工具来监控集群的状态和服务质量。

Prometheus则是目前Kubernetes集群中最常用的监控工具之一,它可以通过Kubernetes API中的 metrics-server 获取 Kubernetes 集群的指标数据,从而实现对Kubernetes集群的应用层面监控,以及基于它们的水平自动伸缩对象 HorizontalPodAutoscaler。

二、Metrics-server

资源指标管道 Metrics API | Kubernetes

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

Metrics Server 工作原理

bc3b1c54-162d-11ee-962d-dac502259ad0.png

图中从右到左的架构组件包括以下内容:

cAdvisor: 用于收集、聚合和公开 Kubelet 中包含的容器指标的守护程序。

kubelet: 用于管理容器资源的节点代理。可以使用 /metrics/resource 和 /stats kubelet API 端点访问资源指标。

Summary API: kubelet 提供的 API,用于发现和检索可通过 /stats 端点获得的每个节点的汇总统计信息。

metrics-server: 集群插件组件,用于收集和聚合从每个 kubelet 中提取的资源指标。API 服务器提供 Metrics API 以供 HPA、VPA 和 kubectl top 命令使用。Metrics Server 是 Metrics API 的参考实现。

Metrics API: Kubernetes API 支持访问用于工作负载自动缩放的 CPU 和内存。要在你的集群中进行这项工作,你需要一个提供 Metrics API 的 API 扩展服务器。

2.1、Metrics-server部署配置

Metrics Server 的项目网址(https://github.com/kubernetes-sigs/metrics-server)

$ wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml  && mv components.yaml metrics-server.yaml

修改 YAML 文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: metrics-server
  namespace: kube-system
spec:
  ... ... 
  template:
   spec:
    containers:
    - args:
     - --kubelet-insecure-tls
     ... ...

Metrics Server 默认使用 TLS 协议,要验证证书才能与 kubelet 实现安全通信,而我们的内网环境里没有这个必要。

默认镜像源非国内,如有下载失败的小伙伴,更改镜像为如下阿里云提供的即可:

registry.aliyuncs.com/google_containers/metrics-server:v0.6.1

部署:

$ kubectl apply -f metrics-server.yaml

测试验证:

$ kubectl top node
$ kubectl top pod -n kube-system

三、HorizontalPodAutoscaler

HorizontalPodAutoscaler (HPA)是Kubernetes中的一个控制器,用于动态地调整Pod副本的数量。HPA可以根据Metrics-server提供的指标(如CPU使用率、内存使用率等)或内部指标(如每秒的请求数)来自动调整Pod的副本数量,以确保应用程序具有足够的资源,并且不会浪费资源。

HPA是Kubernetes扩展程序中非常常用的部分,特别是在负载高峰期自动扩展应用程序时。

3.1、使用HorizontalPodAutoscaler

创建一个 Nginx 应用,定义 Deployment 和 Service,作为自动伸缩的目标对象:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ngx-hpa-dep
spec:
  replicas: 1
  selector:
   matchLabels:
    app: ngx-hpa-dep
  template:
   metadata:
    labels:
     app: ngx-hpa-dep
   spec:
    containers:
    - image: nginx:alpine
     name: nginx
     ports:
     - containerPort: 80
     resources:
      requests:
       cpu: 50m
       memory: 10Mi
      limits:
       cpu: 100m
       memory: 20Mi
---
apiVersion: v1
kind: Service
metadata:
  name: ngx-hpa-svc
spec:
  ports:
  - port: 80
   protocol: TCP
   targetPort: 80
  selector:
   app: ngx-hpa-dep

注意在它的 spec 里一定要用 resources 字段写清楚资源配额,否则 HorizontalPodAutoscaler 会无法获取 Pod 的指标,也就无法实现自动化扩缩容。

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

min,Pod 数量的最小值,也就是缩容的下限。

max,Pod 数量的最大值,也就是扩容的上限。

cpu-percent,CPU 使用率指标,当大于这个值时扩容,小于这个值时缩容。

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

$ kubectl autoscale deploy ngx-hpa-dep --min=2 --max=8 --cpu-percent=5 --dry-run=client -o yaml > nginx-demo-hpa.yaml

YAML 描述文件:

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: ngx-hpa
spec:
  maxReplicas: 8
  minReplicas: 2
  scaleTargetRef:
   apiVersion: apps/v1
   kind: Deployment
   name: ngx-hpa-dep
  targetCPUUtilizationPercentage: 5

通过kubectl apply创建这个 HorizontalPodAutoscaler 后,它会发现 Deployment 里的实例只有 1 个,不符合 min 定义的下限的要求,就先扩容到 2 个:

# kubectl get deploy
NAME          READY   UP-TO-DATE   AVAILABLE   AGE
ngx-hpa-dep   1/2     2            1           95s

3.2、测试验证

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

$ kubectl run test -it --image=httpd:alpine -- sh

然后我们向 Nginx 发送一百万个请求,持续 1 分钟,再用 kubectl get hpa 来观察 HorizontalPodAutoscaler 的运行状况:

$ ab -c 10 -t 60 -n 1000000 'http://ngx-hpa-svc/'

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

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

如果 CPU 使用率回落,就会再缩容到最小值 (默认会等待五分钟如果负载没有上去,就会缩小到最低水平,防止抖动)。

$ kubectl get po
NAME                           READY   STATUS              RESTARTS   AGE
ngx-hpa-dep-7984687bb9-86cg5   0/1     ContainerCreating   0          14s
ngx-hpa-dep-7984687bb9-9wpr8   1/1     Running             0          29s
ngx-hpa-dep-7984687bb9-gjzwl   0/1     ContainerCreating   0          14s
ngx-hpa-dep-7984687bb9-k4dpj   0/1     ContainerCreating   0          14s
ngx-hpa-dep-7984687bb9-qkhpq   1/1     Running             0          4m45s
ngx-hpa-dep-7984687bb9-sgxtc   0/1     ContainerCreating   0          14s
ngx-hpa-dep-7984687bb9-xq6xk   1/1     Running             0          6m11s
ngx-hpa-dep-7984687bb9-xs9q8   0/1     ContainerCreating   0          29s

四、总结

1、Metrics Server是Kubernetes中的一个组件,它可以将集群中的散布的资源使用情况数据收集并聚合起来。收集的数据包括节点的CPU和内存使用情况等。

2、通过API提供给Kubernetes中的其它组件(如HPA)使用。Metrics Server可以帮助集群管理员和应用程序开发者更好地了解集群中资源的使用情况,并根据这些数据做出合理的决策,例如调整Pod副本数、扩展集群等。

3、Metrics Server对于Kubernetes中的资源管理和应用程序扩展非常重要。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    1382

    浏览量

    60992
  • 容器
    +关注

    关注

    0

    文章

    481

    浏览量

    21883
  • 监控平台
    +关注

    关注

    0

    文章

    26

    浏览量

    8457
  • Prometheus
    +关注

    关注

    0

    文章

    26

    浏览量

    1676

原文标题:基于Prometheus的全方位监控平台--HPA自动伸缩

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Prometheus的架构原理从“监控”谈起

    。 去年10月我们快速落地了一套易用、灵活、有亮点的业务监控平台,其中使用到了Prometheus。从技术选型阶段,Pr
    的头像 发表于 10-10 15:47 4163次阅读
    <b class='flag-5'>Prometheus</b>的架构原理从“<b class='flag-5'>监控</b>”谈起

    [分享]全方位剖析BGA布线规则与技巧

     全方位剖析BGA布线规则与技巧  http://www.weeqoo.com/bbs/bbsdetail-271365-13.html
    发表于 07-17 10:33

    行车记录仪全方位录像

    行车记录仪全方位录像
    发表于 04-17 11:15

    全方位智能小车通讯应该使用什么方式?

    全方位智能小车通讯应该使用什么方式?此小车轮子位置处在正四边形的四个角的位置,可实现八个方向移动,想通过手机蓝牙控制下车移动,该如何实现,求大师指导?
    发表于 05-25 10:51

    全方位距离雷达动态检测系统的设计怎么设计

    具有全方位距离检测功能,具有全方位距离显示功能 能够智能找出距离最短的能力
    发表于 03-06 15:26

    Glance360全方位智能展示

    `Glance一目了然,免费的产品360全方位智能展示方案。支持AI语音互动,AR增强现实展示,IOT远程协助等前卫功能。可用于产品智能说明书,产品智能展示,广告宣传,远程控制器等众多功能。提供免费
    发表于 11-15 11:42

    全方位立体电容传感器的设计

      摘要:本人通过对学生电子实训课中出现的问题进行分析和研究,发明了全方位立体电容传感器,它解决了传统传感器只能单一方向传感的问题,实现全方位立体传感器的目的。  一、发现问题  在电子课进行触摸
    发表于 11-12 16:26

    什么是全方位汽车安全解决方案?

    本文在传统防盗系统的基础上采用了嵌入式系统理念,提出了一种新的全方位汽车安全解决方案,在PSoC3硬件开发平台上设计出具有远程监控功能的智能车锁,为汽车防盗系统的远程无线网络化发展提供了良好的应用基础。终端由于安装方便、灵活性强
    发表于 11-01 06:36

    关于全方位立体电容传感器的设计

    本人通过对学生电子实训课中出现的问题进行分析和研究,发明了全方位立体电容传感器,它解决了传统传感器只能单一方向传感的问题,实现全方位立体传感器的目的。
    发表于 04-29 07:40

    prometheus监控服务的整个流程介绍

    。MicroMeterSpringBoot本身提供了健康检查,度量,指标收集和监控,怎么把这些数据暴露给Prometheus,这就要用到Micrometer ,Micrometer为Java平台上的性能数据收集提供了
    发表于 12-23 17:34

    介绍一种全方位测量和检验的软件

    PC-DMIS.V3.5 全方位测量和检验的软件简体中文完整版.没有功能限制好用 WaSP.v9.0.0.139(风力气象预报和风力发电机和风电场产能预报的PC平台应用工具) h:\31\ ansys CFX 学习教程手册资料.rar Auto CAD R14简体中文版.
    发表于 07-12 08:48

    Prometheus服务监控系统

    prometheus.zip
    发表于 04-26 10:23 3次下载
    <b class='flag-5'>Prometheus</b>服务<b class='flag-5'>监控</b>系统

    prometheus下载安装教程

    Prometheus 是一个开放性的监控解决方案,用户可以非常方便的安装和使用 Prometheus 并且能够非常方便的对其进行扩展。 在Prometheus的架构设计中,
    的头像 发表于 01-13 16:07 6714次阅读
    <b class='flag-5'>prometheus</b>下载安装教程

    基于kube-prometheus的大数据平台监控系统设计

    本文介绍了如何基于 kube-prometheus 设计一个监控系统, 以灵活简单的方式对 kubernetes 上的应用进行指标采集,并实现监控报警功能。
    的头像 发表于 05-30 17:02 441次阅读

    基于Prometheus开源的完整监控解决方案

    每一个被 Prometheus 监控的服务都是一个 Job,Prometheus 为这些 Job 提供了官方的 SDK ,利用这个 SDK 可以自定义并导出自己的业务指标,也可以
    发表于 10-18 09:15 180次阅读
    基于<b class='flag-5'>Prometheus</b>开源的完整<b class='flag-5'>监控</b>解决方案