基于Prometheus自定义指标对k8s集群的容器扩缩容

11 篇文章 4 订阅

前面分别对基于云原生k8s自身的hpa基于阿里云ack集群上的hpa进行了讲解,但同时也有以自身的不足:
1、k8s原生的hpa只能满足硬件资源的需求,并不能对于业务的一些指标做很多的扩容。
2、阿里云ack集群通过集成阿里云厂商自研的插件可以很好的满足业务指标的获取,但是对于没有上云的公司来说也是一个痛点问题。

因为我们可以通过开源的prometheus-adapter可以解决这个问题。

前置条件:

1、k8s集群
2、prometheus监控

背景:

Kubernetes 默认提供 CPU 和内存作为 HPA 弹性伸缩的指标,如果有更复杂的场景需求,比如基于业务单副本 QPS 大小来进行自动扩缩容,可以考虑自行安装 prometheus-adapter 来实现基于自定义指标的 Pod 弹性伸缩。

实现原理:

Kubernetes定义了三种不同的监控数据接口,分别是Resource Metric,Custom Metric以及External Metric。

  1. Resource Metric是通过metrics-server采集;
  2. Custom Metric是通过prometheus来实现自定义扩容。
  3. External Metric就是针对云场景的了,比方说通过获取slb最大连接数来实现自动扩容。

操作:

以开发测试的某个业务服务为例,该服务已经纳入到prometheus监控中,如下所示:
在这里插入图片描述

step1:helm部署(helm3版本)

1)编写values文件

cat values.yaml

prometheus:
url: http://prometheus-kube-prometheus-prometheus.prometheus.svc.kiki.local
port: 9090
rules:
default: false
custom:
seriesQuery: dubbo_request_concurrent_total{namespace!="",pod!=""}
resources:
overrides:
namespace:
resource: namespace
pod:
resource: pod
name:
matches: "^(.*)_total"
as: "${1}_per_second"
metricsQuery: (sum(increase(<<.Series>>{<<.LabelMatchers>>}[2m])) by (<<.GroupBy>>))

2)部署prometheus-adapter

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus-adapter prometheus-community/prometheus-adapter -f values.yaml

在这里插入图片描述

3)验证adapter服务

kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1

在这里插入图片描述
验证服务的相关指标

kubectl get --raw '/apis/custom.metrics.k8s.io/v1beta1/namespaces/kikitrade-dev/pods/*/dubbo_request_concurrent_per_second'

截图下的metricName为获取的关键指标,value就是对应指标获取的值
在这里插入图片描述

step2:测试hpa

cat app-hpa.yaml

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: dubbo-hpa
  namespace: kikitrade-dev
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: green-ktrade
  minReplicas: 1
  maxReplicas: 3
  metrics:
  - type: Pods
    pods:
      metricName: dubbo_request_concurrent_per_second
      targetAverageValue: 100

在这里插入图片描述
由于我将该指标的值设置的比较低,所以很快就可以看到pod扩上去了
在这里插入图片描述
接下来,我将指标的参数调高,看是否可以缩回去
在这里插入图片描述
在这里插入图片描述

优化调整:

上面我们只是看到了扩所容的现象,但是实际上和我们的grafana显示的还是有出入,接下来优化下:

step1:修改rules

cat values.yaml

prometheus:
  url: http://prometheus-kube-prometheus-prometheus.prometheus.svc.kiki.local
  port: 9090

rules:
  default: false
  custom:
  - seriesQuery: dubbo_request_concurrent_total{namespace!="",pod!=""}
    resources:
      overrides:
        namespace:
          resource: namespace
        pod:
          resource: pod
    name:
      matches: "^(.*)_total"
      as: "${1}_per_second"
    metricsQuery: (sum(increase(<<.Series>>{<<.LabelMatchers>>}[2m])/120) by (<<.GroupBy>>))

step2:更新服务

helm upgrade prometheus-adapter prometheus-community/prometheus-adapter -f values.yaml -n custom-metrics

step3:验证

获取指标,和grafana对比
在这里插入图片描述
在这里插入图片描述
对比后会发现,获取的指标值为3916m,grafana显示的是3.92,这里存在一个单位换算问题,3916m/1000 约等于3.92,因此可以通过优化有的这个作为业务容器的自动阔缩容,从而更加经济的使用k8s集群。

至此,k8s的自动扩缩容到此完结。都到这儿了,更多文章,详见个人微信公众号ALL In Linux,来扫一扫吧!
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Prometheus中配置报警操作以监控Kubernetes集群,可以遵循以下步骤: 1. 部署Prometheus:首先,在Kubernetes集群中部署Prometheus。可以使用Prometheus Operator、Helm Chart或自定义部署来安装和配置Prometheus。 2. 配置Kubernetes监控目标:配置Prometheus以监控Kubernetes集群中的各种目标,如节点(Node)、Pod、容器(Container)、服务(Service)等。可以使用Prometheus的Service Discovery机制自动发现和监控这些目标。 3. 定义告警规则:在Prometheus中定义告警规则,以便根据指标的阈值或其他条件生成警报。可以编写Prometheus的规则文件(例如`prometheus.rules.yml`),在其中定义告警规则。 4. 配置报警操作:为生成的警报配置报警操作。可以使用Prometheus的Alertmanager组件来处理和路由警报。在Prometheus配置文件中指定Alertmanager的地址,并配置警报路由规则。 5. 配置Alertmanager:在Alertmanager中配置警报通知方式,如电子邮件、Slack、PagerDuty等。可以定义接收警报的接收者,并指定其通知方式和地址。 6. 测试和验证:确保Prometheus能够正确地收集指标数据并生成警报。可以通过触发警报条件或模拟异常情况来测试警报系统的工作。 通过以上步骤,您可以配置Prometheus来根据报警操作监控Kubernetes集群,并在发生问题或异常情况时及时生成警报。 希望对您有所帮助!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值