7 Practical Kubernetes Troubleshooting Use Cases Every DevOps Engineer Should Know in 2026
🚀 7 Practical Kubernetes Troubleshooting Scenarios Every DevOps Engineer Should Know in 2026!
Kubernetes is one of the most important skills in today’s DevOps and Cloud-Native ecosystem. But knowing how to deploy applications is not enough. A good DevOps engineer must also know how to troubleshoot problems when things go wrong.
From unhealthy nodes and disk pressure to container startup failures and memory issues, understanding Kubernetes troubleshooting is essential for managing reliable production environments.
In this article, I cover 7 real-world Kubernetes troubleshooting use cases, including:
🔹 Kubernetes Node NotReady — Diagnose node health, kubelet, and networking issues.
🔹 Node DiskPressure — Identify disk space and inode problems.
🔹 OOMKilled — Troubleshoot container memory limits and resource consumption.
🔹 CreateContainerError — Investigate container creation and runtime failures.
🔹 CreateContainerConfigError — Fix missing ConfigMaps, Secrets, and configuration issues.
🔹 ImagePullBackOff — Resolve image registry, authentication, and image-pulling problems.
🔹 RunContainerError — Troubleshoot startup commands, file permissions, and security contexts.
💡 My recommendation: Don’t just memorize Kubernetes commands. Build your own Kubernetes lab, intentionally reproduce these errors, investigate logs and events, identify root causes, and practice fixing them.
Real troubleshooting experience is what helps you move from learning Kubernetes to becoming a confident DevOps engineer.
Kubernetes skills remain among the most valuable skills in the DevOps and Cloud-Native ecosystem. However, understanding Kubernetes commands is only one part of becoming a skilled Kubernetes engineer.
The real challenge begins when applications fail, containers refuse to start, nodes become unhealthy, or workloads suddenly get terminated.
Understanding how to identify, investigate, and resolve these problems is an essential skill for anyone working with Kubernetes.
Here are 7 practical Kubernetes troubleshooting scenarios worth learning, practicing, and saving for your next Kubernetes lab.
1. Kubernetes Node NotReady — How to Diagnose and Fix It
What is Node NotReady?
A Kubernetes node can become NotReady when the control plane determines that the node is not healthy or is no longer reporting its status correctly.
The kubelet running on each node regularly communicates with the Kubernetes control plane and reports information about the node’s health.
Common reasons include:
- Kubelet service failure.
- Network connectivity problems.
- Container runtime issues.
- Container Network Interface (CNI) problems.
- Insufficient CPU or memory.
- Disk or PID pressure.
- Unhealthy Pod Lifecycle Event Generator (PLEG).
Step 1: Identify the Problem
Start by checking the status of your cluster nodes.
kubectl get nodesExample output:
NAME STATUS ROLES AGE VERSION
master Ready control-plane 51m v1.31.0
node-worker-1 NotReady worker 49m v1.31.0
node-worker-2 Ready worker 47m v1.31.0Here, node-worker-1 is reporting a NotReady status.
Step 2: Investigate Node Conditions
Use the following command:
kubectl describe node node-worker-1Pay particular attention to these conditions:
- MemoryPressure: The node is experiencing memory pressure.
- DiskPressure: The node has insufficient available disk space or inodes.
- PIDPressure: The node is running low on available process IDs.
- Ready: Indicates whether the node is healthy and ready to accept workloads.
For example:
Ready: False
Reason: KubeletNotReady
Message: PLEG is not healthyThis indicates that the kubelet is reporting an unhealthy Pod Lifecycle Event Generator.
Step 3: Check Network Connectivity
Test connectivity between the control plane and the affected worker node.
ping <node-IP>You can also investigate network routes:
traceroute <node-IP>Check firewall rules, routing, DNS, and the network connectivity required by your Kubernetes control plane and nodes.
Remember that a failed ping alone does not prove a network failure because ICMP traffic may be blocked.
Step 4: Check Kubelet Status
Connect to the affected worker node and execute:
sudo systemctl status kubeletIf the service is unhealthy, inspect its logs:
sudo journalctl -u kubelet -n 100 --no-pagerIf appropriate, restart the service:
sudo systemctl restart kubeletStep 5: Investigate Container Runtime and Networking
Check whether containerd or your configured container runtime is running:
sudo systemctl status containerdInspect the system pods:
kubectl get pods -n kube-system -o wideCheck your CNI plugin and kube-proxy where applicable.
How to Fix Node NotReady
Depending on the root cause:
- Restore network connectivity between nodes.
- Resolve kubelet service failures.
- Investigate container runtime errors.
- Repair CNI configuration or networking issues.
- Free up memory, disk space, or process capacity.
- Verify that required Kubernetes ports are accessible.
Important: Do not restart services or delete system pods blindly. First identify the underlying failure.
2. Kubernetes Node DiskPressure — How to Identify and Resolve It
What is DiskPressure?
Kubernetes Node DiskPressure occurs when a node runs low on available filesystem space or inodes.
When this happens, Kubernetes identifies the node as experiencing disk pressure and may evict pods to protect the node and its critical workloads.
A typical warning looks like:
Warning NodePressure
Node status is now: NodeHasDiskPressureCommon Causes
- Accumulation of unused container images.
- Large container logs.
- Temporary files consuming disk space.
- Application-generated files.
- Insufficient node storage capacity.
- Exhausted filesystem inodes.
Step 1: Check Node Conditions
kubectl describe node <node-name>Look for:
DiskPressure: TrueYou can also check all nodes:
kubectl get nodesStep 2: Investigate Disk Usage
Connect to the affected node.
Check filesystem capacity:
df -hCheck inode availability:
df -iIdentify large directories:
sudo du -sh /var/lib/containerd
sudo du -sh /var/logThe exact directories depend on your container runtime and system configuration.
Step 3: Check Kubernetes Workloads
Identify pods running on the affected node:
kubectl get pods -A -o wideCheck recent events:
kubectl get events -A --sort-by=.metadata.creationTimestampHow to Fix Node DiskPressure
1. Clean Up Unused Container Images
For containerd-based environments, inspect images using:
sudo crictl imagesRemove unused images carefully using the appropriate container runtime tools.
2. Investigate Large Logs
Check log directories and configure log rotation to prevent unlimited log growth.
3. Increase Disk Capacity
For cloud-based Kubernetes environments, consider increasing the attached disk capacity.
For example, on AWS, you can expand an EBS volume and then extend the filesystem when required.
4. Separate Application Data
Move high-volume application data and logs to appropriately configured storage.
5. Configure Monitoring
Use Prometheus and Grafana to monitor node filesystem utilization and inode consumption.
You can also configure alerts before disk usage reaches Kubernetes eviction thresholds.
3. Kubernetes OOMKilled — How to Troubleshoot Memory Issues
What is OOMKilled?
OOMKilled stands for Out Of Memory Killed.
It occurs when a container is terminated by the Linux out-of-memory mechanism because it exceeds its available memory limit or when the system experiences memory exhaustion.
A common indication is exit code 137.
Example:
NAME READY STATUS RESTARTS AGE
web-app-pod 0/1 OOMKilled 1 4mOOMKilled is commonly associated with:
- Insufficient container memory limits.
- Application memory leaks.
- Unexpected traffic spikes.
- Memory-intensive operations.
- Incorrect resource allocation.
Step 1: Identify the OOMKilled Container
kubectl get podsStep 2: Inspect Pod Details
kubectl describe pod <pod-name>Look for the container’s last termination state:
Last State: Terminated
Reason: OOMKilled
Exit Code: 137Step 3: Investigate Memory Consumption
Check current resource usage:
kubectl top nodesCheck pod memory consumption:
kubectl top pods -AFor individual containers:
kubectl top pod <pod-name> --containersStep 4: Review Resource Requests and Limits
Example configuration:
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"Adjust the values according to the application’s actual memory requirements and available node capacity.
Step 5: Check Pod QoS Class
kubectl get pod <pod-name> \
-o jsonpath='{.status.qosClass}'Kubernetes provides three Quality of Service classes:
- Guaranteed
- Burstable
- BestEffort
These classes influence how Kubernetes prioritizes pods during node-pressure eviction.
Additional Linux Memory Investigation
You can inspect a running container’s OOM score:
cat /proc/<PID>/oom_scoreAnd its OOM score adjustment:
cat /proc/<PID>/oom_score_adjA higher effective OOM score generally means a process is more likely to be selected by the Linux OOM killer.
How to Fix OOMKilled
- Increase memory limits when justified.
- Investigate application memory leaks.
- Optimize memory-intensive operations.
- Monitor memory consumption over time.
- Configure realistic resource requests and limits.
- Avoid excessive memory overcommitment.
Important: Exit code 137 alone does not prove an OOM event. Always inspect the container’s termination reason and Kubernetes events.
4. Kubernetes CreateContainerError — Understanding Container Creation Failures
What is CreateContainerError?
CreateContainerError occurs when Kubernetes has progressed to the container creation stage, but the container runtime fails to create the container.
This can happen because of:
- Incorrect volume configuration.
- Invalid container runtime settings.
- Permission problems.
- Invalid commands or executable paths.
- Runtime-level errors.
- Incorrect mount configurations.
Example:
NAME READY STATUS RESTARTS AGE
techops-app 0/1 CreateContainerError 0 5mStep 1: Inspect Pod Details
kubectl describe pod techops-appCheck the container state, reason, and Events section.
Step 2: Check Container Logs
kubectl logs techops-appIf the container has not been created successfully, logs may not be available.
Get Itcharlie Mj’s stories in your inbox
Join Medium for free to get updates from this writer.
In that situation, focus on pod events and kubelet logs.
Step 3: Investigate Pod Events
kubectl get events \
--field-selector involvedObject.name=techops-appLook for messages describing the container creation failure.
Step 4: Verify Resource Availability
kubectl top nodesAlso inspect the pod’s resource requests and limits.
Step 5: Validate Volume Configuration
Check whether the required PersistentVolumeClaim exists:
kubectl get pvcInspect the relevant claim:
kubectl describe pvc <pvc-name>Example volume configuration:
volumes:
- name: data-volume
persistentVolumeClaim:
claimName: data-pvcMake sure the PVC exists in the same namespace as the pod.
How to Fix CreateContainerError
- Correct invalid volume mounts.
- Verify container commands and executable paths.
- Check file and directory permissions.
- Investigate container runtime errors.
- Validate PVC and storage configurations.
- Review kubelet logs.
For node-level investigation:
sudo journalctl -u kubelet -n 100 --no-pager5. Kubernetes CreateContainerConfigError — Fix Missing ConfigMaps and Secrets
What is CreateContainerConfigError?
CreateContainerConfigError occurs when Kubernetes cannot generate the required container configuration before creating the container.
It usually indicates a problem with the resources or configuration referenced by the pod.
Common causes include:
- Missing ConfigMaps.
- Missing Secrets.
- Incorrect resource names.
- Incorrect namespace references.
- Invalid environment variable references.
- Incorrect configuration settings.
Example:
NAME READY STATUS RESTARTS AGE
web-pod 0/1 CreateContainerConfigError 0 11mStep 1: Inspect the Pod
kubectl describe pod web-podReview the Events section and container waiting reason.
Step 2: Check ConfigMaps
List ConfigMaps:
kubectl get configmapsInspect the required ConfigMap:
kubectl describe configmap web-configIf it does not exist, create it:
kubectl create configmap web-config \
--from-file=config.yamlStep 3: Check Secrets
List available Secrets:
kubectl get secretsInspect a specific Secret:
kubectl describe secret db-secretIf the Secret is missing, create it:
kubectl create secret generic db-secret \
--from-literal=password='your-password'Never store real credentials in publicly accessible manifests or repositories.
Step 4: Verify Namespace
Remember that ConfigMaps and Secrets are namespace-scoped resources.
Check the pod namespace:
kubectl get pod web-pod -o jsonpath='{.metadata.namespace}'Check the resources in the same namespace:
kubectl get configmaps,secrets -n stagingStep 5: Validate Pod Configuration
Review the ConfigMap and Secret references in your deployment YAML.
Example:
env:
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: passwordHow to Fix CreateContainerConfigError
- Create missing ConfigMaps.
- Create missing Secrets.
- Correct resource names.
- Verify namespace configuration.
- Check environment variable references.
- Validate the pod’s YAML configuration.
Key takeaway: CreateContainerConfigError is often a configuration or dependency problem, not an application runtime problem.
6. Kubernetes ImagePullBackOff — How to Fix Image Pull Failures
What is ImagePullBackOff?
ImagePullBackOff occurs when Kubernetes cannot successfully pull the container image from the configured registry.
Kubernetes initially attempts to retrieve the image. When the attempt fails, it retries with an increasing delay between attempts.
Example:
NAME READY STATUS RESTARTS AGE
api-pod 0/1 ImagePullBackOff 0 1mCommon Causes
- Incorrect image name.
- Non-existent image tag.
- Private registry authentication failure.
- Network connectivity problems.
- Registry availability issues.
- Incorrect imagePullSecrets configuration.
Step 1: Check Pod Status
kubectl get podsYou might initially see:
ErrImagePullAfter unsuccessful retries, the status can become:
ImagePullBackOffStep 2: Inspect Pod Events
kubectl describe pod api-podExample event:
Warning Failed
Failed to pull image:
repository does not exist or may require authenticationThis message helps identify whether the problem is related to the image or registry authentication.
Step 3: Verify the Image Name and Tag
Check your deployment YAML:
containers:
- name: api-container
image: nginx:1.27Make sure the repository and tag exist.
You can also test pulling the image manually using your container runtime.
Step 4: Configure Private Registry Authentication
Create a registry Secret:
kubectl create secret docker-registry reg-secret \
--docker-server=private-repo.com \
--docker-username=myuser \
--docker-password='your-password'Reference the Secret in your pod specification:
spec:
imagePullSecrets:
- name: reg-secret containers:
- name: private-api
image: private-repo.com/internal-app:v3.0How to Fix ImagePullBackOff
- Verify the image repository.
- Correct image tags.
- Confirm registry availability.
- Configure valid registry credentials.
- Check imagePullSecrets.
- Investigate DNS and network connectivity.
- Verify the service account’s image pull configuration.
Remember: ImagePullBackOff is a symptom. Always investigate the Events section to identify the actual reason behind the failed image pull.
7. Kubernetes RunContainerError — Troubleshooting Container Startup Failures
What is RunContainerError?
RunContainerError occurs when the container runtime encounters an error while attempting to start a container.
Unlike ImagePullBackOff, the image may already have been successfully downloaded.
However, the container cannot start because of an issue with its execution environment.
Common causes include:
- Incorrect startup commands.
- Missing executable files.
- File permission problems.
- Invalid volume mounts.
- Read-only filesystem restrictions.
- Security context misconfiguration.
- Container runtime problems.
Example:
NAME READY STATUS RESTARTS AGE
techops-app 0/1 RunContainerError 0 6mStep 1: Inspect Pod Events
kubectl describe pod techops-appLook for messages such as:
Error:
failed to start containerexec: "/app/start.sh":
permission deniedThis indicates a problem with the executable file’s permissions.
Step 2: Check Container Logs
If the container started briefly before failing:
kubectl logs techops-appFor previous container instances:
kubectl logs techops-app --previousLogs may not be available if the container never successfully started.
Step 3: Validate Commands and Entrypoints
Review the command and args fields in your YAML.
Example:
containers:
- name: techops-container
image: techops-image:v1.2.3
command: ["/app/start.sh"]
args: ["--env", "production"]Verify that the specified executable exists inside the image and is executable.
Step 4: Check File Permissions
If the error mentions permission denied, investigate the relevant file permissions.
For example:
ls -l /app/start.shAn executable script should have the appropriate execute permission.
You can configure permissions in your Dockerfile:
RUN chmod +x /app/start.shStep 5: Inspect Security Context
Check whether the configured user and group have permission to execute the application.
Example:
securityContext:
runAsUser: 1000
runAsGroup: 3000Also investigate volume permissions, read-only mounts, and security restrictions.
How to Fix RunContainerError
- Correct invalid startup commands.
- Verify executable paths.
- Fix file permissions.
- Check volume mount configurations.
- Review security contexts.
- Validate container image configuration.
- Investigate container runtime and kubelet logs.
Key takeaway: A container image can be pulled successfully and still fail during startup. Understanding the difference between image-pulling and container-execution errors is important.
Bonus: Essential Kubernetes Troubleshooting Commands
Beyond these seven scenarios, every Kubernetes engineer should become comfortable with the following commands.
Cluster and Node Inspection
kubectl cluster-info
kubectl get nodes -o wide
kubectl describe node <node-name>
kubectl top nodesPod Troubleshooting
kubectl get pods -A
kubectl get pods -o wide
kubectl describe pod <pod-name>
kubectl logs <pod-name>
kubectl logs <pod-name> --previousEvents and Resource Inspection
kubectl get events -A
kubectl get events -A --sort-by=.metadata.creationTimestamp
kubectl top pods -A
kubectl get deployments -AKubernetes System Components
kubectl get pods -n kube-system
kubectl get daemonsets -n kube-system
kubectl get services -n kube-systemNode-Level Troubleshooting
sudo systemctl status kubelet
sudo journalctl -u kubelet -f
sudo systemctl status containerd
df -h
df -i
free -hFinal Thoughts: Learn Kubernetes by Troubleshooting Real Problems
Learning Kubernetes is not just about deploying applications, creating pods, or writing YAML manifests.
It is also about understanding what happens when things go wrong.
These seven troubleshooting scenarios provide a practical starting point for developing real-world Kubernetes administration and DevOps skills.
My recommendation is to build a small Kubernetes lab and intentionally reproduce these errors.
For example:
- Stop the kubelet and investigate a node failure.
- Fill up a test filesystem and observe DiskPressure.
- Deploy a container with an insufficient memory limit.
- Reference a missing ConfigMap.
- Use an incorrect container image.
- Configure an invalid startup command.
- Introduce a volume permission problem.
Then investigate the symptoms, read the events, analyze the logs, identify the root cause, and apply the appropriate fix.
Don’t just memorize Kubernetes commands. Understand why problems happen and how to solve them.
That is how you move from knowing Kubernetes to becoming confident in troubleshooting Kubernetes environments.
What other Kubernetes troubleshooting scenarios would you add to this list?
Share your experience in the comments. Your real-world examples could help someone else on their Kubernetes learning journey.







