kubernetes - 如何在 Kubernetes 中跨所有节点均匀部署 Pod?

标签 kubernetes kube-scheduler

我有几个 Kubernetes 集群,每个集群有不同的节点数。我的配置部署有“副本:#nodes”。没有为调度该 pod 设置特定的配置,但在部署后,我看到节点上 pod 分布方面的奇怪行为。

例子:

对于 30 个节点的集群(30 个副本),所有 30 个 pod 副本仅分布在 25 个节点上,其他 5 个节点在集群中处于理想状态。
许多其他不同集群的类似情况和这个计数在每次新/重新部署中都不同。

题:

我想在所有节点上分发我的 pod 副本。如果我设置了“replicas: #nodes”,那么我应该在每个节点中有一个 pod 副本。如果我将副本数量增加/加倍,那么它应该均匀分布。
Kubernetes 的部署 yaml 中是否有任何特定配置?

使用节点 AntiAffinity 进行配置,但该节点的行为仍与上述相同。尝试使用“requiredDuringSchedulingIgnoredDuringExecution”,并且确实在每个节点中部署了一个 pod,但是如果我增加副本或任何节点在部署过程中出现故障,那么整个部署就会失败。

metadata:
  labels:
    app: test1
spec:
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - test1
          topologyKey: kubernetes.io/hostname

最佳答案

如果您需要每个节点部署 1 个 pod,您应该使用 daemonSet而不是副本集。或者,如果每个节点需要 1 个以上的 pod 并且仍然希望 pod 分布基本均匀,则可以使用 pod anti-affinity,正如我讨论的 in this post

关于kubernetes - 如何在 Kubernetes 中跨所有节点均匀部署 Pod?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59434797/

相关文章:

memory - 我的机器有足够的内存,但是kubernetes无法调度pod并指示内存不足

kubernetes - 领导者选举失败,租约无法自动续签

docker - 如何查看kubernetes的入口端点?

docker - 是否可以在 Kubernetes 中启动自签名 Docker 注册表,并让其他服务使用它作为注册表来获取其镜像?

kubernetes - 在 pod 生命周期启动后 Hook 中使用 curl 命令

kubernetes - k3s 在哪里存储 pod?

kubernetes - kong 入口 Controller 对入口资源没有影响

kubernetes - 如何自定义 kube-scheduler 在 AKS 上的行为?