Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

Kubernetes - Using Rolling Updates for Deployments

Introduction

Rolling updates are a strategy for deploying updates to applications running in Kubernetes without downtime. This guide provides an understanding of how to use rolling updates for Kubernetes deployments to ensure smooth and uninterrupted updates.

Key Points:

  • Rolling updates allow you to update applications without downtime.
  • Kubernetes gradually replaces old versions of the application with new ones.
  • Rolling updates help maintain application availability during updates.

What are Rolling Updates?

Rolling updates are a deployment strategy that gradually replaces old versions of an application with new ones. Kubernetes achieves this by updating a few pods at a time, ensuring that some instances of the application are always running, which helps maintain availability during the update process.

# Example of a Deployment definition with rolling update strategy
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image:v1
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
                

Configuring Rolling Updates

You can configure rolling updates using the strategy field in the Deployment definition. The key parameters are:

  • maxUnavailable: Specifies the maximum number of pods that can be unavailable during the update.
  • maxSurge: Specifies the maximum number of pods that can be created above the desired number of pods during the update.
# Example of configuring rolling update parameters
strategy:
  type: RollingUpdate
  rollingUpdate:
    maxUnavailable: 1
    maxSurge: 1
                

Performing a Rolling Update

To perform a rolling update, update the image version in the Deployment definition and apply the changes. Kubernetes will automatically perform the rolling update based on the specified strategy.

# Update the image version in the Deployment definition
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image:v2 # Updated image version
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1

# Apply the changes to perform the rolling update
kubectl apply -f deployment.yaml
                

Monitoring Rolling Updates

You can monitor the progress of a rolling update using the following commands:

# Check the status of the rolling update
kubectl rollout status deployment my-deployment

# Get details about the Deployment
kubectl get deployment my-deployment

# Describe the Deployment to see more information
kubectl describe deployment my-deployment
                

Rolling Back Updates

If an issue occurs during a rolling update, you can roll back to the previous version using the following command:

# Roll back to the previous version
kubectl rollout undo deployment my-deployment
                

Best Practices

Follow these best practices when using rolling updates for Kubernetes deployments:

  • Test Updates: Thoroughly test updates in a staging environment before deploying to production.
  • Monitor Updates: Monitor the progress and performance of updates to detect and address issues promptly.
  • Use Health Checks: Configure liveness and readiness probes to ensure that only healthy pods receive traffic during updates.
  • Roll Back if Necessary: Be prepared to roll back updates if issues are detected.
  • Automate Updates: Use CI/CD pipelines to automate and manage rolling updates.

Conclusion

This guide provided an overview of using rolling updates for Kubernetes deployments, including configuring and performing rolling updates, monitoring progress, and rolling back if necessary. By following these best practices, you can ensure smooth and uninterrupted updates for your Kubernetes applications.