Sobes.tech
Middle+

Mis on kanarite paigaldused?

sobes.tech AI

Vastus AI-lt

Canary deployment is a strategy for releasing new features, where the update is gradually rolled out to a small subset of users, and if no issues arise, it is then spread to the entire audience.

Main steps:

  1. Deploy the canary group: The new version of the application is deployed on a small subset of servers or users.
  2. Monitoring: Careful monitoring of metrics (errors, performance, user behavior) for the canary group.
  3. Expansion or rollback:
    • If monitoring shows success, the deployment gradually expands to a larger group of users.
    • If problems are detected, the deployment is rolled back for the canary group, protecting the main user base.

Advantages:

  • Risk minimization: Problems affect a small subset of users.
  • Quick rollback: Easy to revert to the previous version.
  • Testing in real conditions: Evaluation of the new functionality's behavior under real load.

Disadvantages:

  • Infrastructure complexity: Support for multiple versions of the application simultaneously is required.
  • Traffic management: Mechanisms are needed to route traffic to different versions.
  • Data analysis: Efficient collection and analysis of metrics are necessary.

Example implementation in Kubernetes:

// Deployment for v1
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-v1
spec:
  replicas: 10 // Main count
  selector:
    matchLabels:
      app: my-app
      version: v1
  template:
    metadata:
      labels:
        app: my-app
        version: v1
    spec:
      containers:
      - name: my-app
        image: my-registry/my-app:v1

---

// Deployment for canary v2
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-v2-canary
spec:
  replicas: 1 // Canary group
  selector:
    matchLabels:
      app: my-app
      version: v2
  template:
    metadata:
      labels:
        app: my-app
        version: v2
    spec:
      containers:
      - name: my-app
        image: my-registry/my-app:v2

---

// Service for traffic routing (using selectors)
apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

Traffic distribution between v1 and v2 is managed using Ingress controllers (e.g., Nginx Ingress, Istio) with weighted traffic distribution capabilities.