Blue-Green Deployments in Kubernetes

Saurabh AdhauSaurabh Adhau
5 min read

🎯 Learning Objective

Understand how to perform blue-green deployments in Kubernetes to minimize downtime and risk during application updates.

πŸ“– Scenario

You need to update your application in a Kubernetes cluster while ensuring minimal downtime and risk by maintaining two identical environments: one for the current version (blue) and one for the new version (green).

πŸ“˜ Explanation

Blue-green deployments involve running two identical production environments, where the blue environment serves the current traffic and the green environment hosts the new version. After validating the new version, traffic is switched from blue to green, enabling a seamless update.

πŸ”‘ Key Concepts

Blue-Green Deployment

A strategy that allows for zero-downtime deployments by using two identical environments.

Traffic Switching

Switching traffic between blue and green environments to promote the new version.

Rollback

Reverting traffic back to the blue environment if issues are detected in the green environment.

πŸ“„ Blue-Green Deployment Setup

Initial Setup for Blue Environment

Deploy the initial version of your application in the blue environment.

Deployment YAML for Blue Environment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-blue
  labels:
    app: myapp
    version: blue
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      version: blue
  template:
    metadata:
      labels:
        app: myapp
        version: blue
    spec:
      containers:
      - name: myapp
        image: myapp:v1
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  selector:
    app: myapp
    version: blue
  ports:
  - port: 80
    targetPort: 80

Deploy New Version in Green Environment

Deploy the new version of your application in the green environment.

Deployment YAML for Green Environment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-green
  labels:
    app: myapp
    version: green
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      version: green
  template:
    metadata:
      labels:
        app: myapp
        version: green
    spec:
      containers:
      - name: myapp
        image: myapp:v2
        ports:
        - containerPort: 80

Traffic Management with Service Selector

Use Kubernetes services to switch traffic between the blue and green environments.

Update Service Selector to Switch Traffic

apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  selector:
    app: myapp
    version: green
  ports:
  - port: 80
    targetPort: 80

πŸ› οΈ Steps to Implement Blue-Green Deployments

  1. Set Up the Blue Environment:

    • Apply the deployment YAML for the blue environment.

    • Ensure the service selector points to the blue environment.

  2. Deploy the Green Environment:

    • Apply the deployment YAML for the green environment.

    • Verify that the green environment is running correctly.

  3. Switch Traffic to the Green Environment:

    • Update the service selector to point to the green environment.

    • Verify that traffic is being served by the green environment.

  4. Monitor and Verify:

    • Monitor the green environment for any issues.

    • Roll back to the blue environment if necessary by updating the service selector.

πŸ” Detailed Example Explanation

Blue-Green Deployment

Running two identical environments ensures zero downtime during updates. Traffic is switched from blue to green after verifying the new version.

Traffic Switching

Updating the service selector enables seamless traffic switching between blue and green environments.

πŸ’‘ Benefits for Enterprise Applications

  • Zero Downtime: Ensures updates are deployed with minimal or no downtime.

  • Risk Mitigation: Allows thorough testing of the new version before traffic switch.

  • Easy Rollback: Simplifies reverting to the previous version if issues are detected.

πŸ“š Additional Concepts

Rollback to Blue Environment

If issues are detected in the green environment, update the service selector to revert to the blue environment.

Example

apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  selector:
    app: myapp
    version: blue
  ports:
  - port: 80
    targetPort: 80

Using Ingress for Traffic Management

An ingress controller can manage traffic between the blue and green environments.

Example

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: myapp
            port:
              number: 80

πŸ§ͺ Hands-on Activity

  1. Set Up the Blue Environment:

    • Define and apply the deployment YAML for the blue environment, ensuring the service selector points to it.
  2. Deploy the Green Environment:

    • Define and apply the deployment YAML for the green environment and verify it is running correctly.
  3. Switch Traffic to the Green Environment:

    • Update the service selector to point to the green environment and verify traffic is served by it.
  4. Monitor and Verify:

    • Monitor the green environment for any issues and roll back to the blue environment if necessary.
  5. Implement Ingress for Traffic Management:

    • Define and apply an ingress resource to manage traffic between the environments.
  6. Verify and Inspect:

    • Use the following commands to verify the setup:
    kubectl get services
    kubectl describe services myapp
    kubectl get ingress

πŸ‘ Pros and πŸ‘Ž Cons of Blue-Green Deployments

Pros

  • Zero Downtime: Provides seamless transitions between application versions.

  • Simple Rollbacks: Easy to revert to a stable version in case of issues.

Cons

  • Resource Intensive: Requires double the resources to run two environments simultaneously.

  • Complexity: The management of two environments can add complexity to the deployment process.

🀝 Engage and Reflect

Understanding and implementing blue-green deployments is crucial for ensuring zero-downtime updates and minimizing risk during application deployments.

πŸ’¬ Engage With Us: How do you plan to implement blue-green deployments in your Kubernetes projects? What challenges did you face while setting them up? Share your experiences and thoughts!

πŸ‘‰ Stay tuned for more learning opportunities and keep refining your Kubernetes knowledge to stay ahead in the ever-evolving tech landscape. Let’s continue to explore, innovate, and automate together!

10
Subscribe to my newsletter

Read articles from Saurabh Adhau directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Saurabh Adhau
Saurabh Adhau

As a DevOps Engineer, I thrive in the cloud and command a vast arsenal of tools and technologies: ☁️ AWS and Azure Cloud: Where the sky is the limit, I ensure applications soar. πŸ”¨ DevOps Toolbelt: Git, GitHub, GitLab – I master them all for smooth development workflows. 🧱 Infrastructure as Code: Terraform and Ansible sculpt infrastructure like a masterpiece. 🐳 Containerization: With Docker, I package applications for effortless deployment. πŸš€ Orchestration: Kubernetes conducts my application symphonies. 🌐 Web Servers: Nginx and Apache, my trusted gatekeepers of the web.