Fixing kubectl port-forward: 'Pod is not running Current status=Pending'

beginner☸️ Kubernetes2026-07-10| Kubernetes (All versions), kubectl CLI, Linux/macOS/Windows

Error Message

error: unable to forward port because pod is not running. Current status=Pending
#kubectl#port-forward#pod#debug#kubernetes-errors

The Problem

Your go-to tool for accessing internal Kubernetes services is likely kubectl port-forward. It’s simple and effective. However, if the target Pod hasn't fully started, the command fails immediately with a frustrating error:

error: unable to forward port because pod is not running. Current status=Pending

The root cause is simple. kubectl needs an active, running container to establish a network tunnel. If your Pod is stuck in a Pending state, the container doesn't even exist on a node yet, leaving the command with nowhere to go.

TL;DR: The Quick Fix

  • Check the Pod status: kubectl get pods
  • Investigate the cause: kubectl describe pod <pod-name>
  • Scroll to the Events section at the bottom.
  • Fix the resource or image issue and wait for the Running status.

Step-by-Step Troubleshooting

1. Verify the Pod Status

Start by identifying which Pod is holding up the process. Run the following command:

kubectl get pods

You will likely see an output similar to this:

NAME                     READY   STATUS    RESTARTS   AGE
web-api-7444d589-abcde   0/1     Pending   0          4m

As long as the status is Pending, ContainerCreating, or ImagePullBackOff, the port-forward tunnel cannot be established. You need to see 1/1 READY.

2. Inspect the Pod Events

The Pending state is just a symptom. To find the actual bottleneck, describe the Pod to see its internal logs:

kubectl describe pod web-api-7444d589-abcde

The Events section is the most important part of this output. This is where the Kubernetes scheduler explains why it's failing. Look for these common red flags:

  • FailedScheduling: The cluster lacks a node with enough free CPU or RAM.
  • ErrImagePull: The image name is misspelled or the registry requires a login secret.
  • NetworkPlugin cni config not initialized: The node's networking layer is broken.

3. Common Fixes for Pending Status

Scenario A: Insufficient Resources

If the event log says 0/3 nodes are available: 3 Insufficient cpu, your cluster is at capacity. For example, if your Pod requests 500m (0.5 CPU) but your nodes only have 200m free, the Pod will sit in Pending forever. To fix this, you can:

  • Lower the resources.requests in your Deployment YAML.
  • Scale your cluster by adding more nodes.
  • Clean up unused Pods to reclaim resources.

Scenario B: Image Issues

When you see ImagePullBackOff, check your image path immediately. If you are using a private registry like Docker Hub or AWS ECR, verify that your imagePullSecrets are defined in the Pod spec. A single typo in the image tag (e.g., v1.2.0 instead of v1.2.1) will stall the deployment.

Scenario C: Node Networking Limits

Pods often stay Pending because the node has run out of available IP addresses. This happens frequently in cloud environments like AWS EKS when using a small subnet. For instance, a /28 subnet only offers 16 IP addresses. If those are gone, the scheduler cannot assign an IP to your new Pod. I use an IP Subnet Calculator to ensure my CIDR blocks are large enough for the intended scale.

Wait and Verify

After addressing the root cause, monitor the Pod until it transitions to Running:

kubectl get pods -w

Once the status hits Running and the READY column shows 1/1, restart your port-forward command:

kubectl port-forward deployment/web-api 8080:80

Prevention Tips

  • Forward to Deployments: Don't port-forward to a specific Pod name. Use kubectl port-forward deployment/my-app 8080:80. If one Pod is Pending but another is Running, Kubernetes will automatically route you to the healthy one.
  • Set Realistic Requests: Avoid setting high resource requests unless necessary. If you request 4 CPUs on a machine that only has 2, the Pod will never start.
  • Check Liveness Probes: Ensure your readinessProbe isn't failing. A Pod might be "Running" but not "Ready," which can also break network traffic.

Related Error Notes