【问题标题】:Redistribute pods after adding a node in Kubernetes在 Kubernetes 中添加节点后重新分配 pod
【发布时间】:2022-02-04 11:19:52
【问题描述】:

添加节点到 Kubernetes 集群后,Pod 应该如何处理?

我的意思是,理想情况下,我希望其中一些在新添加的节点上停止并启动。我是否必须手动选择一些停止并希望它们被安排在新添加的节点上重新启动?

我不关心亲和力,只关心半均匀分布。

也许有办法让 pod 的数量始终等于节点的数量?

举个例子:

我正在使用 juju 在 AWS 上配置小型 Kubernetes 集群。一名师傅和两名工人。这只是一个游乐场。

我的应用程序是 apache 服务 PHP 和静态文件。所以我有一个部署,一个 NodePort 类型的服务和一个使用 nginx-ingress-controller 的入口。

我关闭了其中一个工作实例,并在仍在工作的实例上重新创建了我的应用程序 pod。

然后我重新启动了实例,master 把它捡起来并在那里启动了 nginx 入口控制器。但是,当我尝试删除我的应用程序 pod 时,它们会在继续运行的实例上重新创建,而不是在重新启动的实例上。

不确定它是否重要,但我没有任何 DNS 设置。刚刚将其中一个实例的 IP 添加到 /etc/hosts 中,其中包含来自我的入口的主机值。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    descheduler,kuberenets 孵化器项目可能会有所帮助。以下是介绍

    由于 Kubernetes 集群非常动态,并且它们的状态会随着时间而变化,因此出于各种原因可能需要将已经运行的 pod 移动到其他一些节点:

    • 某些节点使用不足或过度使用。
    • 原来的调度决策不再适用,因为节点中添加或删除了污点或标签,不再满足 Pod/节点关联性要求。
    • 一些节点出现故障,它们的 pod 移动到其他节点。
    • 新节点被添加到集群中。

    【讨论】:

      【解决方案2】:

      当您添加新节点时,Kubernetes 中会自动重新分配。您可以通过删除单个 pod 并制定基于主机的反关联策略来强制重新分配它们。否则 Kubernetes 将更喜欢使用新节点进行调度,从而随着时间的推移实现重新分配。

      您手动触发重新分配的原因是什么?

      【讨论】:

      • >您手动触发重新分配的原因是什么?我尝试杀死 pod,但它们没有出现在新节点上。所以我开始怀疑他们是否应该这样做。如果我可能不得不以某种方式轻推他们。
      • @clorz 如果没有关于您的设置的大量信息,很难判断到底发生了什么。例如如果所有节点都相等,kubernetes 将更喜欢已经包含图像的节点。您能否提供更多信息,例如 relicaset 的 pod 部分、多少个实例、它在服务中使用等?
      • 添加了一个例子
      • 我有同样的要求,即在节点上重新分配 pod。当您按照此处的过程在多个节点上升级 k8s 时:kubernetes.io/docs/tasks/administer-cluster/kubeadm-upgrade-1-9,最后,您有一个节点,除了 daemonsets 之外没有任何 Pod 运行
      猜你喜欢
      • 1970-01-01
      • 2020-07-05
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 2022-01-06
      相关资源
      最近更新 更多