如何为 Kubernetes 中的不同节点分配不同数量的 Pod 以进行相同部署?

时间:2021-02-03 06:42:57

标签: kubernetes kubectl kubernetes-pod

我正在 1 个主节点和 4 个工作节点(2-32GB 和 2-4GB 机器)的集群上运行部署。我想在 4GB 机器上最多运行 10 个 Pod,在 32GB 机器上最多运行 50 个 Pod。

有没有办法将不同数量的 Pod 分配给 Kubernetes 中的不同节点以进行相同的部署?

2 个答案:

答案 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} 再次将节点标记为“就绪”。

这有点复杂,也需要大量计算。

相关问题