首页 > 解决方案 > Kubernetes PodAffinity 无法部署 pod

问题描述

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

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

  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 时,系统会尝试找到一个包含带有标签的 pod 的节点service: git并失败(因为它是第一个),而另一个 pod 也因为同样的原因。这个对吗?

但是然后如何解决问题(不诉诸变通办法)?

标签: kuberneteskubernetes-pod

解决方案


  • 您正在使用“requiredDuringSchedulingIgnoredDuringExecution:”,因此它将寻找一个带有标签“服务:git”的“正在运行(已经)”的吊舱,并且您似乎还没有任何带有该标签的吊舱。因此,遵循 a 是一种快速解决方法,其中将创建一个带有标签 "service: git" 的测试 pod。这样 podAffinity 规则将找到一个目标节点(这将是该 testpod 将运行的节点)

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

  • 一旦上面的 pod 是 UP .. 部署中的所有 pod 也应该被创建。如果没有删除部署并重新应用它。

  • 如果您需要一个优雅的解决方案,那么您可以考虑使用“preferredDuringSchedulingIgnoredDuringExecution”而不是“requiredDuringSchedulingIgnoredDuringExecution”


推荐阅读