Kubernetes EKS 部署将软节点亲和力设置为拆分 pods 每个节点组 50/50
Kubernetes EKS deployment set soft node affinity to split pods 50/50 per nodegroup
我有一个 EKS cluster
,有两个 nodegroups
,每个都在不同的 AZ
中。一个 deployment
Deployment1
在 2 namespaces
上 运行 用于冗余,每个 namespace
一个副本,每个 运行 在单独的 [=18] =]/nodegroup
。还有另一个 deployment
Deployment2
没有任何 node affinity
设置,K8s 管理 pods 的调度位置。
deployments
都很大,有很多 pods。我为每个节点组提供了一个包含 250 个 IP 的子网。
问题是,虽然 Deployment1
本身很好,并且每个 AZ/Nodegroup
几乎平均分配,但 Deployment2
倾向于将大多数 pods 安排在一个nodegroups
并在没有更多 IP 可用时结束。这是 Deployment1
的一个问题,因为其中一个 namespace
与那个 nodegroup
相关联,如果负载发生变化,则无法在那里安排新的 pods。
我能否以某种方式平衡 Deployment2
,使其具有 'soft affinity',每个节点组将其拆分为 50/50,但如果需要,是否可以在另一个节点组中安排 pods?
如果您使用的是 Kubernetes 1.19 或更高版本,则可以使用 topologySpreadConstraints
,将其添加到 pod 模板:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
foo: bar
其中 maxSkew
定义如何不均匀地安排 pods,topologyKey
是节点标签的键,labelSelector
匹配您部署的标签。参见 docs
如果您使用的是较旧的 Kubernetes 版本,您可以查看 pod 反亲和性。
我有一个 EKS cluster
,有两个 nodegroups
,每个都在不同的 AZ
中。一个 deployment
Deployment1
在 2 namespaces
上 运行 用于冗余,每个 namespace
一个副本,每个 运行 在单独的 [=18] =]/nodegroup
。还有另一个 deployment
Deployment2
没有任何 node affinity
设置,K8s 管理 pods 的调度位置。
deployments
都很大,有很多 pods。我为每个节点组提供了一个包含 250 个 IP 的子网。
问题是,虽然 Deployment1
本身很好,并且每个 AZ/Nodegroup
几乎平均分配,但 Deployment2
倾向于将大多数 pods 安排在一个nodegroups
并在没有更多 IP 可用时结束。这是 Deployment1
的一个问题,因为其中一个 namespace
与那个 nodegroup
相关联,如果负载发生变化,则无法在那里安排新的 pods。
我能否以某种方式平衡 Deployment2
,使其具有 'soft affinity',每个节点组将其拆分为 50/50,但如果需要,是否可以在另一个节点组中安排 pods?
如果您使用的是 Kubernetes 1.19 或更高版本,则可以使用 topologySpreadConstraints
,将其添加到 pod 模板:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
foo: bar
其中 maxSkew
定义如何不均匀地安排 pods,topologyKey
是节点标签的键,labelSelector
匹配您部署的标签。参见 docs
如果您使用的是较旧的 Kubernetes 版本,您可以查看 pod 反亲和性。