k8s CPU limit 和 throttling 的迷思 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nanmu42
V2EX    Kubernetes

k8s CPU limit 和 throttling 的迷思

  •  2
     
  •   nanmu42 2021-11-14 11:29:54 +08:00 2874 次点击
    这是一个创建于 1427 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位好。

    很长一段时间,我一直在疑惑 k8s CPU limit 该如何设置,太小的值会给程序带来额外的、无意义的延迟( CPU throttling ),太大的值会带来过大的爆炸半径,削弱集群的整体稳定性。更让人纠结的是内核版本低于 4.18 的 Linux 还有个 bug 会造成不必要的 CPU 限流。

    最近我算是搞明白了这个问题,记录了下来,希望能帮到与我一样为 CPU limit 和 throttling 纠结过的朋友。

    欢迎讨论交流,谢谢。

    8 条回复    2021-11-16 12:09:43 +08:00
    raynix
        1
    raynix  
       2021-11-14 14:53:22 +08:00   1
    点赞!
    documentzhangx66
        2
    documentzhangx66  
       2021-11-15 02:35:30 +08:00
    两种常用思路:

    1.追求稳定而采用固定值。比如路由器、交换机,通常是设置一个固定值。然后使用过大过小的数据负载,来测试性能。便宜的设备,只会在通用数据的情况下,保证一个不差的性能;旗舰级的设备,会使用砸钱堆砌性能过剩的部件,来达到长时间稳定的高性能。

    2.如果是业务系统,需要保证长期稳定,一般是不会太考虑性能,方案也是根据经验设置一个固定值。

    但如果想获得更大收益,业界通用的做法是,建立一个监督者,根据业务特点与工作负载,制定一些策略,来动态调节这些值,有点像 TCP 的滑动窗口。
    killerirving
        3
    killerirving  
       2021-11-15 09:58:46 +08:00   1
    赞 写的不错
    xabcstack
        4
    xabcstack  
       2021-11-15 16:34:05 +08:00   1
    k8s cpu 单位就是时间单位
    nanmu42
        5
    nanmu42  
    OP
       2021-11-15 23:37:23 +08:00 via iPhone
    @xabcstack 感觉好像不是? m 的意思应该是千分之一,就像毫米毫秒里的 m 那样?
    xabcstack
        6
    xabcstack  
       2021-11-16 09:57:44 +08:00
    1000 ms
    nanmu42
        7
    nanmu42  
    OP
       2021-11-16 12:06:07 +08:00
    @xabcstack 恐怕不对,文档里是这么说的:

    > For CPU resource units, the expression 0.1 is equivalent to the expression 100m, which can be read as "one hundred millicpu". Some people say "one hundred millicores", and this is understood to mean the same thing.

    https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-cpu

    另外 1000m = 1 CPU ,对应的是默认配置下 100ms 的 CPU 时间:

    > The spec.containers[].resources.limits.cpu is converted to its millicore value and multiplied by 100.

    https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#how-pods-with-resource-limits-are-run
    nanmu42
        8
    nanmu42  
    OP
       2021-11-16 12:09:43 +08:00
    @xabcstack 对于 CPU limit 是有个换算关系的,但是并不是 1mCPU = 1msCPU 时间,是 1000mCPU = 100ms CPU 时间 /100ms
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     976 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 18:52 PVG 02:52 LAX 11:52 JFK 14:52
    Do have faith in what you're doing.
    ubao 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