Kubernetes Deployment Strategies From Scratch

author

By Freecoderteam

Sep 20, 2025

22

image

Kubernetes Deployment Strategies From Scratch

Kubernetes has become the de facto standard for container orchestration, providing a robust platform for deploying, scaling, and managing containerized applications. One of the key aspects of Kubernetes is its support for various deployment strategies, which allow developers and DevOps teams to control how applications are updated and rolled out in a controlled manner.

In this blog post, we'll explore Kubernetes deployment strategies from scratch, covering the core concepts, practical examples, best practices, and actionable insights. Whether you're a beginner or an experienced Kubernetes user, this guide will help you understand and implement deployment strategies effectively.


Table of Contents


Understanding Kubernetes Deployments

Before diving into deployment strategies, let's briefly review what a Kubernetes Deployment is. A Deployment is a Kubernetes resource that manages the rollout and scaling of application pods. It ensures that the desired state of the application (the number of replicas, version, etc.) is maintained. Deployments are particularly useful for stateless applications, where pods can be replaced without data loss.

Key components of a Deployment include:

  • Pod Templates: Define the container(s) that make up the application.
  • Replicas: Specify the number of instances of the application to run.
  • Rolling Update Strategy: Controls how new versions of the application are deployed.
  • Rollback: Allows rolling back to a previous version if needed.

Deployments are managed by the Kubernetes API and the kubectl command-line tool.


Key Deployment Strategies

Kubernetes offers several deployment strategies to control how applications are updated. Let's explore the most common ones:

1. Recreate Deployment Strategy

The Recreate strategy is the simplest and most straightforward approach. When a new version of the application is deployed, Kubernetes shuts down all existing pods and then starts new ones with the updated image or configuration.

Pros:

  • Simplicity: Easy to understand and implement.
  • Clean Start: Ensures that all old pods are terminated before new ones are started.

Cons:

  • Downtime: There is a period of downtime while the old pods are terminated and new ones are started.
  • Not Ideal for Production: Unsuitable for applications that require high availability.

Use Case:

Best suited for non-critical applications or during maintenance windows when downtime is acceptable.

Example:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-app
spec:
  replicas: 3
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: example-app
    spec:
      containers:
      - name: example-container
        image: your-docker-image:latest

2. Rolling Update Strategy

The Rolling Update strategy is the default and most widely used deployment strategy in Kubernetes. It ensures that the application remains available during the update by gradually replacing old pods with new ones. Kubernetes uses a rolling update to control the rollout process, ensuring that at least some pods are always running.

How It Works:

  1. Kubernetes starts new pods with the updated image.
  2. Once the new pods are running and healthy, it terminates the old pods.
  3. This process continues until all pods are updated.

Pros:

  • Zero Downtime: Maintains application availability during the update.
  • Controlled Rollout: Allows specifying the number of pods to update at once and the maximum downtime.

Cons:

  • Complexity: Requires careful configuration to ensure smooth updates.
  • Risk of Partial Rollouts: If something goes wrong during the update, you may end up with a mix of old and new pods.

Key Configuration Options:

  • maxUnavailable: The maximum number of pods that can be unavailable during the update.
  • maxSurge: The maximum number of pods that can be created beyond the desired number of replicas.

Example:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-app
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
    metadata:
      labels:
        app: example-app
    spec:
      containers:
      - name: example-container
        image: your-docker-image:latest

In this example:

  • maxUnavailable: 1 ensures that at most one pod is unavailable at a time.
  • maxSurge: 1 allows Kubernetes to create one additional pod during the update.

3. Blue/Green Deployment Strategy

The Blue/Green deployment strategy involves running two identical environments (Blue and Green) and switching traffic between them. During an update, the new version is deployed to the Green environment, and once it's validated, traffic is redirected to the Green environment, while the Blue environment is shut down.

How It Works:

  1. Deploy the application in two separate environments (Blue and Green).
  2. Test the Green environment thoroughly.
  3. Redirect traffic to the Green environment.
  4. Shut down the Blue environment.

Pros:

  • Zero Downtime: No interruption in service during the update.
  • Safe Rollback: If the new version has issues, traffic can be quickly switched back to the Blue environment.

Cons:

  • Resource Overhead: Requires maintaining two identical environments.
  • Complexity: Requires careful management of traffic routing and environment management.

Example:

Using Kubernetes Services and Ingress for traffic routing:

# Blue Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-app-blue
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: example-app
        environment: blue
    spec:
      containers:
      - name: example-container
        image: your-docker-image:blue

# Green Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-app-green
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: example-app
        environment: green
    spec:
      containers:
      - name: example-container
        image: your-docker-image:green

# Service for Blue
apiVersion: v1
kind: Service
metadata:
  name: example-app-blue
