Voiced by Amazon Polly |
Introduction
If you run workloads on Kubernetes, encountering Pods stuck in the Pending state is a common challenge. This typically means the Pod couldn’t be scheduled on any node due to resource limitations or configuration issues. Understanding the Pod lifecycle, from creation to scheduling, is crucial for identifying the root cause.
In this blog, we will explore why Pods get stuck in Pending and walk through effective troubleshooting steps to resolve the issue.
Pioneers in Cloud Consulting & Migration Services
- Reduced infrastructural costs
- Accelerated application deployment
Key Causes of Pods Stuck in the Pending State
Several factors can prevent a Pod from being scheduled, causing it to remain Pending:
Insufficient Resources (CPU/Memory):
One of the most frequent reasons a Pod stays in Pending is that the cluster simply doesn’t have enough free CPU or memory to meet the Pod’s requested resources. Even if nodes are available, the scheduler cannot place the Pod if none can fulfil the defined requests. This is often seen in clusters under heavy load or when Pods request more resources than what’s available.
Taints and Tolerations:
Kubernetes nodes can be tainted to prevent certain Pods from being scheduled on them unless the Pods explicitly tolerate those taints. If no node has the appropriate tolerations that match the taints on available nodes, the Pod cannot be scheduled and remains in the Pending state. This mechanism is often used to reserve specific nodes for critical workloads.
Node Selectors and Affinity Rules:
Kubernetes allows you to control Pod placement using node selectors, node affinity, and pod affinity/anti-affinity rules. These features help ensure Pods are deployed to specific nodes or alongside (or away from) other Pods. However, if the conditions defined in these rules cannot be satisfied by any node in the cluster, the Pod won’t be scheduled and will remain in the Pending state.
Persistent Volume Claims (PVCs):
If a Pod relies on a Persistent Volume Claim (PVC) and that volume is not yet bound or available, Kubernetes will hold off scheduling the Pod. This can happen if there are no suitable storage classes, dynamic provisioning fails, or the required volume doesn’t exist. The Pod stays Pending until the PVC is successfully bound.
Image Pull Issues:
A Pod can remain in the Pending state if Kubernetes encounters problems while pulling the specified container image. These issues often arise due to an incorrect image name or tag, missing credentials for accessing a private container registry, or network-related problems preventing access to the image source. While such cases usually result in events like ImagePullBackOff or ErrImagePull, the Pod initially stays in Pending until the image can be successfully fetched and pulled onto the node.
Init Containers Not Completing:
If your Pod configuration includes Init Containers, Kubernetes waits for them to complete before moving to the main container. If any Init Container fails, gets stuck, or restarts continuously, the Pod will remain in the Pending state. It won’t proceed to start the application containers until all Init Containers complete successfully.
Unmet Dependencies:
Before starting the Pod, Kubernetes checks for dependencies on other components, such as ConfigMaps, Secrets, Services, or custom resources. If any of these are missing or unavailable, the Kubelet will delay the Pod’s startup. The Pod will remain in the Pending state until all its dependencies are resolved.
How to Troubleshoot – Step-by-Step Guide
When a Pod is stuck in the Pending state, the key to resolving the issue is systematically checking cluster components and understanding scheduling behaviour.
- Check Pod Status and Node Assignment: Start by retrieving the Pod’s current status and node assignment details. This helps confirm whether the Pod has been scheduled or not. If no node name is listed, the scheduler hasn’t placed it yet.
1 |
# kubectl get pod <pod-name> -o wide |
- Describe the Pod for Scheduling Events: This command gives you a detailed view of the Pod’s configuration and current status, including events related to scheduling failures. Look for messages under the Events section, they often provide clues, such as insufficient CPU/memory, missing volumes, taint conflicts, or unsatisfied affinity rules.
1 |
# kubectl describe pod <pod-name> |
- Check Cluster Events Chronologically: Sorting events by timestamp helps you identify what happened just before or after the Pod was scheduled (or attempted to be). This is useful for seeing PVC provisioning failures, image pull errors, or resource pressure alerts.
1 |
# kubectl get events --sort-by=.metadata.creationTimestamp |
- Inspect Available Nodes: Check the list of available nodes in the cluster and their status. Ensure the nodes are Ready and capable of accepting new workloads.
1 |
# kubectl get nodes -o wide |
- Describe a Specific Node: Describing a node gives detailed insights into its condition, including available resources, taints, and pressure warnings. This helps determine whether the node can host the Pod or why scheduling fails.
1 |
# kubectl describe node <node-name> |
- Check PVC and Storage Status: Check PVC and Storage Status: If your Pod uses Persistent Volumes, verify that the associated PVCs are in the Bound state using kubectl get pvc. A PVC stuck in Pending indicates that Kubernetes cannot find or provision the required storage, which prevents the Pod from being scheduled.
1 |
# kubectl get pvc |
If you’re running on an Amazon EKS cluster, ensure that the Amazon EBS CSI driver is installed and that the EBS-related pods in the kube-system namespace are running. If these pods are also stuck in Pending, check whether the nodes have appropriate tolerations configured. Missing or mismatched tolerations can prevent EBS driver pods from scheduling, which blocks PVC provisioning.
Useful Tool for Troubleshooting
While kubectl remains the go-to CLI tool for interacting with Kubernetes, visual or interactive tools can significantly improve the troubleshooting experience. Below is the suggested tool that can simplify and accelerate your debugging process:
Lens – The Kubernetes IDE
Lens is a powerful, user-friendly desktop application with a full-fledged Kubernetes dashboard. It provides a graphical interface to explore your cluster, making it easier to visualize:
- Pod statuses, events, and logs
- Node conditions and resource utilization
- Persistent Volume Claims (PVCs), ConfigMaps, Secrets, and Services
- Real-time insights into namespaces, workloads, and deployments
Lens also supports multiple clusters, RBAC access control, and terminal integration to run kubectl commands directly from the UI. It’s ideal for developers and DevOps engineers who want an efficient visual approach without writing repetitive CLI commands.
Conclusion
Troubleshooting a Kubernetes Pod stuck in the Pending state requires a clear understanding of how scheduling works and where it can fail.
Following a structured approach and using tools like kubectl and Lens, you can quickly identify and resolve the issue, ensuring your workloads are deployed smoothly and efficiently.
Drop a query if you have any questions regarding Kubernetes Pod and we will get back to you quickly.
Making IT Networks Enterprise-ready – Cloud Management Services
- Accelerated cloud migration
- End-to-end view of the cloud environment
About CloudThat
CloudThat is an award-winning company and the first in India to offer cloud training and consulting services worldwide. As a Microsoft Solutions Partner, AWS Advanced Tier Training Partner, and Google Cloud Platform Partner, CloudThat has empowered over 850,000 professionals through 600+ cloud certifications winning global recognition for its training excellence including 20 MCT Trainers in Microsoft’s Global Top 100 and an impressive 12 awards in the last 8 years. CloudThat specializes in Cloud Migration, Data Platforms, DevOps, IoT, and cutting-edge technologies like Gen AI & AI/ML. It has delivered over 500 consulting projects for 250+ organizations in 30+ countries as it continues to empower professionals and enterprises to thrive in the digital-first world.
FAQs
1. My Pod is pending due to PVC issues. How can I check what's wrong?
ANS: – Use # kubectl get pvc to check if the volume is in a Bound state. If it’s Pending, inspect if the correct StorageClass is being used, and check if the Amazon EBS CSI driver (on EKS) or equivalent controller is running properly.
2. How do I know if resource limits are causing my Pod to stay in Pending?
ANS: – Run # kubectl describe pod <pod-name> and look at the events section. If you see messages about insufficient CPU or memory, the scheduler couldn’t find a node that meets the Pod’s resource requests. You can also check kubectl top nodes to view current node usage.
3. Can taints and tolerations prevent my Pod from scheduling?
ANS: – Yes. If a node has taints and your Pod doesn’t have the matching tolerations, it won’t be scheduled there. Run # kubectl describe node <node-name> to check taints and ensure your Pod spec includes appropriate tolerations if needed.

WRITTEN BY Sidda Sonali
Sidda Sonali is a Research Associate at CloudThat with a strong passion for DevOps and cloud-native technologies. She is committed to mastering modern DevOps practices and staying abreast of the latest advancements in cloud services. Sonali has hands-on experience with tools such as Terraform, Amazon EKS, Kubernetes, and Docker, and is proficient in implementing CI/CD pipelines, managing Infrastructure as Code (IaC), and automating cloud deployments. Her expertise extends to container orchestration, deployment automation, and building secure, scalable infrastructures across diverse cloud environments.
Comments