Kubernetes - pod FailedScheduling由于“没有可用的节点匹配所有谓词:MatchInterPodAffinity(1)。”

时间:2018-04-26 06:47:30

标签: namespaces kubernetes kubernetes-pod

我正在尝试创建一个部署,创建两个节点IP与两个现有pod匹配的pod。为此,我将PodAffinity定义如下

affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - {{ .Values.albId }}
        topologyKey: "{{ .Values.topologyKey }}"
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - {{ .Values.name }}
        topologyKey: "{{ .Values.topologyKey }}"

由于我想要创建新pod的命名空间与我称之为exisitng pods的命名空间不同,因此PodAffinity失败。 Pod仍然处于暂挂状态,当我描述pod时,我得到以下错误

Events:
  FirstSeen LastSeen    Count   From            SubObjectPath   Type        Reason          Message
  --------- --------    -----   ----            -------------   --------    ------          -------
  28s       13s     6   default-scheduler           Warning           FailedScheduling  No nodes are available that match all of the predicates: MatchInterPodAffinity (1).

从k8s docs- https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#inter-pod-affinity-and-anti-affinity-alpha-feature发现,我应该在PodAffinity中定义名称空间并将其初始化为空列表,以便允许跨名称空间PodAffinity。

但我没有从网上获得任何关于如何将命名空间初始化为emplty列表的示例。

请提供帮助。

1 个答案:

答案 0 :(得分:0)

来自您关联的文档:

  

除了labelSelector和topologyKey之外,您还可以选择指定labelSelector应匹配的命名空间的列表命名空间(这与labelSelector和topologyKey的定义位于同一级别)。如果省略,则默认为显示亲缘关系/反关联性定义的窗格的命名空间。如果已定义但为空,则表示“所有名称空间”

以下是基于您的yaml的示例:

affinity:
podAffinity:
  requiredDuringSchedulingIgnoredDuringExecution:
  - labelSelector:
      matchExpressions:
      - key: app
        operator: In
        values:
        - {{ .Values.albId }}
    topologyKey: "{{ .Values.topologyKey }}"
    namespaces: [] # empty array
podAntiAffinity:
  requiredDuringSchedulingIgnoredDuringExecution:
  - labelSelector:
      matchExpressions:
      - key: app
        operator: In
        values:
        - {{ .Values.name }}
    topologyKey: "{{ .Values.topologyKey }}"
    namespaces: []