Отслеживание состояния ресурсов

Развертывание ресурсов делится на две стадии: применение ресурсов в кластер и отслеживание состояния этих ресурсов. werf реализует продвинутое отслеживание состояния ресурсов (только в werf) благодаря библиотеке kubedog.

Отслеживание ресурсов включено по умолчанию для всех поддерживаемых ресурсов, а именно для:

  • всех ресурсов релиза;

  • некоторых ресурсов, опосредованно создаваемых ресурсами релиза;

  • ресурсов вне релиза, указанных в аннотациях <name>.external-dependency.werf.io/resource.

Для ресурсов Deployment, StatefulSet, DaemonSet, Job и Flagger Canary задействуются специальные отслеживатели состояния, которые не только точно определяют, удачно или неудачно ресурс был развернут, но и отслеживают состояние дочерних ресурсов, таких как Pod’ы, создаваемые Deployment’ом.

Для остальных ресурсов, не имеющих специальных отслеживателей состояния, задействуется универсальный отслеживатель, который предполагает удачность развертывания ресурса на основании доступной в кластере информации о ресурсе. В редких случаях, если универсальный отслеживатель ошибается в своих предположениях, отслеживание для этого ресурса можно отключить.

Изменение критериев неудачного развертывания ресурса (только в werf)

По умолчанию werf прерывает развертывание и помечает его как неудачное, если произошло более двух ошибок при развертывании одного из ресурсов.

Изменить максимальное количество ошибок развертывания для ресурса можно аннотацией werf.io/failures-allowed-per-replica, например:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  annotations:
    werf.io/failures-allowed-per-replica: "5"

Если ресурс имеет аннотацию werf.io/fail-mode: HopeUntilEndOfDeployProcess, то ошибки его развертывания будут учитываться только после того, как все остальные ресурсы удачно развернутся.

А помеченный аннотацией werf.io/track-termination-mode: NonBlocking ресурс будет отслеживаться только пока все остальные ресурсы не будут развернуты, после чего этот ресурс автоматически посчитается развернутым, даже если это не так.

Универсальный отслеживатель отсутствие активности у ресурса в течение 4 минут считает ошибкой развертывания. Изменить этот период можно аннотацией werf.io/no-activity-timeout, например:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  annotations:
    werf.io/no-activity-timeout: 10m

Отключение отслеживания состояния и игнорирование ошибок ресурса (только в werf)

Для отключения отслеживания состояния ресурса и игнорирования ошибок его развертывания пометьте ресурс аннотациями werf.io/fail-mode: IgnoreAndContinueDeployProcess и werf.io/track-termination-mode: NonBlocking, например:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  annotations:
    werf.io/fail-mode: IgnoreAndContinueDeployProcess
    werf.io/track-termination-mode: NonBlocking

Отображение логов контейнеров (только в werf)

Благодаря библиотеке kubedog werf автоматически отображает логи контейнеров, создаваемых при развертывании Deployment, StatefulSet, DaemonSet и Job.

Выключить отображение логов для ресурса можно аннотацией werf.io/skip-logs: "true", например:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  annotations:
    werf.io/skip-logs: "true"

А в аннотации werf.io/show-logs-only-for-containers можно явно перечислить контейнеры, логи которых следует отображать, в то же время скрыв логи всех остальных контейнеров, например:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  annotations:
    werf.io/show-logs-only-for-containers: "backend,frontend"

… или наоборот — в аннотации werf.io/skip-logs-for-containers перечислить контейнеры, логи которых не следует отображать, в то же время отображая логи всех остальных контейнеров, например:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  annotations:
    werf.io/skip-logs-for-containers: "sidecar"

Для отображения только тех строк лога, которые соответствуют регулярному выражению, используйте аннотацию werf.io/log-regex, например:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  annotations:
    werf.io/log-regex: ".*ERROR.*"

Возможно отфильтровать строки лога согласно регулярному выражению не для всех контейнеров сразу, а только для определённого контейнера, если использовать аннотацию werf.io/log-regex-for-<имя контейнера>, например:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  annotations:
    werf.io/log-regex-for-backend: ".*ERROR.*"

Отображение Events ресурсов (только в werf)

Благодаря библиотеке kubedog werf может отображать Events отслеживаемых ресурсов, если ресурс имеет аннотацию werf.io/show-service-messages: "true", например:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  annotations:
    werf.io/show-service-messages: "true"