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

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

`~`

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 runtime; оставьте пустым для использования значения по умолчанию

`""`

reloader.deployment.gomemlimitOverride

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

`""`

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

`""`