dodocli

Команды Dodo App Canary

Разберем использование канареечного релиза на примере, где namespace будет sre и приложение будет auth.

🌐 Установить канареечный релиз

Чтобы установить канарейку для всех deployment в определенном пространстве имен, используйте следующие команды:

  1. Распределение “по весу” (простым языком, процент трафика):
     dodo app canary set auth -n sre --image acrdodo/auth:latest --weight 10
    
  2. Распределение “по заголовку”
     dodo app canary set auth -n sre --image acrdodo/auth:latest --header x-canary:v2
    

    Чтобы установить канарейку для конкретного deployment, используйте следующую команду:

    dodo app canary set auth -n sre --deployment web --image acrdodo/auth:latest --header x-canary:v2
    

    Чтобы установить канарейку для конкретного deployment, но только поднять версию имаджа:

    dodo app canary set auth -n sre --deployment web --tag 2.0.5 --weight 10
    

    Параметры команды set

Команда set поддерживает следующие параметры:

❌ Убрать канарейку

Чтобы удалить канарейку, используйте следующие команды:

Для всех deployment:

dodo app canary delete auth -n sre -c d-yandex

Либо для конкретного deployment:

dodo app canary delete auth -n sre --deployment web

Параметры команды delete

Команда delete поддерживает следующие параметры:

Чтобы узнать статус канарейки, используйте следующие команды:

Для всех deployment:

dodo app canary status auth -n sre -c d-yandex

Либо для конкретного deployment:

dodo app canary status auth -n sre --deployment web

Параметры команды status

Команда status поддерживает следующие параметры:

📦 Взять канарейку за базу

Чтобы применить канарейку как базовую конфигурацию, используйте следующие команды:

dodo app canary apply -n sre -c d-yandex
dodo app canary apply -n sre --deployment web

Параметры команды apply

Команда apply поддерживает следующие параметры:

Как это работает

Данный код ходит в нужный неймспейс и в нужный dodoappservice ресурс, где для каждого deployment (или конкретного) создаёт копию и добавляет к её имени приставку --canary. Далее, для самой этой копии дописывает в свойства publicIngress, internalIngress и privateIngress дополнительное свойство extraAnnotations с разными значениями, в зависимости от параметров команды. После чего просто применяет изменения в кластере. К примеру:

"publicIngress": {
  "extraAnnotations": {
    "nginx.ingress.kubernetes.io/canary": "true",
    "nginx.ingress.kubernetes.io/canary-by-header": "always",
    "nginx.ingress.kubernetes.io/canary-by-header-value": "byHeaderValue",
  },