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
Deployment Upgrade Strategies
📖 Scenario: You are a DevOps engineer managing a Kubernetes cluster for a small company. The cluster runs several applications, and you need to upgrade the applications safely without downtime.This project will guide you through defining and simulating different application upgrade strategies using Kubernetes concepts.
🎯 Goal: Build a simple Kubernetes manifest and commands to simulate application upgrade strategies: blue-green and canary. You will create deployment configurations and update them step-by-step to understand how upgrades can be done safely.
📋 What You'll Learn
Create a Kubernetes deployment manifest with a specific version label
Add a configuration variable to select upgrade strategy
Implement the upgrade logic using kubectl commands and manifest changes
Output the final deployment status to verify upgrade success
💡 Why This Matters
🌍 Real World
Application upgrade strategies help keep applications running smoothly while updating software versions without downtime.
💼 Career
Understanding upgrade strategies is essential for DevOps engineers to maintain high availability and reliability in production Kubernetes clusters.
Progress0 / 4 steps
1
Create initial deployment manifest
Create a Kubernetes deployment manifest named app-deployment.yaml with these exact specifications: deployment name myapp, container image myapp:v1, and 3 replicas.
Kubernetes
Hint
Use apiVersion: apps/v1 and kind: Deployment. Set replicas to 3 and label the pods with version: v1.
2
Add upgrade strategy variable
Create a variable named upgrade_strategy and set it to the string blue-green to select the upgrade method.
Kubernetes
Hint
Use a simple assignment statement in Python style to set upgrade_strategy to "blue-green".
3
Implement blue-green upgrade logic
Write a command to simulate the blue-green upgrade by creating a new deployment named myapp-green with image myapp:v2 and 3 replicas. Use the same labels but set version: v2 for the new deployment.
Kubernetes
Hint
Copy the deployment manifest structure and change metadata.name to myapp-green, image to myapp:v2, and label version to v2.
4
Output deployment status
Write a command to print the status of both deployments myapp and myapp-green using kubectl get deployments myapp myapp-green.
Kubernetes
Hint
Use a print statement to show the exact command kubectl get deployments myapp myapp-green.
Practice
(1/5)
1. What is the recommended order when upgrading a Kubernetes cluster?
easy
A. Upgrade all nodes simultaneously
B. Upgrade worker nodes first, then control plane nodes
C. Upgrade control plane nodes first, then worker nodes
D. Upgrade only the worker nodes
Solution
Step 1: Understand the role of control plane nodes
Control plane nodes manage the cluster state and API server, so they must be stable first.
Step 2: Upgrade worker nodes after control plane
Worker nodes run workloads and depend on the control plane, so upgrade them after control plane nodes.
Final Answer:
Upgrade control plane nodes first, then worker nodes -> Option C
Quick Check:
Control plane first, workers second = A [OK]
Hint: Always upgrade control plane nodes before worker nodes [OK]
Common Mistakes:
Upgrading worker nodes before control plane
Upgrading all nodes at once causing downtime
Skipping control plane upgrade
2. Which command correctly drains a node before upgrading it?
easy
A. kubectl drain --ignore-daemonsets --delete-local-data
B. kubectl upgrade node
C. kubectl delete node
D. kubectl cordon --force
Solution
Step 1: Identify the correct drain command syntax
The command to safely evict pods is 'kubectl drain' with flags to ignore daemonsets and delete local data.
Step 2: Verify other options are incorrect
Upgrade and delete commands do not drain nodes; cordon only marks unschedulable but does not evict pods.
Final Answer:
kubectl drain <node-name> --ignore-daemonsets --delete-local-data -> Option A
Quick Check:
Drain command with correct flags = A [OK]
Hint: Use 'kubectl drain' with flags to safely evict pods [OK]
Common Mistakes:
Using 'kubectl cordon' instead of 'drain'
Deleting nodes instead of draining
Missing flags causing pod eviction failure
3. Given this upgrade sequence, what is the expected cluster state?
1. Drain node1
2. Upgrade node1
3. Uncordon node1
4. Repeat for node2 and node3
medium
A. Control plane nodes are upgraded last
B. Cluster remains available with minimal downtime
C. Pods are deleted permanently during upgrade
D. Cluster goes down during node upgrades
Solution
Step 1: Analyze the upgrade steps
Each node is drained to safely evict pods, upgraded, then uncordoned to resume scheduling.
Step 2: Understand impact on cluster availability
Upgrading nodes one by one with draining keeps workloads running on other nodes, minimizing downtime.
Final Answer:
Cluster remains available with minimal downtime -> Option B
Quick Check:
Draining and upgrading nodes one by one = D [OK]
Hint: Upgrade nodes one at a time with drain/un-cordon for uptime [OK]
Common Mistakes:
Assuming cluster goes down during upgrades
Not draining nodes causing pod failures
Upgrading all nodes simultaneously
4. You ran kubectl drain node1 but pods did not evict. What is the likely cause?
medium
A. DaemonSet pods are blocking eviction
B. Node is already uncordoned
C. Control plane node cannot be drained
D. Pods have no local storage
Solution
Step 1: Understand drain behavior with DaemonSets
By default, drain blocks if DaemonSet pods are running unless --ignore-daemonsets is used.
Step 2: Check other options for correctness
Uncordon status does not block eviction; control plane nodes can be drained; pods without local storage do not block drain.
Final Answer:
DaemonSet pods are blocking eviction -> Option A
Quick Check:
DaemonSet pods block drain without flag = C [OK]
Hint: Use --ignore-daemonsets flag to drain nodes with DaemonSet pods [OK]
Common Mistakes:
Not using --ignore-daemonsets flag
Confusing cordon with drain
Assuming control plane nodes cannot be drained
5. You want to upgrade a large Kubernetes cluster with minimal downtime. Which strategy is best?
hard
A. Upgrade all control plane nodes simultaneously, then all workers simultaneously
B. Skip draining and upgrade nodes in random order
C. Drain all nodes at once, upgrade, then uncordon all nodes
D. Use cloud provider upgrade tools to upgrade control plane, then drain and upgrade workers one by one
Solution
Step 1: Consider cloud provider tools for control plane upgrade
Cloud tools often automate safe control plane upgrades reducing manual errors.
Step 2: Upgrade worker nodes one by one with drain/un-cordon
This approach avoids downtime by keeping workloads running on other nodes during upgrade.
Step 3: Evaluate other options for risks
Upgrading all nodes simultaneously or skipping drain risks downtime and pod failures.
Final Answer:
Use cloud provider upgrade tools to upgrade control plane, then drain and upgrade workers one by one -> Option D
Quick Check:
Cloud tools + sequential worker upgrade = B [OK]
Hint: Use cloud tools and upgrade workers one at a time with drain [OK]
Common Mistakes:
Upgrading all nodes simultaneously causing downtime