Difference between revisions of "Kubernetes pod affinity and anti affinity"
Jump to navigation
Jump to search
(19 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity | ||
− | * Elasticsearch [[PodAntiAffinity]] official example | + | * Elasticsearch <code>[[PodAntiAffinity]]</code> official example |
0/11 nodes are available: 1 [[Insufficient cpu]], 1 Too many pods, 10 nodes(s) didn't match Pod's node [[affinity]]/selector | 0/11 nodes are available: 1 [[Insufficient cpu]], 1 Too many pods, 10 nodes(s) didn't match Pod's node [[affinity]]/selector | ||
− | 0/2 nodes are available: 1 Too many pods, 1 nodes(s) didn't match Pod's node [[affinity]]/selector | + | 0/2 nodes are available: 1 Too many pods, 1 nodes(s) [[didn't match Pod's node affinity/selector]] |
+ | 0/24 nodes are available: 0/24 [[nodes are available]]: 1 node(s) [[didn't match pod anti-affinity rules]], 1 node(s) [[were unschedulable]], 2 node(s) [[had taint]] {[[node.kubernetes.io/not-ready]]}, that the pod did not tolerate, 20 node(s) [[didn't match Pod's node affinity/selector]]. | ||
+ | |||
+ | Too many pods, 1 nodes(s) [[didn't match Pod's node affinity/selector]] | ||
+ | |||
== Official examples == | == Official examples == | ||
+ | https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/pods/pod-with-node-affinity.yaml | ||
[[apiVersion]]: v1 | [[apiVersion]]: v1 | ||
− | |||
[[kind:]] [[Pod]] | [[kind:]] [[Pod]] | ||
− | |||
[[metadata]]: | [[metadata]]: | ||
− | |||
name: [[with-node-affinity]] | name: [[with-node-affinity]] | ||
− | |||
spec: | spec: | ||
− | + | [[affinity:]] | |
− | [[affinity]] | ||
− | |||
[[nodeAffinity]]: | [[nodeAffinity]]: | ||
− | |||
requiredDuringSchedulingIgnoredDuringExecution: | requiredDuringSchedulingIgnoredDuringExecution: | ||
− | |||
[[nodeSelectorTerms]]: | [[nodeSelectorTerms]]: | ||
− | |||
- [[matchExpressions]]: | - [[matchExpressions]]: | ||
− | |||
- [[key:]] [[topology.kubernetes.io/zone]] | - [[key:]] [[topology.kubernetes.io/zone]] | ||
− | |||
operator: In | operator: In | ||
− | |||
values: | values: | ||
− | |||
- antarctica-east1 | - antarctica-east1 | ||
− | |||
- antarctica-west1 | - antarctica-west1 | ||
− | |||
preferredDuringSchedulingIgnoredDuringExecution: | preferredDuringSchedulingIgnoredDuringExecution: | ||
− | |||
- weight: 1 | - weight: 1 | ||
− | |||
[[preference:]] | [[preference:]] | ||
− | |||
[[matchExpressions]]: | [[matchExpressions]]: | ||
− | |||
- key: another-node-label-key | - key: another-node-label-key | ||
− | |||
operator: In | operator: In | ||
− | |||
[[values]]: | [[values]]: | ||
− | |||
- another-node-label-value | - another-node-label-value | ||
− | |||
[[containers]]: | [[containers]]: | ||
− | |||
- name: with-node-affinity | - name: with-node-affinity | ||
− | |||
image: registry.k8s.io/pause:2.0 | image: registry.k8s.io/pause:2.0 | ||
− | |||
− | |||
− | |||
apiVersion: v1 | apiVersion: v1 | ||
− | |||
kind: Pod | kind: Pod | ||
− | |||
metadata: | metadata: | ||
− | |||
name: with-pod-affinity | name: with-pod-affinity | ||
− | |||
spec: | spec: | ||
− | |||
affinity: | affinity: | ||
− | |||
podAffinity: | podAffinity: | ||
− | |||
requiredDuringSchedulingIgnoredDuringExecution: | requiredDuringSchedulingIgnoredDuringExecution: | ||
− | |||
- labelSelector: | - labelSelector: | ||
− | |||
matchExpressions: | matchExpressions: | ||
Line 93: | Line 61: | ||
topologyKey: topology.kubernetes.io/zone | topologyKey: topology.kubernetes.io/zone | ||
− | podAntiAffinity: | + | [[podAntiAffinity]]: |
preferredDuringSchedulingIgnoredDuringExecution: | preferredDuringSchedulingIgnoredDuringExecution: | ||
Line 105: | Line 73: | ||
matchExpressions: | matchExpressions: | ||
− | - key: security | + | - key: [[security]] |
operator: In | operator: In | ||
Line 111: | Line 79: | ||
values: | values: | ||
− | - S2 | + | - [[S2]] |
topologyKey: topology.kubernetes.io/zone | topologyKey: topology.kubernetes.io/zone | ||
Line 119: | Line 87: | ||
- name: with-pod-affinity | - name: with-pod-affinity | ||
− | image: registry.k8s.io/pause:2.0 | + | [[image]]: registry.k8s.io/pause:2.0 |
== Related == | == Related == | ||
* [[Kubernetes Pod Topology Spread Constraints]] | * [[Kubernetes Pod Topology Spread Constraints]] | ||
− | + | * <code>[[default-scheduler]]</code> | |
+ | * [[Volume node affinity conflict]] | ||
+ | * [[taints]], [[Node taints]] | ||
+ | * [[spec.NodeSelector]] | ||
+ | |||
+ | == Activities == | ||
+ | * https://aws.amazon.com/about-aws/whats-new/2022/04/amazon-eks-karpenter-v0-9-0-pod-affinity/ | ||
== See also == | == See also == | ||
+ | * {{K8s affinity}} | ||
* {{K8s pods}} | * {{K8s pods}} | ||
+ | * {{Karpenter}} | ||
[[Category:K8s]] | [[Category:K8s]] |
Latest revision as of 07:23, 25 July 2024
https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity
- Elasticsearch
PodAntiAffinity
official example
0/11 nodes are available: 1 Insufficient cpu, 1 Too many pods, 10 nodes(s) didn't match Pod's node affinity/selector 0/2 nodes are available: 1 Too many pods, 1 nodes(s) didn't match Pod's node affinity/selector 0/24 nodes are available: 0/24 nodes are available: 1 node(s) didn't match pod anti-affinity rules, 1 node(s) were unschedulable, 2 node(s) had taint {node.kubernetes.io/not-ready}, that the pod did not tolerate, 20 node(s) didn't match Pod's node affinity/selector.
Too many pods, 1 nodes(s) didn't match Pod's node affinity/selector
Official examples[edit]
https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/pods/pod-with-node-affinity.yaml
apiVersion: v1 kind: Pod metadata: name: with-node-affinity spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: - antarctica-east1 - antarctica-west1 preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: another-node-label-key operator: In values: - another-node-label-value containers: - name: with-node-affinity image: registry.k8s.io/pause:2.0 apiVersion: v1 kind: Pod metadata: name: with-pod-affinity spec: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: security operator: In values: - S1 topologyKey: topology.kubernetes.io/zone podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: security operator: In values: - S2 topologyKey: topology.kubernetes.io/zone containers: - name: with-pod-affinity image: registry.k8s.io/pause:2.0
Related[edit]
- Kubernetes Pod Topology Spread Constraints
default-scheduler
- Volume node affinity conflict
- taints, Node taints
- spec.NodeSelector
Activities[edit]
See also[edit]
- Kubernetes pod affinity and anti affinity, Kubernetes Node Affinity,
default-scheduler, affinity:, NodeAffinity, spec.affinity.podAntiAffinity
- Pods:
kubectl apply
,kubectl [ pod get | top | delete | describe pods ]
,InitContainers, PodInitializing, CrashLoopBackOff, ImagePullPolicy:, NodeAffinity, NodeSelector, Terminated
- Karpenter,
karpenter.sh, provisioners.karpenter.sh
, Karpenter releases, best practices,karpenter.sh/capacity-type, karpenter.sh/discovery
,kind: Provisioner, kind: AWSNodeTemplate
,kubectl provisioner
,TopologyKey, FailedDraining, Evict, DisruptionBlocked
, Karpenter logs,controller., ttlSecondsUntilExpired
, KEDA, NodePools, Kind: NodePool, Workload Consolidation, Disruption controls
Advertising: