V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nanmu42
V2EX  ›  Kubernetes

k8s CPU limit 和 throttling 的迷思

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

    各位好。

    很长一段时间,我一直在疑惑 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   ·   实用小工具   ·   3625 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:18 · PVG 12:18 · LAX 20:18 · JFK 23:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.