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 - определить параметры контейнерного образа reloader#

Параметр

Описание

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

image.repository

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

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

image.tag

Тег версии образа Reloader

v1.4.14

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 workloads из автоматического мониторинга перезагрузки

false

reloader.ignoreCronJobs

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

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 для совпадения и отслеживания

{}

reloader.enableMetricsByNamespace

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

false

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

Параметр

Описание

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

reloader.deployment.dnsConfig

Конфигурация DNS для pod (nameservers, searches, options)

{}

reloader.deployment.replicas

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

1

reloader.deployment.revisionHistoryLimit

Лимит количества ревизий развертывания, хранящихся в истории

2

reloader.deployment.nodeSelector

Селектор узлов для планирования pod на конкретные узлы

null

reloader.deployment.affinity

Правила affinity для управления размещением pod (node affinity, pod affinity, pod anti-affinity)

{}

reloader.deployment.volumeMounts

Список мест монтирования для томов в контейнере

[]

reloader.deployment.volumes

Список томов для 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 Linux для удаления из контейнера

["ALL"]

reloader.deployment.containerSecurityContext.allowPrivilegeEscalation

Разрешить ли контейнеру повышать привилегии

false

reloader.deployment.containerSecurityContext.readOnlyRootFilesystem

Использовать ли файловую систему только для чтения

true

reloader.deployment.tolerations

Список tolerations для планирования на узлы с taint

[]

reloader.deployment.topologySpreadConstraints

Ограничения распределения pod по топологии кластера

[]

reloader.deployment.annotations

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

{}

reloader.deployment.labels.provider

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

stakater

reloader.deployment.labels.group

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

com.stakater.platform

reloader.deployment.labels.version

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

v1.4.14

reloader.deployment.env.open

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

null

reloader.deployment.env.secret

Переменные окружения из Secret объектов

null

reloader.deployment.env.field

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

null

reloader.deployment.env.existing

Переменные окружения из существующих Secret объектов

null

reloader.deployment.livenessProbe

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

{}

reloader.deployment.readinessProbe

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

{}

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

Класс приоритета для pod в кластере

""

reloader.deployment.gomaxprocsOverride

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

""

reloader.deployment.gomemlimitOverride

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

""

service - определить параметры Service для reloader#

Параметр

Описание

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

reloader.service

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

{}

rbac - определить параметры RBAC для reloader#

Параметр

Описание

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

reloader.rbac.enabled

Создавать ли ресурсы RBAC (Role, ClusterRole, RoleBinding, ClusterRoleBinding)

true

reloader.rbac.labels

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

{}

serviceAccount - определить параметры ServiceAccount для pod reloader#

Параметр

Описание

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

reloader.serviceAccount.create

Создавать ли ServiceAccount для Reloader

true

reloader.serviceAccount.labels

Метки для ServiceAccount

{}

reloader.serviceAccount.annotations

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

{}

reloader.serviceAccount.name

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

null

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

Параметр

Описание

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

reloader.custom_annotations

Дополнительные аннотации для переопределения стандартных (configmap, secret)

{}

serviceMonitor - определить параметры ServiceMonitor для Prometheus#

Параметр

Описание

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

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

Правила переименования метрик после сбора

[]

reloader.serviceMonitor.relabelings

Правила переименования меток перед сбором метрик

[]

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

Правила переименования метрик после сбора

[]

reloader.podMonitor.relabelings

Правила переименования меток перед сбором метрик

[]

reloader.podMonitor.podTargetLabels

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

[]

podDisruptionBudget - определить параметры PodDisruptionBudget для reloader#

Параметр

Описание

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

reloader.podDisruptionBudget.enabled

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

false

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

Параметр

Описание

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

reloader.netpol.enabled

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

false

reloader.netpol.from

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

[]

reloader.netpol.to

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

[]

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

Параметр

Описание

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

reloader.verticalPodAutoscaler.enabled

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

false

reloader.verticalPodAutoscaler.controlledResources

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

[]

reloader.verticalPodAutoscaler.maxAllowed

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

{}

reloader.verticalPodAutoscaler.minAllowed

Минимально допустимые ресурсы для pod (cpu, memory)

{}

reloader.verticalPodAutoscaler.updatePolicy.updateMode

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

Auto

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

Параметр

Описание

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

reloader.webhookUrl

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

""