Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Understanding and Handling OOMKilled Containers in Kubernetes
📖 Scenario: You are managing a Kubernetes cluster running several containers. Some containers are unexpectedly stopping with the status OOMKilled, which means they ran out of memory and were terminated by the system.Your task is to identify these containers, set memory limits to prevent this, and verify the changes.
🎯 Goal: Learn how to detect OOMKilled containers, configure memory limits in pod specs, and confirm the containers run without being killed due to memory issues.
📋 What You'll Learn
Use kubectl commands to check pod status
Edit pod resource limits to set memory limits
Apply changes and verify pod status
Understand the meaning of OOMKilled in pod status
💡 Why This Matters
🌍 Real World
In real Kubernetes clusters, containers can be terminated if they use more memory than allowed. Setting memory limits helps keep the cluster stable and prevents one container from affecting others.
💼 Career
DevOps engineers and site reliability engineers often troubleshoot OOMKilled containers and configure resource limits to ensure applications run reliably in Kubernetes.
Progress0 / 4 steps
1
Check for OOMKilled containers
Run the command kubectl get pods to list all pods and then run kubectl describe pod myapp-pod to check the status of the pod named myapp-pod. Look for the term OOMKilled in the container status section.
Kubernetes
Hint
Use kubectl describe pod myapp-pod to see detailed container status including termination reasons.
2
Add memory limits to the pod configuration
Edit the pod configuration file myapp-pod.yaml to add a memory limit of 200Mi under resources.limits.memory for the container named myapp-container.
Kubernetes
Hint
Under the container spec, add resources: with limits: and set memory: "200Mi".
3
Apply the updated pod configuration
Run the command kubectl apply -f myapp-pod.yaml to update the pod with the new memory limits.
Kubernetes
Hint
Use kubectl apply -f myapp-pod.yaml to update the pod with your changes.
4
Verify the pod is running without OOMKilled status
Run kubectl get pods and kubectl describe pod myapp-pod again to confirm the pod is running and the container status does not show OOMKilled.
Kubernetes
Hint
Look for Status: Running and absence of OOMKilled in the container status.
Practice
(1/5)
1. What does it mean when a Kubernetes container status shows OOMKilled?
easy
A. The container was deleted manually by the user.
B. The container was restarted due to a network failure.
C. The container completed its task successfully.
D. The container was stopped because it used more memory than allowed.
Solution
Step 1: Understand OOMKilled meaning
OOMKilled means Out Of Memory Killed, which happens when a container uses more memory than its limit.
Step 2: Relate to container status
When a container exceeds its memory limit, Kubernetes stops it to protect the system.
Final Answer:
The container was stopped because it used more memory than allowed. -> Option D
Quick Check:
OOMKilled = Memory limit exceeded [OK]
Hint: OOMKilled means container used too much memory [OK]
Common Mistakes:
Confusing OOMKilled with network errors
Thinking OOMKilled means container finished normally
Assuming OOMKilled is a manual stop
2. Which kubectl command helps you check why a pod's container was OOMKilled?
easy
A. kubectl get pods --all-namespaces
B. kubectl logs <pod-name>
C. kubectl describe pod <pod-name>
D. kubectl exec <pod-name> -- top
Solution
Step 1: Identify command to get pod details
kubectl describe pod <pod-name> shows detailed pod info including container status and reasons for restarts.
Step 2: Confirm OOMKilled reason visibility
This command shows events and container states, including if a container was OOMKilled.
Final Answer:
kubectl describe pod <pod-name> -> Option C
Quick Check:
Describe pod shows OOMKilled reason [OK]
Hint: Use 'kubectl describe pod' to see OOMKilled details [OK]
Common Mistakes:
Using 'kubectl get pods' which lacks detailed reason
Checking logs which may not show OOMKilled cause
Running exec commands which don't show pod status
3. Given this pod description snippet, what caused the container to stop?
A. The container was killed because it used too much memory.
B. The container ran out of CPU resources.
C. The container was terminated due to a manual stop.
D. The container crashed due to a software error.
Solution
Step 1: Analyze the Reason field
The Reason is 'OOMKilled', which means the container was killed because it exceeded memory limits.
Step 2: Understand Exit Code 137
Exit code 137 means the process was killed by signal 9 (SIGKILL), typical for OOMKilled events.
Final Answer:
The container was killed because it used too much memory. -> Option A
Quick Check:
Reason OOMKilled + Exit 137 = Memory kill [OK]
Hint: Exit code 137 with OOMKilled means memory limit exceeded [OK]
Common Mistakes:
Confusing CPU limits with memory limits
Assuming manual stop without checking reason
Thinking software error caused termination
4. You see a pod's container repeatedly OOMKilled. Which change fixes this issue?
medium
A. Increase the container's memory limit in the pod spec.
B. Decrease the container's CPU limit in the pod spec.
C. Remove the memory limit from the pod spec.
D. Restart the pod manually every time it OOMKills.
Solution
Step 1: Identify cause of repeated OOMKilled
Repeated OOMKilled means the container needs more memory than allowed.
Step 2: Choose proper fix
Increasing the memory limit lets the container use more memory and prevents OOMKilled.
Final Answer:
Increase the container's memory limit in the pod spec. -> Option A
Quick Check:
More memory limit stops OOMKilled [OK]
Hint: Raise memory limit to stop OOMKilled repeats [OK]
Common Mistakes:
Lowering CPU limit which doesn't affect memory
Removing memory limit causing instability
Relying on manual restarts instead of fixing limits
5. A pod's container is OOMKilled even though its memory limit is set to 512Mi. You want to prevent this without increasing the limit. What is the best approach?
hard
A. Increase the CPU limit to speed up processing.
B. Optimize the application to use less memory inside the container.
C. Remove the memory limit to avoid OOMKilled.
D. Add more replicas of the pod to distribute load.
Solution
Step 1: Understand memory limit and OOMKilled
The container hits the 512Mi limit and is killed. Increasing limit is not an option.
Step 2: Find alternative to increasing memory
Optimizing the app to use less memory reduces usage below the limit, preventing OOMKilled.
Step 3: Evaluate other options
Removing limit risks node stability, increasing CPU doesn't reduce memory, adding replicas doesn't fix memory per container.
Final Answer:
Optimize the application to use less memory inside the container. -> Option B
Quick Check:
Lower memory use avoids OOMKilled without raising limit [OK]
Hint: Reduce app memory use to avoid OOMKilled without raising limit [OK]