Sobes.tech
Back to questions
Middle+
4

Как вручную реализовать canary deployment в Kubernetes без дополнительных инструментов?

Companies where asked
AstonAston

Answer from AI

sobes.tech AI

Для ручной реализации canary deployment в Kubernetes без дополнительных инструментов можно использовать стратегию поэтапного обновления Deployment с контролем трафика через количество реплик.

Основная идея:

  1. Создать новый Deployment с новой версией приложения, но с небольшим количеством реплик (например, 1 из 5).
  2. Настроить Service так, чтобы он балансировал трафик между подами старой и новой версии (обычно Service выбирает все поды с нужным селектором).
  3. Наблюдать за поведением новой версии (логи, метрики, ошибки).
  4. Если всё хорошо — постепенно увеличивать количество реплик новой версии и уменьшать старой.
  5. В итоге заменить полностью старую версию новой.

Пример:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 4 # старая версия
  selector:
    matchLabels:
      app: myapp
      version: stable
  template:
    metadata:
      labels:
        app: myapp
        version: stable
    spec:
      containers:
      - name: myapp
        image: myapp:stable
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-canary
spec:
  replicas: 1 # canary
  selector:
    matchLabels:
      app: myapp
      version: canary
  template:
    metadata:
      labels:
        app: myapp
        version: canary
    spec:
      containers:
      - name: myapp
        image: myapp:canary
---
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

В этом примере Service направляет трафик на все поды с меткой app: myapp, включая и stable, и canary версии. За счет разного количества реплик можно контролировать долю трафика на новую версию.

Таким образом, без сложных инструментов можно вручную управлять canary deployment, постепенно увеличивая нагрузку на новую версию и снижая на старую.