我通过 Helm 安装了 traefik。然后我用
kubectl scale --replicas=2 deployment traefik -n traefik
现在我有两个 Pod 在同一个节点上运行,尽管第二个节点已启动并正常运行。我该如何告诉它在两个节点上进行扩展?
答案1
如果新 Pod 上的标签选择器与当前 Pod 上的标签匹配,Pod 反亲和性可以防止调度程序将新 Pod 定位在与具有相同标签的 Pod 相同的节点上。
以下例子演示具有匹配标签和标签选择器的 pod 的 pod 反亲和性。
答案2
我理解为什么默认情况下会发生这种情况,因为在 k8s 设计的规模下,总是会有如此多的节点和如此多的 pod 副本,因此这种情况不太可能发生,而对于我们许多在较小集群上的人来说,这非常烦人。下面显示了一个 pod 反亲和性示例。请注意,当我们部署时,匹配表达式中的值是由 Octopus Deploy 自动注入的,您需要自己注入合适的标签。
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: Octopus.Deployment.Id
operator: In
values:
- "deployments-38119"
topologyKey: kubernetes.io/hostname
weight: 100
编辑:我还注意到您正在部署代理,在这种情况下您可能需要考虑另一种部署类型,例如 DaemonSet,它可确保每个节点上运行 1 个 pod。