Reloader#

Reloader – это контроллер Kubernetes, который автоматически перезапускает (пересоздает) рабочие нагрузки, такие как Deployment, StatefulSet, DaemonSet и ArgoRollout, при обновлении связанных ConfigMap или Secret.

По умолчанию Kubernetes не перезапускает pod при изменении этих ресурсов, что может привести к использованию устаревших конфигураций. Reloader решает эту проблему, обеспечивая актуальность конфигураций в работающих приложениях.

Основные задачи и возможности
  • Автоматический перезапуск pod: при изменении ConfigMap или Secret, на которые ссылается pod, Reloader инициирует его пересоздание через rollout или restart, чтобы изменения вступили в силу.

  • Гибкое управление через аннотации: позволяет указать, какие именно ресурсы должны отслеживаться:

    • reloader.stakater.com/auto: "true" – следить за всеми ConfigMap и Secret в шаблоне pod;

    • secret.reloader.stakater.com/auto: "true" – следить только за Secret;

    • configmap.reloader.stakater.com/auto: "true" – следить только за ConfigMap.

  • Поддержка разных стратегий перезапуска:

    Можно выбрать:

    • rollout — изменение шаблона pod (по умолчанию);

    • restart — удаление pod без изменения манифеста (удобно при использовании GitOps, например, с ArgoCD).

  • Интеграция с GitOps и CI/CD: обеспечивает быстрое применение изменений конфигураций без ручного вмешательства, подходит для автоматизированных сред.

  • Работа с внешними источниками: совместим с такими инструментами, как ExternalSecrets, SealedSecrets и Сert-manager, автоматически реагируя на создаваемые ими секреты.

Примечание

Reloader устанавливается по умолчанию с компонентом Pod-management.

Конфигурация values#

Параметры Reloader можно переопределить через редактирование нужных значений в spec.values. Общее описание конфигурации values для инструментов приведено в разделе «Конфигурации инструментов дополнительных компонентов».

kubernetes – определить параметры подключения к Kubernetes API#

Параметр

Описание

Значение по умолчанию

kubernetes.host

URL хоста Kubernetes API для подключения

https://kubernetes.default

nameOverride – переопределение имени чарта#

Параметр

Описание

Значение по умолчанию

nameOverride

Переопределение базового имени ресурсов чарта для генерации имен

""

fullnameOverride – полное переопределение имени чарта#

Параметр

Описание

Значение по умолчанию

fullnameOverride

Полное переопределение имени для всех создаваемых ресурсов чарта

""

image – параметры контейнерного образа#

Параметр

Описание

Значение по умолчанию

image.repository

Репозиторий образа Reloader с использованием шаблонных переменных

'{{ .Values.global.image.registry }}/{{ .Values.global.image.repository }}/{{ .Values.global.dappVersion }}/dapp-reloader/reloader'

image.tag

Тег образа контейнера

v1.4.19

image.digest

Дайджест образа Reloader для проверки целостности

""

image.pullPolicy

Политика загрузки образа.
Возможные значения: Always, IfNotPresent, Never

IfNotPresent

reloader – определить основные настройки работы reloader#

Параметр

Описание

Значение по умолчанию

reloader.autoReloadAll

Автоматическая перезагрузка всех ресурсов при изменении их ConfigMap/Secret без необходимости добавления аннотаций; при true все ресурсы без аннотации reloader.stakater.com/auto: "false" будут автоматически перезагружены

false

reloader.isArgoRollouts

Включение поддержки Argo Rollouts для отслеживания изменений и перезагрузки

false

reloader.isOpenshift

Включение поддержки OpenShift DeploymentConfigs

false

reloader.ignoreSecrets

Игнорирование изменений Secret-объектов

false

reloader.ignoreConfigMaps

Игнорирование изменений ConfigMap-объектов

false

reloader.ignoreJobs

Исключение job из автоматического мониторинга перезагрузки

false

reloader.ignoreCronJobs

Исключение CronJob из автоматического мониторинга перезагрузки

false

reloader.reloadOnCreate

Включение перезагрузки при создании новых ConfigMap/Secret

false

reloader.reloadOnDelete

Включение перезагрузки при удалении ConfigMap/Secret

false

reloader.syncAfterRestart

Включение синхронизации после перезагрузки Reloader для Add-событий (требует reloadOnCreate=true)

false

