kubernetes - 在 Kubernetes 中添加节点后重新分配 pod

标签 kubernetes

Kubernetes集群添加节点后,pods应该怎么处理?

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

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

也许有一种方法可以让 pod 的数量始终等于节点的数量?

举个例子:

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

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

我已经关闭了其中一个工作实例,并且我的应用程序 Pod 在仍然可以工作的实例上重新创建。

然后我重新启动了实例,主人拿起它并在那里启动了 nginx 入口 Controller 。但是当我尝试删除我的应用程序 pod 时,它们是在继续运行的实例上重新创建的,而不是在重新启动的实例上。

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

最佳答案

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

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

  • 一些节点使用不足或过度使用。
  • 最初的调度决策不再成立,因为污点或标签被添加到节点或从节点删除,不再满足 pod/节点亲和性要求。
  • 一些节点出现故障,它们的 pod 移动到其他节点。
  • 新节点被添加到集群中。

  • [1] https://github.com/kubernetes-incubator/descheduler

    关于kubernetes - 在 Kubernetes 中添加节点后重新分配 pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44041965/

    相关文章:

    mysql - 为什么我在这个 kubernetes 示例中遇到 CrashLoopBackOff?

    django - Docker/Kubernetes + Gunicorn/Celery - 多个 worker 与副本?

    kubernetes - 如何从 K8s API 获取 Kubernetes 集群名称

    amazon-web-services - 如何自定义由将 AWS NLB 用于 TCP 服务的 Kubernetes LoadBalancer 类型服务创建的安全组入口规则

    Kubernetes EKS入口和TLS

    docker - Kubernetes 中 Docker 容器中的内存映射文件是否与 Linux 中的常规进程一样工作?

    kubernetes - 如何根据 celery 任务队列中的任务数自动扩展 Kubernetes Pods?

    kubernetes - 1.9.6-gke.1中的GKE导出网络到GCE实例

    kubernetes - Kubeadm和在主节点上调度Pod的风险(Pod始终处于等待状态)

    Kubernetes Pod DNS 解析