# [k8s] HPA: Horizontal Pod Autoscaling - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GopherDaily
V2EX    Kubernetes

# [k8s] HPA: Horizontal Pod Autoscaling

  •  
  •   GopherDaily 2023-03-07 16:44:22 +08:00 1202 次点击
    这是一个创建于 1015 天前的主题,其中的信息可能已经有所发展或是发生改变。

    [k8s] HPA: Horizontal Pod Autoscaling

    HPA 是 K8S 的一大利器. 通过 HPA, 我们可以让服务的 pod 数量根据特定指标自动增加或减少, 使得在高峰期有足够的资源服务请求, 在低峰期又可以避免占用过多的资源. 同时, 在 SOA 架构下, 我们也习惯通过 HPA 来避免劳心劳力的为每个微服务计算所需的资源.

    HPA 的几个关键参数:

    • minReplicas: 允许的最小 pod 数量
    • maxReplicas: 允许的最大 pod 数量
    • scaleTargetRef: hpa 针对的具体资源, 一般而言是 deployment
    • metrics 指定增加 /减少 pod 数量的标准, 常见的以 CPU 使用率来判断是否需要伸缩. K8S 也支持其他指标, 包括用户自定义指标.

    以下案例就指定了 demo 的最小 pod 数量为 2, 最大为 8.

    spec: maxReplicas: 8 minReplicas: 2 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: demo targetCPUUtilizationPercentage: 250 

    targetCPUUtilizationPercentage 是旧版本 API 中的字段, 指定了所有 pod 的 CPU 平均使用率高于 250% 是进行扩容, 低于 250% 时进行缩容. 当以 CPU 使用率为扩容缩容的标准时, 我们需要注意对应数值是与 usage/request 比较, 而不是 usage/limit. 即分子是实际使用的 CPU 时间, 分母是在 deployment 中申请的 CPU 时间.

    HPA 计算所需 pod 数量的公式比较直观: desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )] 在上述案例中, desireMetricValue 为 250. 如果实际 CPU 使用率为 320, 当前 pod 数量为 4, 则 desiredReplicas = ceil[4 * (320/ 250)], 即 5.12 向上取整的结果 6.

    在实际计算中, HPA 会额外区分出 unreadyPod, missingPod 和 ignoredPod, 并根据初步计算结果选择忽视某些类型的 pod 指标再次计算, 突出一个稳. 具体逻辑可以参考 calcPlainMetricReplicas, 简单而言:

    • missingPod 指没有正确获取到对应 metric 的 pod.
    • ignoredPod 指已经或正在被删除的 pod, 和失败的 pod.
    • unreadyPod 包含多类情况:
      • 处于 Pending 状态的 Pod.
      • 启动不久且不是 Ready 状态的 Pod.
      • 启动不久且 CPU 信息采集时间和 Ready 时间过近.
      • 启动一段时间, 但是从未 Ready 过的 Pod.

    最后需要注意的是, 当开启了 HPA 后, 我们不应该再设置 deployment 的 spec.replicas. 否则, 当你发布时, K8S 会按照 spec.replicas 来计算诸如 rolling update 的步骤, 导致一些非预期的行为. 比如说, spec.replicas 为 6, HPA 的范围为 2 到 25, 当前实际 pod 数量为 20, 则一旦发布, 大概率会出现 14 个以上的 pod 同时被销毁, 导致服务用户请求的资源锐减, 业务出现抖动.

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5200 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 06:00 PVG 14:00 LAX 22:00 JFK 01:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86