Kubernetes Fundamentals

Mastering Kubernetes Deployments: Strategies for Rollbacks, Blue-Green, and Canary Deployments

Damian Igbe, Phd
Oct. 20, 2024, 9:54 p.m.

Subscribe to Newsletter

Be first to know about new blogs, training offers, and company news.

Kubernetes is a powerful tool for managing containerized applications, and the Deployment object plays a central role in orchestrating application updates. This blog will explore how to use Kubernetes Deployments for various deployment strategies, including rollback, blue-green deployments, and canary deployments.
 

What is a Kubernetes Deployment?

 
A Kubernetes Deployment is a declarative way to manage application updates and scaling. It ensures that the desired state of your application is maintained by managing the Pods and ReplicaSets associated with it. You can specify the number of replicas, the container image, and other configurations, allowing Kubernetes to automatically handle the rollout and scaling of your applications.
 

Key Features of Kubernetes Deployments

 
  • Declarative Updates: You specify the desired state, and Kubernetes manages the rest.
  • Scaling: Easily scale applications up or down.
  • Rolling Updates: Update applications with zero downtime.
  • Rollback: Quickly revert to a previous state if needed.
 
 

Using Deployments for Rollbacks

 
Kubernetes makes it simple to roll back to a previous Deployment version. If an update causes issues, you can revert to the last stable version with a single command.
 
Example:
 
1. Create a Deployment: Use your favorite editor to create a file called deploy.yaml with the following content.
 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: nginx
        ports:
        - containerPort: 80
 
2. Create the deployment with this command :
 
kubectl apply -f deployment.yaml
 
3. Update the Deployment with some changes. Open the file above and change the replicas to 4
 
4. Apply the changes with this command
 
kubectl apply -f deployment.yaml
 
3. Rollback:
 
Let's roll back to a previous version:
 
kubectl rollout undo deployment/my-app
 
This command reverts the Deployment to its previous state, maintaining the desired number of replicas and configurations.
 

Blue-Green Deployment

 
The blue-green deployment strategy minimizes downtime by having two identical environments (blue and green). One environment is live (handling production traffic) while the other is idle (ready for deployment).
 
Steps:
 
1. Deploy to the Idle Environment:
 
You can create a new Deployment for the green environment.
 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-green
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
      version: green
  template:
    metadata:
      labels:
        app: my-app
        version: green
    spec:
      containers:
      - name: my-app
        image: httpd
 
2. Switch Traffic:
 
Once the green environment is ready, you can update the Service to point to the green version.
 
apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app
    version: green
  ports:
    - port: 80
      targetPort: 80
 
3. Rollback if Needed:
 
If issues arise, you can switch back to the blue environment by updating the Service selector.
 

Canary Deployment

 
Canary deployments allow you to roll out changes gradually. Instead of deploying to all users at once, you direct a small percentage of traffic to the new version while the majority continues using the stable version.
 
Steps:
 
1. Create the Initial Deployment:
 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
      version: stable
  template:
    metadata:
      labels:
        app: my-app
        version: stable
    spec:
      containers:
      - name: my-app
        image: my-app:v1
 
2. Deploy the Canary Version:
 
Create a second Deployment for the canary version.
 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-canary
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
      version: canary
  template:
    metadata:
      labels:
        app: my-app
        version: canary
    spec:
      containers:
      - name: my-app
        image: my-app:v2
 
3. Update the Service to Route Traffic:
 
Modify the Service to route some traffic to the canary version:
 
apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app
  ports:
    - port: 80
      targetPort: 80
 
You can use tools like Istio or Linkerd to manage traffic routing more effectively during the canary phase.
 
4. Monitor and Scale:
 
Monitor the canary deployment's performance. If successful, gradually increase its replicas while decreasing the stable version’s replicas. If issues arise, roll back the canary by scaling it down and scaling up the stable version.
 

Conclusion

 
Kubernetes Deployments offer a robust mechanism for managing application lifecycle and updates. Understanding how to effectively use rollbacks, blue-green deployments, and canary deployments can significantly improve your application's reliability and performance.
 
By leveraging these strategies, you can minimize downtime, enhance user experience, and streamline your deployment processes in a Kubernetes environment. Whether you’re a seasoned Kubernetes user or just starting, mastering Deployments is essential for modern application development and deployment.

Zero-to-Hero Program: We Train and Mentor you to land your first Tech role