podAffinity and podAntiAffinity's matchLabels, are a little confusing

1,851 views
Skip to first unread message

Kenneth Massada

unread,
Apr 28, 2017, 6:26:02 PM4/28/17
to Kubernetes user discussion and Q&A, jungh...@snapchat.com
Could someone help clarify difference between empty and null? https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ says An empty label selector (that is, one with zero requirements) selects every object in the collection. A null label selector (which is only possible for optional selector fields) selects no objects consider this: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app: nginx topologyKey: kubernetes.io/hostname podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: null topologyKey: kubernetes.io/hostname The current behavior is then schedule pod on all nodes that have a pod app:nginx BUT do not schedule pod on "every" of the nodes. or schedule it none nodes and node that has a pod app:nginx consider affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app: nginx topologyKey: kubernetes.io/hostname podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - topologyKey: kubernetes.io/hostname The current behavior is then schedule pod on all nodes that have a pod app:nginx BUT do not schedule it on "none" of the nodes. schedule it on all nodes and node that has a pod app:nginx {}/null act as every Empty act as all so according to the YAML construct "{}" is also null.
however, {} this looks more like empty? so is empty omitting?

I guess the use case here is

PodAffinity: app:nginx AND podAntiAffinity: NONE

Kenneth

David Oppenheimer

unread,
Apr 28, 2017, 6:44:34 PM4/28/17
to Kubernetes user discussion and Q&A, jungh...@snapchat.com
It's not clear to me if you are asking about YAML/API server behavior, or the semantics of label selectors, or the semantics of pod affinity/anti-affinity.



--
You received this message because you are subscribed to the Google Groups "Kubernetes user discussion and Q&A" group.
To unsubscribe from this group and stop receiving emails from it, send an email to kubernetes-users+unsubscribe@googlegroups.com.
To post to this group, send email to kubernetes-users@googlegroups.com.
Visit this group at https://groups.google.com/group/kubernetes-users.
For more options, visit https://groups.google.com/d/optout.

Kenneth Massada

unread,
Apr 28, 2017, 6:58:07 PM4/28/17
to Kubernetes user discussion and Q&A, jungh...@snapchat.com
The semantics of label selectors, or the semantics of pod affinity/anti-affinity, they both are very related.

What does "empty" mean in  pod affinity/anti-affinity labelselectors, what does null/{} mean in  pod affinity/anti-affinity, are they the same? 

I can use this to colocate a pod with another. what if the plan was to make sure they were not colocated? 
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod3
spec:
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchLabels:
            app: nginx
        topologyKey: kubernetes.io/hostname
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - topologyKey: kubernetes.io/hostname
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80



On Friday, April 28, 2017 at 3:44:34 PM UTC-7, David Oppenheimer wrote:
It's not clear to me if you are asking about YAML/API server behavior, or the semantics of label selectors, or the semantics of pod affinity/anti-affinity.


On Fri, Apr 28, 2017 at 3:26 PM, 'Kenneth Massada' via Kubernetes user discussion and Q&A <kubernet...@googlegroups.com> wrote:
Could someone help clarify difference between empty and null? https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ says An empty label selector (that is, one with zero requirements) selects every object in the collection. A null label selector (which is only possible for optional selector fields) selects no objects consider this: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app: nginx topologyKey: kubernetes.io/hostname podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: null topologyKey: kubernetes.io/hostname The current behavior is then schedule pod on all nodes that have a pod app:nginx BUT do not schedule pod on "every" of the nodes. or schedule it none nodes and node that has a pod app:nginx consider affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app: nginx topologyKey: kubernetes.io/hostname podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - topologyKey: kubernetes.io/hostname The current behavior is then schedule pod on all nodes that have a pod app:nginx BUT do not schedule it on "none" of the nodes. schedule it on all nodes and node that has a pod app:nginx {}/null act as every Empty act as all so according to the YAML construct "{}" is also null.
however, {} this looks more like empty? so is empty omitting?

I guess the use case here is

PodAffinity: app:nginx AND podAntiAffinity: NONE

Kenneth

--
You received this message because you are subscribed to the Google Groups "Kubernetes user discussion and Q&A" group.
To unsubscribe from this group and stop receiving emails from it, send an email to kubernetes-use...@googlegroups.com.
To post to this group, send email to kubernet...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages