DEV Community

Mageshwaran Sekar
Mageshwaran Sekar

Posted on

1 1 1 1

Different Types of Deployment in Kubernetes

Kubernetes, an open-source container orchestration platform, allows you to automate the deployment, scaling, and management of containerized applications. One of its core features is its ability to manage various deployment strategies, providing flexibility and reliability for modern application development.

In Kubernetes, the deployment process refers to the way in which applications or services are updated, scaled, and rolled back. Understanding different deployment strategies is crucial for efficiently managing your applications in a production environment.

This article will explore different types of deployment in Kubernetes, their use cases, and provide examples for each strategy.

Rolling Deployment

A Rolling Deployment is the default deployment strategy in Kubernetes. It gradually replaces the old version of the application with the new one, ensuring that there’s no downtime during the process. This is especially useful when updating a service in production, as it prevents service disruption.

Key Features

  • Ensures zero downtime by incrementally updating pods.
  • Maintains the desired number of replicas during updates.
  • Gradually replaces the old version with the new version.

Example

Consider an application running with three replicas. When a new version of the app is deployed, Kubernetes will update one pod at a time, ensuring that at least two pods are always running.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app-container
          image: my-app:v2  # new version of the application
Enter fullscreen mode Exit fullscreen mode

Recreate Deployment

In a Recreate Deployment, Kubernetes shuts down all the existing pods before starting the new version of the application. This strategy is useful when you cannot run the old and new versions of an application simultaneously, or when you need to apply major changes to the system, such as database migrations.

Key Features

  • All old pods are terminated before new pods are created.
  • Can result in brief downtime as there’s no overlap in running pods.
  • Suitable for applications that require a restart to apply changes.

Example

In this example, when the application is updated, Kubernetes will first terminate all existing pods and then create new ones.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment
spec:
  replicas: 3
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app-container
          image: my-app:v2  # new version of the application
Enter fullscreen mode Exit fullscreen mode

Blue/Green Deployment

A Blue/Green Deployment involves running two environments (Blue and Green). The Blue environment represents the current production version of the application, while the Green environment is where the new version is deployed. After testing the Green environment, the traffic is switched from Blue to Green, making the new version live.

Key Features

  • Two environments (Blue and Green) are maintained.
  • Minimal downtime when switching from Blue to Green.
  • Allows for easy rollback by switching traffic back to Blue.

Example

You first deploy the new version (Green) alongside the current version (Blue). After verifying that the new version works correctly, you can switch the traffic to the Green environment using a service update.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-green-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app-green
  template:
    metadata:
      labels:
        app: my-app-green
    spec:
      containers:
        - name: my-app-container
          image: my-app:v2  # Green environment (new version)
Enter fullscreen mode Exit fullscreen mode

Once Green is verified, you can switch the Kubernetes service to point to the Green environment:

apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app-green  # Switch to the Green version
  ports:
    - port: 80
      targetPort: 8080
Enter fullscreen mode Exit fullscreen mode

Canary Deployment

A Canary Deployment allows you to roll out a new version of an application to a small subset of users (the "canary group") before rolling it out to the entire population. This approach is useful for testing new features in a controlled manner, ensuring that any potential issues are detected early without affecting all users.

Key Features

  • Gradual release of the new version.
  • Traffic is split between the old and new versions.
  • Suitable for testing new features with a subset of users.

Example

In this example, 90% of the traffic goes to the current version, and 10% is sent to the new version (Canary). You can use Kubernetes' replica scaling to adjust the ratio of traffic distribution.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment-canary
spec:
  replicas: 5
  selector:
    matchLabels:
      app: my-app-canary
  template:
    metadata:
      labels:
        app: my-app-canary
    spec:
      containers:
        - name: my-app-container
          image: my-app:v2  # New version (canary)
Enter fullscreen mode Exit fullscreen mode

You can control the amount of traffic going to the new version by adjusting the number of replicas and how you configure the Kubernetes Service.

apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app-canary  # Target the canary deployment
  ports:
    - port: 80
      targetPort: 8080
Enter fullscreen mode Exit fullscreen mode

A/B Testing Deployment

A/B Testing Deployment is similar to Canary Deployment, but instead of testing the new version of an application with a fixed percentage of users, it involves testing two versions of the application (Version A and Version B) with different segments of users. This is often used to measure user reactions to different features or user interface changes.

Key Features

  • Multiple versions (A and B) of an application are deployed simultaneously.
  • Traffic is split between versions for testing.
  • Useful for feature comparisons and user experience optimizations.

Example

In this case, you might deploy two versions, A and B, and route traffic equally between the two versions.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment-a
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app-a
  template:
    metadata:
      labels:
        app: my-app-a
    spec:
      containers:
        - name: my-app-container
          image: my-app:v1  # Version A
Enter fullscreen mode Exit fullscreen mode
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment-b
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app-b
  template:
    metadata:
      labels:
        app: my-app-b
    spec:
      containers:
        - name: my-app-container
          image: my-app:v2  # Version B
Enter fullscreen mode Exit fullscreen mode

Traffic can be routed to each version using a Kubernetes Service or an Ingress Controller.

Conclusion

Kubernetes provides several deployment strategies that help with managing application lifecycle, scaling, and minimizing downtime. Choosing the right deployment strategy depends on your application's requirements, the desired level of risk, and how you want to control the release process.

  • Rolling Deployment is best for zero-downtime updates.
  • Recreate Deployment is suitable when the old version must be completely replaced.
  • Blue/Green Deployment offers a clear rollback path and minimal downtime.
  • Canary Deployment is ideal for gradual rollouts with controlled risk.
  • A/B Testing Deployment allows for the evaluation of multiple versions to optimize user experience.

By understanding these deployment strategies, you can select the one that best fits your use case and streamline your application delivery process in Kubernetes.

Image of Timescale

📊 Benchmarking Databases for Real-Time Analytics Applications

Benchmarking Timescale, Clickhouse, Postgres, MySQL, MongoDB, and DuckDB for real-time analytics. Introducing RTABench 🚀

Read full post →

Top comments (0)

5 Playwright CLI Flags That Will Transform Your Testing Workflow

  • 0:56 --last-failed
  • 2:34 --only-changed
  • 4:27 --repeat-each
  • 5:15 --forbid-only
  • 5:51 --ui --headed --workers 1

Learn how these powerful command-line options can save you time, strengthen your test suite, and streamline your Playwright testing experience. Click on any timestamp above to jump directly to that section in the tutorial!

👋 Kindness is contagious

Explore a trove of insights in this engaging article, celebrated within our welcoming DEV Community. Developers from every background are invited to join and enhance our shared wisdom.

A genuine "thank you" can truly uplift someone’s day. Feel free to express your gratitude in the comments below!

On DEV, our collective exchange of knowledge lightens the road ahead and strengthens our community bonds. Found something valuable here? A small thank you to the author can make a big difference.

Okay