如何减少kubernetes系统资源的CPU限制?

我希望将我的GKE集群中的核心数量保持在3以下。如果K8s复制控制器和吊舱的CPU限制从100米减少到最多50米,这变得更加可行。 否则,K8s吊舱单独占用一个核心的70%。

我决定不增加节点的CPU功率。 这在我看来在概念上是错误的,因为CPU限制被定义为在核心中测量。 相反,我做了以下事情:

  • 用“50m”作为默认CPU限制的版本替换限制范围/限制(不是必需的,但在我看来更清洁)
  • 修补kube-system命名空间中的所有复制控制器,以便为所有容器使用50m
  • 删除他们的豆荚
  • 将kube-system名称空间中的所有非rc容器替换为所有容器使用50m的版本
  • 这是很多工作,可能很脆弱。 即将到来的K8版本的任何进一步变化,或者GKE配置的变化,都可能会使其失效。

    那么,有没有更好的方法?


    更改默认名称空间的LimitRange spec.limits.defaultRequest.cpu应该是更改新Pod的默认合法解决方案。 请注意,LimitRange对象是命名空间的,所以如果你使用额外的命名空间,你可能想要考虑一个合理的默认值是什么。

    正如你指出的那样,这不会影响kube-system命名空间中的现有对象或对象。

    kube-system命名空间中的对象大都是根据经验确定的 - 根据观察值。 改变这些可能会产生不利影响,但如果您的集群非常小,则可能不会。

    我们有一个公开的问题(https://github.com/kubernetes/kubernetes/issues/13048)根据总群集大小调整kube-system请求,但这还没有实现。 我们还有一个未解决的问题(https://github.com/kubernetes/kubernetes/issues/13695),可能会对某些kube系统资源使用较低的QoS,但同样尚未实施。

    其中,我认为#13048是实现你所要求的正确方法。 就目前而言,答案是“有没有更好的办法”,可悲的是“不”。 我们选择了中等规模集群的默认设置 - 对于非常小的集群,您可能需要做你正在做的事情。


    顺便提一下,如果您想在Google Cloud GCE上试用此功能。 如果您尝试更改像kube-dns这样的核心服务的CPU限制,您将会得到这样的错误。

    spec:禁止:pod更新可能不会更改spec.containers[*].imagespec.initContainers[*].imagespec.activeDeadlineSecondsspec.tolerations以外的spec.tolerations (仅添加现有spec.tolerations

    尝试Kubernetes 1.8.7和1.9.4。

    所以此时你需要部署的最小节点是n1-standard-1。 此外,一旦你有几个豆荚和舵,你的CPU的8%几乎被Kubernetes自己一直吃掉。 即使你没有运行任何重要的负载。 我认为有很多轮询正在进行,并确保群集响应,他们不断刷新一些统计数据。

    链接地址: http://www.djcxy.com/p/30171.html

    上一篇: How to reduce CPU limits of kubernetes system resources?

    下一篇: Studio: "Gradle is running. Proceed with Project closing?"