Difference between revisions of "Kubernetes pod affinity and anti affinity"
Jump to navigation
Jump to search
(22 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]]: | ||
+ | - [[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 | |
− | |||
− | |||
− | |||
− | - key: | ||
operator: In | operator: In | ||
Line 35: | Line 57: | ||
values: | values: | ||
− | + | - S1 | |
+ | |||
+ | topologyKey: topology.kubernetes.io/zone | ||
− | + | [[podAntiAffinity]]: | |
preferredDuringSchedulingIgnoredDuringExecution: | preferredDuringSchedulingIgnoredDuringExecution: | ||
− | - weight: | + | - weight: 100 |
+ | |||
+ | podAffinityTerm: | ||
+ | |||
+ | labelSelector: | ||
− | + | matchExpressions: | |
− | + | - key: [[security]] | |
− | + | operator: In | |
− | + | values: | |
− | + | - [[S2]] | |
− | + | topologyKey: topology.kubernetes.io/zone | |
containers: | containers: | ||
− | - name: with- | + | - 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]
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: