我正在 1 个主节点和 4 个工作节点(2-32GB 和 2-4GB 机器)的集群上运行部署。我想在 4GB 机器上最多运行 10 个 Pod,在 32GB 机器上最多运行 50 个 Pod。
有没有办法将不同数量的 Pod 分配给 Kubernetes 中的不同节点以进行相同的部署?
答案 0 :(得分:2)
我想在 4GB 的机器上最多运行 10 个 Pod,在 32GB 的机器上运行 50 个 Pod 机器。
这可以通过 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 部署到具有更多内存资源的节点中。这并不理想,但确实如此。
答案 1 :(得分:0)
一般来说,调度是基于循环、最少使用等算法完成的。
而且我们可能有通过选择器添加节点关联的独立性,但这甚至无法解决计数问题。
也许你必须沿着工作节点手动重置这个东西。
说 -
部署完成后,您执行了 kubectl top nodes
以获得可用空间。
和 kubectl get po -o wide
将为您提供 pod 所占用的节点。
现在要强制 Pod 在特定节点中生成,假设有 32GB 的节点,那么您可以通过执行以下命令暂时将 4GB 节点标记为“未准备好”
Kubectl cordon {node_name}
现在杀死那些在 4GB 机器上运行的 pod,你希望它们在 32GB 机器上运行。杀死它们后,它们将自动生成在任何 32GB 节点中
然后你就可以执行
Kubectl uncordon {node_name}
再次将节点标记为“就绪”。
这有点复杂,也需要大量计算。