Requst:pod的限制可能在开始时设置为低,为了充分利用节点的资源,我们需要将限制设置得更高。但是,当节点的资源不足时,为了使节点仍然可以正常工作,我们需要将限制设置得较低。最好不要杀死该吊舱,因为它可能会影响群集。
背景:我目前是k8s和docker的初学者,我的导师给了我这个要求。这可以正常要求吗?还是解决此类问题的更好方法?感谢您的帮助! 我尝试过的所有事情:我试图通过编辑Cgroup来做,但是我只能在容器中执行此操作,因此可能容器应在特权模式下使用。
我希望针对此请求制定合理的计划。 谢谢...
答案 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杀死。 如果您确实需要“实时”保持容器运行并为它们管理分配的资源限制,那么Kubernetes在这种特殊情况下也许不是合适的解决方案。也许您应该考虑使用纯Docker或基于VM的解决方案。