我在一个包含1个主节点和4个工作节点(2-32 4GB和2-4 4GB机器)的集群上运行部署。我想在4 4GB的机器上运行最多10个pods,在32 4GB的机器上运行50个pods。
有没有办法将不同数量的pod分配给Kubernetes中的不同节点进行相同的部署?
发布于 2021-02-03 18:21:49
我想在4 4GB的机器上运行最多10个pods,在32 4GB的机器上运行50个pods。
这可以通过configuring kubelet来限制节点上的最大pod计数:
// maxPods is the number of pods that can run on this Kubelet.
MaxPods int32 `json:"maxPods,omitempty"`可以在here上找到Github。
有没有办法将不同数量的pod分配给Kubernetes中的不同节点进行相同的部署?
将此添加到您的请求中会使其无法实现。在这一点上,Kubernetes中没有这样的原生机制来满足这一点。这或多或少符合Kubernetes的工作方式及其原则的精神。基本上,你调度你的应用程序,让调度器决定它应该去哪里,除非有非常具体的资源需求,比如GPU。这可以通过标签、亲和力等来实现。
如果您查看Kubernetes-API,您会注意到没有这样的字段可以使您的请求成为可能。但是,API功能可以通过自定义资源进行扩展,这个问题可以通过创建自己的调度程序来解决。但这并不是解决这个问题的简单方法。
您可能还希望设置适当的内存请求。更高的请求将告诉调度器将更多的pod部署到具有更多内存资源的节点。它不是理想的,但它是某种东西。
发布于 2021-02-03 15:33:52
一般来说,调度是基于轮询、最少使用等算法来完成的。
我们可能有通过选择器添加节点亲和性的独立性,但这甚至不能解决计数问题。
也许你必须在工作节点上手动重置这个东西。
比如说-
部署完成后,您执行kubectl top nodes以获取可用的空间。
kubectl get po -o wide将为您提供pods所采用的节点。
现在,为了强制Pod在特定节点中生成,假设是32 4GB的节点,那么可以通过执行以下命令暂时将4 4GB的节点标记为"Not ready“
Kubectl cordon {node_name}现在删除那些在4 4GB机器上运行的pod,而您希望这些pod在32 4GB机器上运行。在杀死它们之后,它们将自动在任何32 of的节点中生成
然后你就可以执行
Kubectl uncordon {node_name}再次将节点标记为“就绪”。
这是一个有点复杂的东西,也需要大量的计算。
https://stackoverflow.com/questions/66022479
复制相似问题