spec:
  selector:
    app: example-app
    environment: blue
  ports:
  - port: 80
    targetPort: 8080

# Service for Green
apiVersion: v1
kind: Service
metadata:
  name: example-app-green
spec:
  selector:
    app: example-app
    environment: green
  ports:
  - port: 80
    targetPort: 8080

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

In this example:

  • Two separate Deployments (example-app-blue and example-app-green) run in parallel.
  • An Ingress routes traffic to either the Blue or Green environment based on the desired configuration.

4. Canary Deployment Strategy

The Canary deployment strategy involves gradually rolling out a new version of the application to a small subset of users or traffic. This allows for early detection of issues before fully deploying the new version to all users.

How It Works:

  1. Deploy the new version to a small subset of pods (the canary).
  2. Monitor the canary for issues.
  3. Gradually increase the number of canary pods if everything is working well.
  4. Fully roll out the new version.

Pros:

  • Risk Mitigation: Identifies issues early by exposing the new version to a small subset of users.
  • Gradual Rollout: Reduces the impact of failures by limiting exposure.

Cons:

  • Complexity: Requires careful monitoring and traffic management.
  • Requires Automation: Typically implemented using tools like Istio or NGINX Ingress.

Example:

Using NGINX Ingress for traffic splitting:

# NGINX Ingress Controller
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-by-header: "x-canary: enabled"
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: example-app-canary
            port:
              number: 80

In this example:

  • The nginx.ingress.kubernetes.io/canary annotation enables Canary deployment.
  • Traffic is split based on the x-canary header, allowing you to control which requests go to the Canary version.

Choosing the Right Deployment Strategy

Selecting the appropriate deployment strategy depends on your application's requirements, such as:

  • Downtime Tolerance: Can the application afford any downtime?
  • Complexity: How complex is the application, and how much control do you need over the update process?
  • Testing Requirements: Do you need to test the new version in production-like conditions before full rollout?

Here's a quick guide:

  • Recreate: Use for simple, non-critical applications.
  • Rolling Update: Best for most production applications that require zero downtime.
  • Blue/Green: Ideal for mission-critical applications where zero downtime and rollback are essential.
  • Canary: Suitable for applications where gradual testing in production is needed.

Best Practices for Kubernetes Deployments

  1. Use Rolling Updates by Default: Unless you have a specific reason to use Recreate, Rolling Updates are the safest and most reliable strategy.
  2. Monitor Traffic: Use tools like Prometheus and Grafana to monitor application health during and after deployment.
  3. Automate Rollbacks: Configure automatic rollbacks if the new version fails health checks.
  4. Use Version Tags: Always tag Docker images with specific versions to maintain consistency.
  5. Test in Staging: Deploy new versions to a staging environment before pushing to production.

Practical Example: Implementing a Rolling Update

Let's walk through a practical example of implementing a Rolling Update strategy using Kubernetes.

Step 1: Create a Deployment

First, create a Deployment with a specific image version:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-app
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
    metadata:
      labels:
        app: example-app
    spec:
      containers:
      - name: example-container
        image: your-docker-image:1.0

Apply the Deployment:

kubectl apply -f example-deployment.yaml

Step 2: Update the Image Version

Update the Deployment to use a new image version:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-app
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
    metadata:
      labels:
        app: example-app
    spec:
      containers:
      - name: example-container
        image: your-docker-image:1.1

Apply the updated Deployment:

kubectl apply -f example-deployment.yaml

Step 3: Monitor the Rollout

Watch the rollout process:

kubectl rollout status deployment/example-app

Use kubectl get pods to see the pods being updated:

kubectl get pods -l app=example-app

Step 4: Rollback if Needed

If the new version fails, you can rollback to the previous version:

kubectl rollout undo deployment/example-app

Conclusion

Kubernetes deployment strategies are a critical part of managing containerized applications effectively. Choosing the right strategy depends on your specific use case, but Rolling Updates are generally the most versatile and widely used approach. By understanding and implementing these strategies, you can ensure smooth, controlled, and reliable updates to your applications.

Whether you're deploying a simple application or managing a complex microservices architecture, Kubernetes provides the tools and flexibility to meet your needs. With the right strategy and monitoring in place, you can minimize downtime, reduce risks, and deliver high-quality software to your users.


Feel free to reach out if you have any questions or need further clarification on any of the topics covered! 🚀


Stay updated with the latest Kubernetes best practices and deployment strategies by following industry trends and experimenting with your own projects. Happy deploying!

Subscribe to Receive Future Updates

Stay informed about our latest updates, services, and special offers. Subscribe now to receive valuable insights and news directly to your inbox.

No spam guaranteed, So please don’t send any spam mail.