2

Kubernetes 新手。我可以使用 kubectl scale --replicas=N 并在不同的节点上启动 pod 吗?

4

2 回答 2

3

默认情况下,调度程序会尝试跨节点传播 pod,这样您就不会在同一节点上拥有多个相同类型的 pod。因此,如果您只是针对尽力而为的 pod 传播,则没有什么特别的要求。

如果你想表达 pod 不能在已经有该类型 pod 的节点上运行的要求,你可以使用pod anti-affinity,它目前是一个 Alpha 特性。

如果您想确保所有节点(或与某个选择器匹配的所有节点)上都有该 pod,您可以使用DaemonSet

于 2016-11-16T22:11:10.027 回答
2

扩展部署(或 RC)告诉控制器管理器创建更多的 pod,然后新的 pod 会受到调度。K8S 调度程序将尝试找到最合理的位置来安排您的 pod。这并不能保证 pod 将在不同的节点上启动,但如果您拥有所需的资源,这将是一个相当可能的场景。不幸的是,这也意味着如果所有 pod 都可以放在一个节点上,那么在某些情况下调度程序实际上可能会这样做(即,由于某种原因,所有其他节点都处于不可调度状态)。如果发生这种情况,当条件发生变化时,Pod 将不会重新安排。

为了保证 pod 不会在同一个节点上共存,您有两种选择:

  • legacy hack:在你的 pod 模板中定义一个 hostPort。由于给定的主机端口是每个节点只能分配一次的资源,因此您的 pod 将永远不会超过每个节点一次
  • alpha 功能:您可以查看 Pod AntiAffinity,很早,还没有真正经过实战证明

第一个有一个缺点 -每个节点永远不能有超过一个这种类型的 pod,所以它就是。影响滚动部署并限制您的扩展能力(您永远不会拥有比节点数量更多的活动 pod)

于 2016-11-16T22:16:09.270 回答