在Kubernetes中,当另一个使用内核时,Go容器将使用所有内核

问题描述 投票:0回答:2

场景:在16核节点上,Go服务/容器在带有另一个容器的容器中运行,其中另一个容器分配了4核,并且go容器设置为使用GOMAXPROCS

在使用goroutine的请求中,Go程序将利用它可用的所有CPU。我认为这取决于GOMAXPROCS,但不确定是否仅看到Pod启动时使用的1核全部在计算机上。

理想情况下,我希望CPU密集型请求使用所有可用的CPU,但是很难衡量运行时(GKE)实际发生的情况。

kube top显示空闲时的预期内容:

POD        NAME            CPU(cores)   MEMORY(bytes)
pod-go-py  go-service      1m           862Mi
pod-go-py  py-service      4m           489Mi

fmt.Println(runtime.NumCPU())显示16个可用内核。因此,我可以相信Go程序会在请求中充分利用它们吗?我还可以想象,在节点上扩展Pod时,Ill必须注意节流。

go kubernetes google-kubernetes-engine cpu-usage
2个回答
0
投票

答案是


0
投票

容器将看到计算机上的所有内核。 Kubernetes的限制是设置cgroup,它告诉内核容器可以消耗多少CPU。这意味着,尽管Go将看到所有内核,但是当他尝试超过限制时,内核将对其进行限制。这实际上是一件坏事。您希望Go知道cgroup并适当扩展GOMAXPROCS。为此,您可以使用this

© www.soinside.com 2019 - 2024. All rights reserved.