reloader.reloadStrategy

Стратегия запуска перезагрузки ресурсов.
Возможные значения: default, env-vars, annotations

default

reloader.ignoreNamespaces

Разделенный запятыми список пространств имен для игнорирования

""

reloader.namespaceSelector

Разделенный запятыми список селекторов меток Kubernetes для выбора пространств имен

""

reloader.resourceLabelSelector

Разделенный запятыми список селекторов меток для выбора ConfigMap/Secret-объектов

""

reloader.logFormat

Формат логирования.
Возможные значения: json или ""

""

reloader.logLevel

Уровень логирования.
Возможные значения: trace, debug, info, warning, error, fatal, panic

info

reloader.watchGlobally

Разрешение Reloader отслеживать ConfigMap/Secret во всех пространствах имен (true) или только в одном (false)

true

reloader.enableHA

Включение выбора лидера (leader election) для запуска нескольких реплик в режиме высокой доступности

false

reloader.enablePProf

Включение профилирования pprof для анализа производительности

false

reloader.pprofAddr

Адрес для запуска сервера pprof

:6060

reloader.enableCSIIntegration

Включение интеграции с CSI-источниками конфигурации и секретов

false

reloader.readOnlyRootFileSystem

Применение политики безопасности для файловой системы только для чтения

false

reloader.legacy.rbac

Использование устаревшего режима RBAC

false

reloader.matchLabels

Метки pod для совпадения и отслеживания
Пример конфигурации:

key: value

{}

reloader.enableMetricsByNamespace

Публикация дополнительного счетчика Prometheus для перезагрузок по пространствам имен (может иметь высокую кардинальность в больших кластерах)

false

deployment – определить параметры Deployment для reloader#

Параметр

Описание

Значение по умолчанию

reloader.deployment.dnsConfig

Пользовательская конфигурация DNS для pod.
Пример конфигурации:

nameservers:
  - 1.2.3.4
searches:
  - ns1.svc.cluster-domain.example
  - my.dns.search.suffix
options:
  - name: ndots
    value: "1"
  - name: attempts
    value: "3"

{}

reloader.deployment.replicas

Количество реплик pod; для запуска нескольких реплик установите reloader.enableHA=true

1

reloader.deployment.revisionHistoryLimit

Количество предыдущих версий ресурса, сохраняемых для отката

2

reloader.deployment.hostUsers

Использование пространства имен пользователя хоста

~

reloader.deployment.nodeSelector

Селектор узлов для планирования pod.
Пример конфигурации:

cloud.google.com/gke-nodepool: default-pool

{}

reloader.deployment.affinity

Настройки правила привязки (affinity и anti-affinity) pod к узлам.
Пример конфигурации:

nodeAffinity:
  requiredDuringSchedulingIgnoredDuringExecution:
    nodeSelectorTerms:
      - matchExpressions:
          - key: "node-role.kubernetes.io/infra-worker"
            operator: "Exists"

{}

reloader.deployment.volumeMounts

Дополнительные точки монтирования томов (VolumeMount)

[]

reloader.deployment.volumes

Дополнительные тома (Volume) для pod

[]

reloader.deployment.securityContext.runAsNonRoot

Требование запуска контейнера от имени непривилегированного пользователя

true

reloader.deployment.securityContext.runAsUser

ID пользователя для запуска контейнера

65534

reloader.deployment.securityContext.seccompProfile.type

Тип профиля seccomp для ограничения системных вызовов.
Возможные значения: RuntimeDefault, Unconfined, Localhost

RuntimeDefault

reloader.deployment.containerSecurityContext.capabilities.drop

Список возможностей (capabilities), отзываемых у контейнера

- ALL

reloader.deployment.containerSecurityContext.allowPrivilegeEscalation

Активация разрешения на эскалацию привилегий в контейнере

false

reloader.deployment.containerSecurityContext.readOnlyRootFilesystem

Монтирование корневой файловой системы в режиме «только для чтения»

true

reloader.deployment.tolerations

Toleration для размещения pod на узлах с ограничениями (taints).
Пример конфигурации:

- key: "node-role.kubernetes.io/infra-worker"
  operator: "Exists"
  effect: "NoSchedule"

[]

reloader.deployment.topologySpreadConstraints

Ограничения топологии для равномерного распределения pod по зонам доступности и узлам.
Пример конфигурации:

