Skip to main content

Lab 3.3 - Deployments and Rolling Updates

Objectives​

By the end of this lab, you will be able to:

  • Create and manage Deployments
  • Perform rolling updates
  • Manage rollbacks
  • Scale Deployments

Exercise 1: Create a Deployment​

Step 1: Create the YAML file​

Create deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
labels:
app: web
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80

Step 2: Apply​

kubectl apply -f deployment.yaml

Step 3: Verify​

# View the Deployment
kubectl get deployment

# View the created ReplicaSets
kubectl get replicasets

# View the Pods
kubectl get pods -l app=web

Exercise 2: Rolling Update​

Step 1: Update the image​

# Update to nginx:1.21
kubectl set image deployment/web-deployment nginx=nginx:1.21

# Observe the process
kubectl rollout status deployment/web-deployment

Step 2: Observe the ReplicaSets​

# View the ReplicaSets
kubectl get replicasets -w

# In another terminal, view the Pods
kubectl get pods -l app=web -w

Observation: A new ReplicaSet is created, Pods are replaced progressively.


Exercise 3: Rollback​

Step 1: View the history​

# Rollout history
kubectl rollout history deployment/web-deployment

# Details of a revision
kubectl rollout history deployment/web-deployment --revision=2

Step 2: Perform a rollback​

# Rollback to the previous version
kubectl rollout undo deployment/web-deployment

# Verify
kubectl rollout status deployment/web-deployment

Step 3: Rollback to a specific revision​

# Rollback to revision 1
kubectl rollout undo deployment/web-deployment --to-revision=1

Exercise 4: Scaling​

Step 1: Manual scaling​

# Increase to 5 replicas
kubectl scale deployment web-deployment --replicas=5

# Verify
kubectl get pods -l app=web

Step 2: Scaling via editing​

# Edit the Deployment
kubectl edit deployment web-deployment

# Change replicas: 5 to replicas: 2
# Save and quit

Exercise 5: Pause and Resume​

# Pause the rollout
kubectl rollout pause deployment/web-deployment

# Make modifications
kubectl set image deployment/web-deployment nginx=nginx:1.22

# Verify (nothing changes)
kubectl get pods -l app=web

# Resume the rollout
kubectl rollout resume deployment/web-deployment

# Observe
kubectl rollout status deployment/web-deployment

Cleanup​

kubectl delete deployment web-deployment

Reflection Questions​

  1. What is the difference between a Deployment and a ReplicaSet?
  2. How does a rolling update work?
  3. Why use a rollback?
  4. When to use pause/resume?

Next Steps​

Lab 3.4: Configuring Health Checks
Chapter 3.8: Health Checks


Lab created: December 2024