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
Pod Disruption Budgets
📖 Scenario: You manage a Kubernetes cluster running a web application. To keep the app reliable during maintenance, you want to control how many pods can be disrupted at once.
🎯 Goal: Create a Pod Disruption Budget (PDB) YAML manifest that limits disruptions to your app pods, ensuring at least one pod is always available during voluntary disruptions.
📋 What You'll Learn
Create a YAML manifest named pdb.yaml for a Pod Disruption Budget
Set minAvailable to 1 to keep at least one pod running
Target pods with the label app: webapp
Use the policy/v1 API version
Name the PDB webapp-pdb
💡 Why This Matters
🌍 Real World
Pod Disruption Budgets help maintain application availability during planned maintenance or upgrades by limiting how many pods can be taken down at once.
💼 Career
Understanding PDBs is essential for Kubernetes administrators and DevOps engineers to ensure high availability and reliability of applications in production environments.
Progress0 / 4 steps
1
Create the basic YAML structure for the Pod Disruption Budget
Create a YAML file named pdb.yaml with the following keys: apiVersion set to policy/v1, kind set to PodDisruptionBudget, and metadata with name set to webapp-pdb.
Kubernetes
Hint
Start by defining the API version, kind, and metadata name exactly as specified.
2
Add the spec section with minAvailable
Add a spec section to pdb.yaml with minAvailable set to 1.
Kubernetes
Hint
Indent minAvailable under spec exactly with value 1.
3
Add the selector to target pods with label app: webapp
Under spec, add a selector with matchLabels targeting pods labeled app: webapp.
Kubernetes
Hint
Indent selector and matchLabels properly under spec.
4
Display the complete Pod Disruption Budget YAML
Print the contents of pdb.yaml to verify the Pod Disruption Budget manifest.
Kubernetes
Hint
Use cat pdb.yaml in your terminal to display the file content.
Practice
(1/5)
1. What is the main purpose of a Pod Disruption Budget in Kubernetes?
easy
A. To ensure a minimum number of pods stay available during planned disruptions
B. To automatically restart pods when they crash
C. To scale pods up or down based on CPU usage
D. To backup pod data before deletion
Solution
Step 1: Understand Pod Disruption Budget purpose
A Pod Disruption Budget (PDB) is designed to keep your app available during planned changes by limiting voluntary disruptions.
Step 2: Match purpose to options
To ensure a minimum number of pods stay available during planned disruptions correctly states that PDB ensures a minimum number of pods remain running during disruptions, unlike other options which describe unrelated features.
Final Answer:
To ensure a minimum number of pods stay available during planned disruptions -> Option A
Quick Check:
Pod Disruption Budget = availability during disruptions [OK]
Hint: PDB = minimum pods running during planned changes [OK]
Common Mistakes:
Confusing PDB with auto-scaling
Thinking PDB restarts crashed pods
Assuming PDB backs up pod data
2. Which of the following is the correct way to specify a Pod Disruption Budget that allows at most 1 pod disruption at a time for pods with label app=web?
easy
A. apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: pdb-web
spec:
maxUnavailable: 1
selector:
matchLabels:
app: web
minReadySeconds: 10
B. apiVersion: v1
kind: PodDisruptionBudget
metadata:
name: pdb-web
spec:
minAvailable: 1
selector:
matchLabels:
app: web
C. apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: pdb-web
spec:
maxUnavailable: 1
selector:
matchLabels:
app: web
strategy: RollingUpdate
D. apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: pdb-web
spec:
maxUnavailable: 1
selector:
matchLabels:
app: web
Solution
Step 1: Check API version and kind
The correct API version for PDB is policy/v1 and kind is PodDisruptionBudget.
Step 2: Validate spec fields for maxUnavailable and selector
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: pdb-web
spec:
maxUnavailable: 1
selector:
matchLabels:
app: web correctly uses maxUnavailable: 1 and a selector matching label app: web. Other options either use wrong API version, extra unsupported fields, or wrong spec keys.
Final Answer:
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: pdb-web
spec:
maxUnavailable: 1
selector:
matchLabels:
app: web -> Option D
Quick Check:
Correct API and maxUnavailable syntax = apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: pdb-web
spec:
maxUnavailable: 1
selector:
matchLabels:
app: web [OK]
Hint: Use policy/v1 and maxUnavailable with correct selector [OK]
But Kubernetes reports an error: "spec.maxUnavailable: Invalid value: "2": must be less than the number of pods selected by the label selector". What is the likely cause?
medium
A. There are fewer than 3 pods with label app=database
B. maxUnavailable must be a percentage, not a number
C. The selector label is incorrect syntax
D. PodDisruptionBudget requires minAvailable, not maxUnavailable
Solution
Step 1: Understand maxUnavailable validation
maxUnavailable must be less than the total number of pods matched by the selector.
Step 2: Analyze error message meaning
The error says "must be less than the number of pods" meaning the number of pods with label app=database is less than or equal to 2.
Final Answer:
There are fewer than 3 pods with label app=database -> Option A
Quick Check:
maxUnavailable < total pods = error if not [OK]
Hint: maxUnavailable must be less than pod count [OK]
Common Mistakes:
Using maxUnavailable as percentage incorrectly
Miswriting selector labels
Thinking minAvailable is mandatory
5. You have a deployment with 10 pods labeled app=frontend. You want to ensure that during voluntary disruptions, at least 80% of pods remain available. Which Pod Disruption Budget spec is correct?
hard
A. spec:
minAvailable: 80
selector:
matchLabels:
app: frontend
B. spec:
maxUnavailable: 8
selector:
matchLabels:
app: frontend
C. spec:
maxUnavailable: 20%
selector:
matchLabels:
app: frontend
D. spec:
minAvailable: 20%
selector:
matchLabels:
app: frontend
Solution
Step 1: Understand percentage usage in PDB
maxUnavailable and minAvailable can accept percentages. To keep 80% available, maxUnavailable should be 20%.