- maxSkew: 1
  topologyKey: zone
  whenUnsatisfiable: DoNotSchedule
  labelSelector:
    matchLabels:
      app.kubernetes.io/instance: my-app

[]

reloader.deployment.annotations

Аннотации для развертывания

{}

reloader.deployment.labels.provider

Провайдер приложения

stakater

reloader.deployment.labels.group

Группа приложения

com.stakater.platform

reloader.deployment.labels.version

Версия приложения

v1.4.19

reloader.deployment.env.open

Открытые переменные окружения в формате ключ-значение

~

reloader.deployment.env.secret

Переменные окружения из Secret-объектов
Пример конфигурации:

ALERT_ON_RELOAD: 
  "true"
  "false"
ALERT_SINK: "slack"
ALERT_WEBHOOK_URL: "webhook_url"
ALERT_ADDITIONAL_INFO: "Additional Info like Cluster Name if needed"

~

reloader.deployment.env.field

Переменные окружения из других полей pod

~

reloader.deployment.env.existing

Переменные окружения из существующих Secret-объектов
Пример конфигурации:

existing_secret_name:
  ALERT_ON_RELOAD: alert_on_reload_key
  ALERT_SINK: alert_sink_key
  ALERT_WEBHOOK_URL: alert_webhook_key
  ALERT_ADDITIONAL_INFO: alert_additional_info_key

~

reloader.deployment.livenessProbe

Параметры проверки работоспособности (timeoutSeconds, failureThreshold, periodSeconds, successThreshold)
Пример конфигурации:

timeoutSeconds: 5
failureThreshold: 5
periodSeconds: 10
successThreshold: 1

{}

reloader.deployment.readinessProbe

Параметры проверки готовности (timeoutSeconds, failureThreshold, periodSeconds, successThreshold)
Пример конфигурации:

timeoutSeconds: 15
failureThreshold: 5
periodSeconds: 10
successThreshold: 1

{}

reloader.deployment.resources.limits.cpu

Ограничение ресурсов CPU для контейнера

"100m"

reloader.deployment.resources.limits.memory

Ограничение ресурсов памяти для контейнера

"512Mi"

reloader.deployment.resources.requests.cpu

Запрашиваемые ресурсы CPU для контейнера

"10m"

reloader.deployment.resources.requests.memory

Запрашиваемые ресурсы памяти для контейнера

"128Mi"

reloader.deployment.pod.annotations

Аннотации для pod

{}

reloader.deployment.priorityClassName

Имя PriorityClass для pod

""

reloader.deployment.gomaxprocsOverride

Переопределение переменной окружения GOMAXPROCS для среды исполнения Go; оставьте пустым для использования значения по умолчанию

""

reloader.deployment.gomemlimitOverride

Переопределение переменной окружения GOMEMLIMIT для среды исполнения Go; оставьте пустым для использования значения по умолчанию

""

service – настройки Service#

Параметр

Описание

Значение по умолчанию

reloader.service

Конфигурация Service для Reloader (labels, annotations, port)
Пример конфигурации:

labels: {}
annotations: {}
port: 9090

{}

rbac – настройки RBAC (управление доступом на основе ролей)#

Параметр

Описание

Значение по умолчанию

reloader.rbac.enabled

Создание ресурсов RBAC (Role, ClusterRole, RoleBinding, ClusterRoleBinding)

true

reloader.rbac.labels

Метки для ресурсов RBAC

{}

serviceAccount – настройки сервисного аккаунта#

Параметр

Описание

Значение по умолчанию

reloader.serviceAccount.create

Создание ServiceAccount для Reloader

true

reloader.serviceAccount.labels

Метки для ServiceAccount

{}

reloader.serviceAccount.annotations

Аннотации для ServiceAccount

{}

reloader.serviceAccount.name

Имя ServiceAccount; если не задано и create=true, имя генерируется автоматически

~

custom_annotations – определить пользовательские аннотации для entrypoint reloader#

Параметр

Описание

Значение по умолчанию

reloader.custom_annotations

Дополнительные аннотации для переопределения стандартных (configmap, secret)
Пример конфигурации:

configmap: "my.company.com/configmap"
secret: "my.company.com/secret"
ignore: "my.company.com/reloader-ignore"

{}

serviceMonitor – параметры ServiceMonitor#

Параметр

Описание

Значение по умолчанию

