<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: sushma korati</title>
    <description>The latest articles on DEV Community by sushma korati (@sushma_korati_365049015c9).</description>
    <link>https://dev.to/sushma_korati_365049015c9</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3731746%2F11efd827-76e4-493e-9ca3-0bf6087ac21c.png</url>
      <title>DEV Community: sushma korati</title>
      <link>https://dev.to/sushma_korati_365049015c9</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sushma_korati_365049015c9"/>
    <language>en</language>
    <item>
      <title>When Kubernetes Ignores Your Pods: Understanding Scheduler Failures</title>
      <dc:creator>sushma korati</dc:creator>
      <pubDate>Thu, 29 Jan 2026 22:11:03 +0000</pubDate>
      <link>https://dev.to/sushma_korati_365049015c9/when-kubernetes-ignores-your-pods-understanding-scheduler-failures-4870</link>
      <guid>https://dev.to/sushma_korati_365049015c9/when-kubernetes-ignores-your-pods-understanding-scheduler-failures-4870</guid>
      <description>&lt;p&gt;You’ve just created a Kubernetes Pod.&lt;br&gt;
You’re happily waiting for it to become Running…&lt;/p&gt;

&lt;p&gt;Seconds pass.&lt;br&gt;
Nothing happens.&lt;/p&gt;

&lt;p&gt;Those seconds turn into minutes.&lt;br&gt;
Eventually, a considerable amount of time passes — okay, fine, 1/12th of an hour (6 minutes 😛) — which is basically &lt;em&gt;forever&lt;/em&gt; in the Kubernetes world.&lt;/p&gt;

&lt;p&gt;That’s when curiosity kicks in. You check the Pod events and Kubernetes greets you with a neatly drafted message:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;0/18 nodes are available: 1 node(s) exceed max volume count, 2 node(s) had untolerated taint {node.kubernetes.io/unreachable: }, 3 Insufficient memory, 3 node(s) had untolerated taint {dedicated: myapp}, 3 node(s) had untolerated taint {dedicated: mytestapp}, 6 node(s) didn't match Pod's node affinity/selector. preemption: 0/18 nodes are available: 14 Preemption is not helpful for scheduling, 4 No preemption victims found for incoming pod.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To a seasoned Kubernetes engineer, this message might look straightforward — something that can be decoded with a few familiar &lt;code&gt;kubectl&lt;/code&gt; commands.&lt;br&gt;
But for someone new to the Kubernetes world, this single line can feel &lt;strong&gt;overwhelming&lt;/strong&gt;..&lt;br&gt;
In just one error message, Kubernetes expects you to understand taints, preemption, node affinity, resource constraints — all at once.&lt;/p&gt;

&lt;p&gt;In this post, we’ll break this message down piece by piece and map each part back to the actual cluster state. By the end, the next time Kubernetes says “0/X nodes are available”, you won’t panic — you might even appreciate how clearly the scheduler is telling you why your Pod doesn’t belong anywhere..&lt;/p&gt;
&lt;h3&gt;
  
  
  Let's Being with the Message....
&lt;/h3&gt;

&lt;p&gt;Once again, here’s the message:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;0/18 nodes are available: 1 node(s) exceed max volume count, 2 node(s) had untolerated taint {node.kubernetes.io/unreachable: }, 3 Insufficient memory, 3 node(s) had untolerated taint {dedicated: myapp}, 3 node(s) had untolerated taint {dedicated: mytestapp}, 6 node(s) didn't match Pod's node affinity/selector. preemption: 0/18 nodes are available: 14 Preemption is not helpful for scheduling, 4 No preemption victims found for incoming pod.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This message can be divided into 2 sections, &lt;code&gt;nodes&lt;/code&gt; and &lt;code&gt;Preemption&lt;/code&gt; section. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Node section:&lt;/strong&gt;  The first thing we notice is 0/18, which simply means the cluster has 18 worker nodes, and none of them are currently suitable for scheduling this Pod.&lt;/p&gt;

&lt;p&gt;Now, ignore the text for a moment and just add the numbers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;18 = 1 + 2 + 3 + 3 + 3 + 6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Perfect!!!&lt;br&gt;
This tells us Kubernetes evaluated all nodes and classified each one under exactly one reason.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Preemption section:&lt;/strong&gt; &lt;br&gt;
This part answers a different question: If Kubernetes evicts some running Pods, will that help schedule this Pod?&lt;/p&gt;

&lt;p&gt;Again, since we have 18 nodes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;18 = 14 + 4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: Preemption cannot fix taints, affinity rules, or volume limits.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is this true? (Be curious, question k8s cluster 😉 )
&lt;/h3&gt;

