基于Dolphin插件提供容器网络指标实现应用弹性伸缩

举报
可以交个朋友 发表于 2024/08/21 17:58:57 2024/08/21
【摘要】 通过CCE 网络指标插件提供的多种容器网络指标结合prometheus插件配置应用自定义指标弹性伸缩策略。

一 背景

鉴于kubernetes组件暴露的容器网络指标有限,cadvisor只暴露了基本的容器网络指标。在给应用配置弹性伸缩策略时,容器网络相关的指标选择局限性比较大。


二 简介

通过CCE 网络指标插件提供的多种容器网络指标结合prometheus插件配置应用自定义指标弹性伸缩策略。
CCE容器网络扩展指标插件(dolphin)是一款容器网络流量监控管理插件,支持Pod粒度和flow粒度的IP、UDP和TCP协议监控。监控信息已适配Prometheus格式,可以通过调用Prometheus接口查看监控数据。
image.png
关于dolphin能监控哪些网络指标,可前往官网查看:
https://support.huaweicloud.com/usermanual-cce/cce_10_0371.html


三 实践演示

3.1 前提准备

  1. 创建集群 集群类型必须为turbo集群
  2. 创建节点 节点os须为HCE2.0 或者Eurlos2.9
  3. CCE插件市场安装插件Dolphin和Kube-prometheus-stack
    image.png

3.2 创建dolphin监控任务

  1. 通过创建MonitorPolicy的方式下发监控任务,dolphin 组件会根据相关配置采集节点上容器的网络流量指标
    apiVersion: crd.dolphin.io/v1
    kind: MonitorPolicy
    metadata:
      name: monitor-test            #监控任务名
      namespace: kube-system        #必填,namespace必须为kube-system
    spec:
      selector:                     #选填,配置dolphin插件监控的后端,形如labelSelector格式,默认将监控本节点所有容器
        matchExpressions:
          - key: app
            operator: In
            values:
              - depart-a
      podLabel: [app]               #选填,用户标签
      ip4Tx:                        #选填,ipv4发送报文数和发送字节数这两个指标的开关,默认不开
        enable: true
      ip4Rx:                        #选填,ipv4接收报文数和接收字节数这两个指标的开关,默认不开
        enable: true
      ip4TxInternet:                #选填,ipv4发送公网报文数和发送公网字节数这两个指标的开关,默认不开
        enable: true
      monitor:
        ip:
          ipReceive:
            aggregateType: pod       #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
          ipSend:
            aggregateType: pod       #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
        tcp:
          tcpReceive:
            aggregateType: pod       #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
          tcpSend:
            aggregateType: pod       #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
          tcpRetrans:
            aggregateType: pod       #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
          tcpRtt:
            aggregateType: pod       #选填,支持填写"flow",表示流粒度监控,单位:微秒
          tcpNewConnection:
            aggregateType: pod        #选填,支持填写"pod",表示pod粒度监控
          tcpDrop:
            aggregateType: pod       #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
          tcpConnectionFailure:
            aggregateType: pod        #选填,支持填写"pod",表示pod粒度监控
        udp:
          udpReceive:
            aggregateType: pod       #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
          udpSend:
            aggregateType: pod       #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
    
    
  2. 确认dolphin监控任务生效,访问dolphin metrics端口查看相关指标
    image.png

3.3 配置Prometheus指标采集任务

  1. 通过配置PodMonitor,Prometheus就会自动采集CCE容器网络扩展指标

    apiVersion: monitoring.coreos.com/v1
    kind: PodMonitor
    metadata:
      name: dolphin
      namespace: monitoring
    spec:
      namespaceSelector:
        matchNames:
        - kube-system
      jobLabel: podmonitor-dolphin
      podMetricsEndpoints:
      - interval: 15s
        path: /metrics
        port: dolphin
        tlsConfig:
          insecureSkipVerify: true
        metricRelabelings:
          - sourceLabels: [exported_pod]
            targetLabel: kubernetes_namespace
            regex: (.*)/(.*)
            action: replace
            replacement: $1
          - sourceLabels: [exported_pod]
            targetLabel: kubernetes_pod
            regex: (.*)/(.*)
            action: replace
            replacement: $2
      selector:
        matchLabels:
          app: dolphin
    
    

  2. 确认Prometheus采集成功并存储指标
    image.png
    查看指标:
    image.png


3.4 配置指标转换规则、并注册相关API接口

  1. Prometheus有指标数据源之后,需要将指标格式进行转换
    kubectl -n monitoring edit configmap user-adapter-config
    在rules规则下面添加:

    - seriesQuery: '{__name__=~"dolphin_ip_receive_pkt"}'  # 指标名称,示例使用的是ip接受报文数
      resources:
        overrides:
          kubernetes_pod:
            resource: pod
          kubernetes_namespace:
            resource: namespace
      name:                   #将指标进行重命名,更加可读
        matches: dolphin_ip_receive_pkt  
        as: pod_ip_receive_pkt_per_second
      metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>> ,ipfamily="ipv4"}[3m])) by (<<.GroupBy>>)  #将指标量换算成速率,3min内每秒接受多少报文
    
    
  2. 重启custome-metrics-apiserver负载实例
    image.png

  3. 确认自定义指标接口注册到apiserver
    kubectl get --raw="/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/pods/*/pod_ip_receive_pkt_per_second" |jq
    image.png
    接口有数据返回,即表示custom metrics API注册成功


3.5 配置HPA弹性伸缩策略

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

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: app-a-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: app-a
      minReplicas: 1
      maxReplicas: 10
      metrics:
      - type: Pods
        pods:
          metric:
            name: pod_ip_receive_pkt_per_second
          target:
            type: AverageValue
            averageValue: 15
    
  2. 查看对应HPA规则
    image.png

  3. 对应用压测,测试扩容效果
    image.png
    开始压测后,可以发现容器网络指标迅速爬升。HPA规则开始生效,触发扩容
    image.png

  4. 停止压测,测试缩容效果
    image.png
    查看HPA缩容动态变化,直至最后缩容到最小实例数
    image.png
    查看HPA事件,记录了扩缩容操作
    image.png


四 备注

  1. 关于dolphin插件使用详情,请参考:https://support.huaweicloud.com/usermanual-cce/cce_10_0371.html
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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