reloader.serviceMonitor.enabled

Создание ServiceMonitor для сбора метрик Prometheus (устаревший способ, используйте podMonitor)

false

reloader.serviceMonitor.labels

Метки для ресурса ServiceMonitor для фильтрации в Prometheus

{}

reloader.serviceMonitor.annotations

Аннотации для ресурса ServiceMonitor

{}

reloader.serviceMonitor.honorLabels

Сохранение исходных меток job и instance из ServiceMonitor

true

reloader.serviceMonitor.metricRelabelings

Правила фильтрации и преобразования меток, применяемые к собранным метрикам.
Пример конфигурации:

- action: keep
  regex: 'kube_(daemonset|deployment|pod|namespace|statefulset).+'
  sourceLabels: [__name__]

[]

reloader.serviceMonitor.relabelings

Правила фильтрации и преобразования меток, применяемые к целям сбора до начала сбора метрик.
Пример конфигурации:

- sourceLabels: [__meta_kubernetes_pod_node_name]
  separator: ;
  regex: ^(.*)$
  targetLabel: nodename
  replacement: $1
  action: replace

[]

reloader.serviceMonitor.targetLabels

Целевые метки для ServiceMonitor

[]

podMonitor – определить параметры PodMonitor для Prometheus#

Параметр

Описание

Значение по умолчанию

reloader.podMonitor.enabled

Создание PodMonitor для сбора метрик Prometheus (рекомендуемый способ)

false

reloader.podMonitor.labels

Метки для ресурса PodMonitor для фильтрации в Prometheus

{}

reloader.podMonitor.annotations

Аннотации для ресурса PodMonitor

{}

reloader.podMonitor.honorLabels

Сохранение исходных меток job и instance из PodMonitor

true

reloader.podMonitor.metricRelabelings

Правила фильтрации и преобразования меток, применяемые к собранным метрикам.
Пример конфигурации:

- action: keep
  regex: 'kube_(daemonset|deployment|pod|namespace|statefulset).+'
  sourceLabels: [__name__]

[]

reloader.podMonitor.relabelings

Правила фильтрации и преобразования меток, применяемые к целям сбора до начала сбора метрик.
Пример конфигурации:

- sourceLabels: [__meta_kubernetes_pod_node_name]
  separator: ;
  regex: ^(.*)$
  targetLabel: nodename
  replacement: $1
  action: replace

[]

reloader.podMonitor.podTargetLabels

Целевые метки pod для PodMonitor

[]

podDisruptionBudget – ограничение одновременной недоступности pod#

Параметр

Описание

Значение по умолчанию

reloader.podDisruptionBudget.enabled

Настройки PodDisruptionBudget для ограничения количества одновременно недоступных pod

false

netpol – определить параметры NetworkPolicy для reloader#

Параметр

Описание

Значение по умолчанию

reloader.netpol.enabled

Создание NetworkPolicy для ограничения сетевого трафика

false

reloader.netpol.from

Входящие правила трафика (podSelector для разрешенных источников)
Пример конфигурации:

- podSelector:
    matchLabels:
      app.kubernetes.io/name: prometheus

[]

reloader.netpol.to

Исходящие правила трафика (podSelector для разрешенных назначений)

[]

verticalPodAutoscaler – определить параметры VerticalPodAutoscaler для reloader#

Параметр

Описание

Значение по умолчанию

reloader.verticalPodAutoscaler.enabled

Включение вертикального автомасштабирования для автоматического управления ресурсами

false

reloader.verticalPodAutoscaler.controlledResources

Ресурсы, которыми может управлять VPA (по умолчанию CPU и память)

[]

reloader.verticalPodAutoscaler.maxAllowed

Максимально допустимые ресурсы для pod (cpu, memory)
Пример конфигурации:

cpu: 200m
memory: 100Mi

{}

reloader.verticalPodAutoscaler.minAllowed

Минимально допустимые ресурсы для pod (cpu, memory)
Пример конфигурации:

cpu: 200m
memory: 100Mi

{}

reloader.verticalPodAutoscaler.updatePolicy.updateMode

Режим обновления VPA.
Возможные значения: Off, Initial, Recreate, Auto

Auto

webhookUrl – определить webhook URL для уведомлений reloader#

Параметр

Описание

Значение по умолчанию

reloader.webhookUrl

URL webhook для отправки уведомлений при перезагрузке

""