&lt;p&gt;The numbers add up, which is good.&lt;br&gt;
But how do we verify these claims and fix our Pod spec if possible?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;x node(s) exceed max volume count &lt;/li&gt;
&lt;li&gt;x node(s) had untolerated taint&lt;/li&gt;
&lt;li&gt;x Insufficient memory&lt;/li&gt;
&lt;li&gt;x node(s) didn't match Pod's node affinity/selector.&lt;/li&gt;
&lt;li&gt;x Preemption is not helpful for scheduling&lt;/li&gt;
&lt;li&gt;x No preemption victims found for incoming pod.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s go through the most common and actionable ones.&lt;/p&gt;

&lt;p&gt;First get the list of nodes in the cluster , along with description of each node.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get nodes              
NAME            STATUS   ROLES           AGE   VERSION
192.168.0.51    Ready    master,worker   18h   v1.29.14
192.168.0.52    Ready    master,worker   17h   v1.29.14
192.168.1.52    Ready    master,worker   17h   v1.29.14
....
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Issue: Untolerated taint
&lt;/h4&gt;

&lt;p&gt;Means the node has taints, but your pods is not "tolerated"&lt;/p&gt;

&lt;p&gt;Check the taints on each node.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl describe node 192.168.0.51
....
Taints:             dedicated=mytestapp:NoExecute
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: For the scheduler to schedule your pod, add the appropriate toleration in pod spec.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tolerations:
- key: "dedicated"
  operator: "Equal"
  value: "mytestapp"
  effect: "NoExecute"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Issue: Insufficient memory
&lt;/h4&gt;

&lt;p&gt;States that some of the nodes does not have memory required by pod.&lt;/p&gt;

&lt;p&gt;Check the resources available in the node&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl describe node 192.168.xxx
...
Capacity:
  cpu:                4
  ephemeral-storage:  104742892Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             16139256Ki
  pods:               110
Allocatable:
  cpu:                3910m
  ephemeral-storage:  101893885258
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             13695652659200m
  pods:               110
....
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;check the resources requested by the pod&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl describe pod my-pod
....
Containers:
    Limits:
      memory:  999990Gi
      cpu:  1
    Requests:
      memory:   199990Gi
      cpu:  1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: There are two ways to solve the issue, &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;re-check if the pod needs such high memory, if not reduce. &lt;/li&gt;
&lt;li&gt;Assess the importance of the pod and assign appropriate priority.
Checking the priority.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl describe pod my-pod
.....
Priority:         0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Issue: Didn't match Pod's node affinity/selector.
&lt;/h4&gt;

&lt;p&gt;Check if the pod has any affinities or selectors assigned to it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl describe pod my-pod
....
affinity:
    nodeAffinity:
      .....
    podAffinity:
      .....
    podAntiAffinity:
      .....
Node-Selector:
....
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Best Practice&lt;/strong&gt;: Its always a good to assess if these constrains are actually needed, if not remove.&lt;/p&gt;

&lt;h3&gt;
  
  
  Closing thoughts..
&lt;/h3&gt;

&lt;p&gt;A quick reality check before the actual closing, although we can verify all these messages, it’s worth noting that &lt;strong&gt;not all of them are realistically solvable.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For example, “exceed max volume count” is exactly what it sounds like. There are only two ways out: 1.Add a new node — which usually means extra cost ($$) or 2. Detach or reduce attached volumes — a truly &lt;em&gt;genius&lt;/em&gt; solution, I know 😄 . Similarly, preemption-related issues. So for this post, I’m intentionally skipping these cases.&lt;/p&gt;

&lt;p&gt;close to closing this now.. &lt;br&gt;
I hope you were able to understand why kuberenetes is rejecting to place the pods.. &lt;/p&gt;

&lt;p&gt;Kubernetes has given us immense control over scheduling — taints, tolerations, affinity, priorities, topology spread, and more.&lt;/p&gt;

&lt;p&gt;But with great power comes great responsibility 😄&lt;br&gt;
Before using these features, sit with your workload and ask:&lt;br&gt;
What is mandatory?&lt;br&gt;
What is nice to have?&lt;br&gt;
What can be relaxed?&lt;/p&gt;

&lt;p&gt;The scheduler is not broken — it’s doing exactly what we asked it to do.&lt;/p&gt;

&lt;p&gt;If you’ve read this far, thanks!&lt;br&gt;
Feel free to share feedback or your own scheduling stories 🙂&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>productionfailure</category>
      <category>platformengineering</category>
    </item>
  </channel>
</rss>
