码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 如何基于容器网络流量指标进行弹性伸缩


    合集 - 开发与运维(29)
    1.面试官:你能简单聊聊MyBatis执行流程02-022.一文详解应用安全防护ESAPI02-043.一个线程,从“生”到“死”经历的过程02-054.KubeEdge v1.16.0 版本发布!10项新增特性02-055.解密JavaChassis3:易扩展的多种注册中心支持02-066.解析Sermant热插拔能力:服务运行时动态挂载JavaAgent和插件02-087.想设计一个高并发的消息中间件前,先熟悉一下这些知识点02-178.华为云GES助力九洲平台:探索确定性运维的新实践02-179.0-overlay和underlay,这两种容器网络你分得清吗02-1810.教你用Rust实现Smpp协议02-1811.基于OpenTelemetry实现Java微服务调用链跟踪02-1912.揭开华为云ADN提高网络质量的秘密02-1913.详解网络知识:iptables规则02-1914.实例详解在Go中构建流数据pipeline02-2115.面试官让我讲讲MySQL三大核心日志实现原理02-2116.华为云帕鲁服务器-云耀云容器版,到底强在哪?02-2217.掌握云容器网络:何为ipvs02-2218.一文带你了解容器探针02-2319.教你如何判断Java代码中异步操作是否完成02-2620.深入解析Python并发编程的多线程和异步编程02-2721.教你如何用Keepalived和HAproxy配置高可用 Kubernetes 集群02-2822.容器化环境中,JVM最佳参数配置实践02-2923.关于Python中math 和 decimal 模块的解析与实践02-2924.运维一款月变更70+次的服务,是一种什么体验?03-0125.详解Python中sys模块的功能与应用03-0426.教你用Ubuntu快速搭建饥荒服务器03-0427.分享一个能让你的研发效率提升超过20%的工具03-0628.下一代积木式智能组装编排,集成开发效率10倍提升03-06
    29.如何基于容器网络流量指标进行弹性伸缩03-06
    收起

    本文分享自华为云社区《【自定义指标HPA】基于容器网络流量指标进行弹性伸缩》,作者: 可以交个朋友。

    一、背景

    业务程序非CPU、memeory敏感类业务,希望可以基于流量指标进行HPA弹性伸缩,但是大部分程序并没有集成Prometheus SDK相关代码进行插桩。此时可以通过cAdvisor提供的容器网络流量指标实现业务峰谷期间的弹性扩缩容。

    二、方案介绍

    cAdvisor负责节点上的容器和节点本身资源的统计,内置在kubelet中,并通过kubelet的/metrics/cadvisor 接口对外提供API。它可以采集容器网络累积接收数据总量和容器网络累积传输数据总量,即网络流入和流出指标。

    参考指标:

    container_network_receive_bytes_total 容器接受的网络流量,单位是字节数

    image.png

    container_network_transmit_bytes_total 容器传输的网络流量,单位是字节数

    image.png

    上面两个指标都是counter计数器类型,对应的值只增不减。在配置自定义指标转换规则时需要做下速率换算,将总量换算成每秒接受多少字节数的流量指标。

    三、实践操作

    3.1 安装Prometheus相关插件

    建议使用华为云CCE产品,插件市场集成了kube-prometheus-stack,同时该插件也已经对接了CCE集群节点实现了节点cadvisor的指标监控。

    image.png

    插件安装完成后,可以通过访问prometheus UI查看指标信息:

    image.png

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

    kubectl -n monitoring edit configmap user-adapter-config

    image.png
    复制代码
     - seriesQuery: 'container_network_receive_bytes_total{namespace!="",pod!=""}'
       seriesFilters: []
       resources:
         overrides:
           namespace:
             resource: namespace
           pod:
             resource: pod
       name:
         matches: container_(.*)_total
         as: "pod_${1}_per_second"
       metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[3m])) by (<<.GroupBy>>)/1000
    
     - seriesQuery: 'container_network_transmit_bytes_total{namespace!="",pod!=""}'
       seriesFilters: []
       resources:
         overrides:
           namespace:
             resource: namespace
           pod:
             resource: pod
       name:
         matches: container_(.*)_total
         as: "pod_${1}_per_second"
       metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[3m])) by (<<.GroupBy>>)/1000
    复制代码

    注意: 修改后需要重启monitoring命名空间下的custom-metrics-apiserver负载实例。

    其中metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[3m])) by (<<.GroupBy>>)/1000 配置表示 最近3min内pod每秒接受的请求量,由于container_network_receive_bytes_total和container_network_transmit_bytes_total 是counter类型的指标,指标数值会一直递增,所以需要将指标做下速率换算。 除以/1000 则表示以kb为单位,默认单位是字节数,查出来的值会很大,该处可以根据实际情况进行配置。

    resources处配置则是将Prometheus中查询的指标和K8s集群中的资源进行匹配映射。

    name处配置则是将Prometheus查询出来的指标,进行重命名处理,增强指标可读性。

    3.3 验证自定义弹性指标是否可用

    调用接口访问自定义指标:

    kubectl get --raw="/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/pods/*/pod_network_receive_bytes_per_second" |jq

    可以看到对应的指标和其返回的值。

    image.png

    也可以在CCE控制台进行自定义指标的查看,发现该指标已经可用:

    image.png

    3.4 测试HPA弹性功能

    主要是观测能否根据该指标,即容器每秒接受的网络流量指标进行动态阔缩容。

    编写HPA yaml文件,创建HPA弹性伸缩策略

    复制代码
    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: hpa-app07
      namespace: default
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: app07
      minReplicas: 1
      maxReplicas: 10
      metrics:
      - type: Pods
        pods:
          metric:
            name: pod_network_receive_bytes_per_second
          target:
            type: AverageValue
            averageValue: 10
    复制代码

    然后通过执行命令 while true; do curl clusterIP:port;done 进行压测,创造访问流量。

    观测HPA实时动态kubectl get hpa xxx -w

    image.png

    可以看到随着流量指标数值的攀升,pod实例逐步开始扩容。直到扩容到实例上限。

    image.png

    停止压测观察HPA缩容变化,直到最后只剩下一个pod在运行。

    image.png

    四、补充

    如何在CCE测查看负载实例的网络流量指标信息

    image.png

    负载级别网络流量指标展示:

    image.png

    Pod实例级别网络流量指标展示:

    image.png

    也可前往云原生观测-监控中心-仪表盘-选择Pod视图查看流量指标信息:

    image.png

    对比上述配置的自定义指标计算方式求的值基本吻合

    image.png

     

    点击关注,第一时间了解华为云新鲜技术~

     

  • 相关阅读:
    【Leetcode】 738. 单调递增的数字
    Java入门必备知识你能掌握多少?
    史上最全架构师知识图谱(纯干货)
    个人职业规划
    一种高效的同态加密方案及其应用-解读
    我理解的反射
    Lua表公共操作
    buuctf crypto 【rsa2】解题记录
    自回归策略是什么
    基于centos、alpine制作Java JDK基础镜像
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/18056089
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号