Reloader#
Reloader - это инструмент, который позволяет автоматически обновлять контейнеры в DropApp при изменении связанных с configmap, secret и производит плавающее обновление (rolling update) для pods, которые зависят от них.
Описание Reloader и его функции:
Reloader поддерживает
sealed-secrets;для развертываний Reloader просто инициирует изменение, которое зависит от того, как настроена стратегия развертывания;
аннотации
secret.reloader.stakater.com/reloadилиconfigmap.reloader.stakater.com/reloadперезагружают pod при изменении указанногоconfigmapилиsecret, независимо от использования;reloader.stakater.com/auto: «true»: перезагрузит модуль только в том случае, если используетсяconfigmapилиsecret(в качестве монтирования тома или в качестве окружения) вDeploymentConfigs/Deployment/Daemonsets/Statefulsets;--auto-annotation: переопределяет аннотациюauto;--secret-auto-annotation: переопределяет аннотациюsecret auto;--configmap-auto-annotation: переопределяет аннотациюconfigmap auto;--auto-search-annotation: переопределяет аннотацию поискаauto search;--search-match-annotation: переопределяет аннотацию соответствийsearch-match;--configmap-annotation: переопределяет аннотациюconfigmap;--secret-annotation: переопределяет аннотациюsecret;--namespaces-to-ignore: позволяет игнорировать определенные namespaces;--namespace-selector: позволяет следить только за определенными namespaces с определенными ярлыками;--resource-label-selector: позволяет следить только за определенными secrets/configmaps с определенными ярлыками;--resources-to-ignore: позволяет игнорировать определенные ресурсы;--log-format=json: настраивает логирование в формате JSON;--reload-strategy=<strategy-name>: настраивает стратегию перезагрузки<strategy-name>.
Сценарий развертывания Reloader#
Для развертывания Reloader, необходимо заменить RELEASE-NAME в манифест-файле на корректное значение и выполнить команду:
kubectl apply -f https://<repoexample.ru>/stakater/Reloader/master/deployments/kubernetes/reloader.yaml
# Укажите актуальный путь до локального репозитория
По умолчанию, Reloader развертывается в namespace default и отслеживает изменения в configmap или secret во всех namespace.
Reloader можно настроить на игнорирование ресурсов configmap или secret, передав следующие аргументы (spec.template.spec.containers.args) в его контейнер:
--resources-to-ignore=configMaps: игнорированиеconfigmap;--resources-to-ignore=secrets: игнорированиеsecret.
Примечание
Одновременно можно игнорировать только один из этих ресурсов, попытка игнорировать оба приведет к ошибке в Reloader. Обходное решение для игнорирования обоих ресурсов - масштабирование pod Reloader до 0.
Сценарии использования Reloader#
Для использования Reloader с Deployment, необходимо добавить аннотацию (по умолчанию reloader.stakater.com/auto). Это позволит Reloader автоматически обнаруживать DeploymentConfigs/Deployments/Daemonsets/Statefulsets:
kind: Deployment
metadata:
annotations:
reloader.stakater.com/auto: "true"
spec:
template:
metadata:
Также можно ограничить обнаружение только configmap или secret объектами, которые имеют специальную аннотацию. Для этого необходимо добавить аннотацию reloader.stakater.com/search в Deployment и аннотацию reloader.stakater.com/match в configmap или secret:
kind: Deployment
metadata:
annotations:
reloader.stakater.com/search: "true"
spec:
template:
kind: ConfigMap
metadata:
annotations:
reloader.stakater.com/match: "true"
data:
key: value
Важно отметить, что аннотации reloader.stakater.com/search и reloader.stakater.com/auto не могут быть использованы вместе. Если в Deployment есть аннотация reloader.stakater.com/auto: "true", то она всегда будет перезагружаться при изменении configmap или secret, независимо от того, имеют ли они аннотацию reloader.stakater.com/match: "true" или нет.
Аннотации reloader.stakater.com/auto и его типы (secret.reloader.stakater.com/auto или configmap.reloader.stakater.com/auto) не могут быть использованы вместе. Если в Deployment есть обе аннотации, то достаточно, чтобы одна из них была истинной для запуска перезагрузки.
Кроме того, можно указать конкретный configmap или secret, который будет вызывать rolling upgrade только при изменении указанного configmap или secret. Для этого необходимо установить auto аннотацию в "false" или удалить, и использовать аннотации для configmap или secret.
Также возможно включить автоматическую перезагрузку для всех ресурсов, установив флаг --auto-reload-all. В этом случае все ресурсы, у которых auto аннотация (или ее тип) не установлена в "false", будут автоматически перезагружены при обновлении связанных с ними configmap или secret.
Установка auto аннотации в неопределенное значение считается "false".
Сценарии использования Configmap#
Для выполнения rolling upgrade только при изменении определенного configmap, необходимо добавить следующую аннотацию в Deployment:
kind: Deployment
metadata:
annotations:
configmap.reloader.stakater.com/reload: "name-configmap"
spec:
template:
metadata:
Если необходимо выполнить rolling upgrade при изменении нескольких configmap, можно использовать запятую для разделения имен:
kind: Deployment
metadata:
annotations:
configmap.reloader.stakater.com/reload: "name1-configmap,name2-configmap,name3-configmap"
spec:
template:
metadata:
Сценарии использования Secret#
для выполнения rolling upgrade только при изменении определенного secret, необходимо добавить следующую аннотацию в Deployment:
kind: Deployment
metadata:
annotations:
secret.reloader.stakater.com/reload: "name_secret"
spec:
template:
metadata:
Если необходимо выполнить rolling upgrade при изменении нескольких secret, можно использовать запятую для разделения имен:
kind: Deployment
metadata:
annotations:
secret.reloader.stakater.com/reload: "name1_secret,name2_secret,name3_secret"
spec:
template:
metadata: