基于istio提供的七层流量指标实现应用自动弹性伸缩

举报
可以交个朋友 发表于 2024/08/22 17:05:18 2024/08/22
【摘要】 微服务接入istio服务网格后,istio除了提供流量治理的能力外,还为服务网格中的服务流量提供了非侵入式的prometheus指标数据。

一 背景

微服务接入istio服务网格后,istio除了提供流量治理的能力外,还为服务网格中的服务流量提供了非侵入式的prometheus指标数据。极大的方便了运维统计微服务的网络运行情况,尤其是东西向流量的指标数据。我们可以将这些指标数据加以利用提升集群服务的稳定性


二 简介

基于istio代理提供的流量指标 istio_requests_total进行HPA的配置。
image.png

关于istio能提供哪些指标,请参考: https://istio.io/latest/zh/docs/reference/config/metrics/


三 实践操作

3.1 前提准备

  1. 集群安装kube-prometheus-stack插件,可选择server模式(本地存储指标数据)
    image.png

3.2 配置Prometheus监控任务

  1. CCE prometheus插件已经集成相关PodMonitor配置,如果是自建prometheus 请参考如下配置:

    kind: PodMonitor
    apiVersion: monitoring.coreos.com/v1
    metadata:
      labels:
        app: istio
      name: istio
      namespace: monitoring
    spec:
      jobLabel: istio
      namespaceSelector:
        any: true
      podMetricsEndpoints:
        - honorLabels: true
          interval: 15s
          metricRelabelings:
            - action: keep
              regex: istio.*
              sourceLabels:
                - __name__
          path: /stats/prometheus
          relabelings:
            - action: keep
              regex: http-envoy-prom
              sourceLabels:
                - __meta_kubernetes_pod_container_port_name
            - action: labeldrop
              regex: (job|instance|namespace|pod|container)
      selector: {}
    

  2. Prometheus 控制台查看istio相关指标
    监控任务成功加载:
    image.png
    详细指标数据:
    image.png
    关于指标标签解释:
    image.png


3.3 Prometheus-adapter 配置指标转换规则

  1. 转换规则的目的是将原生prometheus格式的指标按照k8s集群资源进行适配,然后将指标总量转换为速率

    - seriesQuery: '{__name__=~"istio_requests_total"}'
      resources:
        overrides:
          destination_pod:
            resource: pod
          destination_service_namespace:
            resource: namespace
      name:
        matches: istio_requests_total
        as: http_requests_per_second
      metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>,reporter="destination"}[1m])) by (<<.GroupBy>>)#将指标量换算成速率
    
    

    将上述配置加载到prometheus-adaptor中,加载方式为:
    kubectl -n monitoring edit cm user-adapter-config
    image.png


  2. 重启负载实例
    手动删除monitoring 命名空间下的custome-metrics-apiserver负载实例,新pod实例会加载上述添加的规则
    image.png


  3. 确认custom metricsAPI能暴露自定义指标
    kubectl get --raw="/apis/custom.metrics.k8s.io/v1beta1/namespaces/xxx/pods/*/http_requests_per_second" |jq
    image.png


3.4 配置HPA弹性伸缩策略

  1. 对目标应用配置指定指标和弹性伸缩阈值

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: helloworld-hpa
      namespace: hujiamin
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: helloworld-v1
      minReplicas: 1
      maxReplicas: 10
      metrics:
      - type: Pods
        pods:
          metric:
            name: http_requests_per_second
          target:
            type: AverageValue
            averageValue: 10
    

  2. 查看对应HPA规则
    可以看到当前服务没有流量请求,最小实例是1,最大实例是10,当前实例是1。
    image.png


  3. 访问业务,测试自动扩容
    image.png
    观察HPA记录状态,可以发现指标超过阈值后,触发自动扩容
    image.png


  1. 停止业务访问,测试自动缩容
    image.png
    观察HPA记录状态,可以发现指标低于阈值,等待冷静窗口期后,已自动缩容
    image.png
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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