Kubernetes PodAfinity无法部署pods



所以我有这个问题,并尝试实现podAffinity来解决它。

我有3个节点,想在同一个节点上部署2个pod。在DeploymentYAML文件中,我在metadata.labels下有service:git,以下是关联设置:

affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: service
operator: In
values:
- git
topologyKey: kubernetes.io/hostname

但是pod未能部署,我得到了以下错误:

0/3 nodes are available: 3 node(s) didn't match pod affinity rules, 3 node(s) didn't match pod affinity/anti-affinity.

我的配置有问题吗?

如果不是,我想可能是因为当部署第一个pod时,系统会试图找到一个包含标签为service: git的pod的节点,然后失败(因为它是第一个(,另一个pod也会因为同样的原因失败。这是正确的吗?

但是,如何解决问题(不采取变通办法(?

  • 您正在使用"requiredDuringSchedulelingIgnoredDuringExecution:";所以它将看起来是一个";正在运行(已运行(";具有标签";服务:git"而且你似乎还没有任何带有这个标签的吊舱。因此下面的a是一个快速的解决方法,其中将创建带有标签"的测试吊舱;服务:git"。以便podAfinity规则将找到一个目标节点(该节点将运行该测试pod(

kubectl run testpod --image=busybox --labels="service=git" -- sleep infinite

  • 一旦上方吊舱上升。。您的部署中的所有pod也应该被创建。如果不删除部署并重新应用。

  • 如果你需要一个优雅的解决方案,那么你可以考虑使用";preferredDuringSchedulelingIgnoredDuringExecution;而不是";requiredDuringSchedulelingIgnoredDuringExecution;

2022年9月更新:

";requiredDuringSchedulelingIgnoredDuringExecution:";当它是部署的第一个pod时,它实际上被忽略了,并且pod实际上已经被调度了——否则,如果没有pod,那么即使是第一个pod也无法部署。第二个pod会明显地看到第一个pod运行并满足规则等等。这已经通过测试得到了证实。

最新更新