如何在不杀死原始Pod的情况下改变k8s的Pod倾斜度?

时间:2019-07-20 01:06:35

标签: docker go kubernetes

Requst:pod的限制可能在开始时设置为低,为了充分利用节点的资源,我们需要将限制设置得更高。但是,当节点的资源不足时,为了使节点仍然可以正常工作,我们需要将限制设置得较低。最好不要杀死该吊舱,因为它可能会影响群集。

背景:我目前是k8s和docker的初学者,我的导师给了我这个要求。这可以正常要求吗?还是解决此类问题的更好方法?感谢您的帮助! 我尝试过的所有事情:我试图通过编辑Cgroup来做,但是我只能在容器中执行此操作,因此可能容器应在特权模式下使用。

我希望针对此请求制定合理的计划。 谢谢...

3 个答案:

答案 0 :(得分:0)

我认为这是不可能的,从2015年开始,在kubernetes github(https://github.com/kubernetes/kubernetes/issues/9043)上跟踪此类问题就有一个古老的问题,而且它是开放的。

此外,在使用kubernetes时,您不应该依赖未重新创建的pod。应用程序应该能够实现无状态状态,以至于如果它在进程中死亡,则可以处理该故障,并在再次启动后从头开始启动。

我了解尝试最大程度地优化资源使用量的想法,但您也应该担心流程的可靠性。

我认为您应该检查Kubernetes的Vertical Pod Autoscaler,因为它会根据其用途自动使Pod的资源自动运行。也许可以选择:https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler

答案 1 :(得分:0)

您必须找到在容器中运行的容器ID,并在下面运行以下命令以增加资源。

docker update --cpu-shares NewValue -m NewValue DockerContainerID

答案 2 :(得分:0)

提示是您要在不杀死豆荚的情况下更改限制

这不是Kubernetes的工作方式,正如Markus W Mahlberg在上面的评论中解释的那样。在Kubernetes中,没有方便的管理程序提供的“热插拔CPU /内存”或“实时迁移”功能。 Kubernetes将Pod视为短暂的实例,并不关心保持它们的运行。无论您需要更改应用程序的资源限制,更改应用程序配置,安装应用程序更新还是修复行为异常的应用程序,“杀死并重新创建” 方法都将应用于容器。

不幸的是,此处建议的解决方案不适用于您:

  • 增加容器内正在运行的容器的限制(docker update命令)将导致违反容器限制并被Kubernetes杀死。
  • 垂直Pod Autoscaler是Kubernetes项目的一部分,也依赖于“杀死并重新创建”方法。

如果您确实需要“实时”保持容器运行并为它们管理分配的资源限制,那么Kubernetes在这种特殊情况下也许不是合适的解决方案。也许您应该考虑使用纯Docker或基于VM的解决方案。