我正在尝试创建一个部署,创建两个节点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列表的示例。
请提供帮助。
答案 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: []