Deckhouse Kubernetes Platform может автоматически перезапускать поды при изменении определенных ресурсов ConfigMap и Secret. Эта возможность реализована на базе проекта Reloader и управляется через аннотации, добавляемые к контроллерам подов (Deployment, DaemonSet, StatefulSet).
Reloader не предназначен для работы в отказоустойчивом режиме.
Далее описаны основные аннотации, позволяющие контролировать перезапуск подов.
Поддерживаемые аннотации
Аннотация | Применяется к объектам | Назначение | Примеры значений |
---|---|---|---|
pod-reloader.deckhouse.io/auto |
Deployment, DaemonSet, StatefulSet | Автоматический перезапуск подов при изменении всех связанных с ним ConfigMap и Secret (используемых как volume или переменные окружения) | "true" , "false" |
pod-reloader.deckhouse.io/search |
Deployment, DaemonSet, StatefulSet | Перезапуск только при изменении ресурсов с аннотацией pod-reloader.deckhouse.io/match: "true" |
"true" , "false" |
pod-reloader.deckhouse.io/configmap-reload |
Deployment, DaemonSet, StatefulSet | Указание конкретных ConfigMap , при изменении которых должен выполняться перезапуск |
"some-cm" , "some-cm1,some-cm2" |
pod-reloader.deckhouse.io/secret-reload |
Deployment, DaemonSet, StatefulSet | Указание конкретных Secret , при изменении которых должен выполняться перезапуск |
"some-secret" , "some-secret1,some-secret2" |
pod-reloader.deckhouse.io/match |
ConfigMap, Secret | Помечает ресурсы, изменения которых отслеживаются при использовании аннотации pod-reloader.deckhouse.io/search : "true" |
"true" , "false" |
Аннотация pod-reloader.deckhouse.io/search
не должна использоваться совместно с pod-reloader.deckhouse.io/auto: "true"
. В этом случае аннотации pod-reloader.deckhouse.io/search
и pod-reloader.deckhouse.io/match
будут проигнорированы. Для корректной работы установите pod-reloader.deckhouse.io/auto: "false"
или удалите её.
Аннотации pod-reloader.deckhouse.io/configmap-reload
и pod-reloader.deckhouse.io/secret-reload
не работают при наличии pod-reloader.deckhouse.io/auto: "true"
. Для корректной работы отключите auto
.
Примеры использования
Слежение за всеми изменениями во всех подключенных ресурсах
Подключённые ресурсы могут быть использованы как в переменных окружения, так и смонтированы как тома (volumes).
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
annotations:
pod-reloader.deckhouse.io/auto: "true"
spec:
template:
spec:
containers:
- name: nginx
env:
- name: SECRET_WORD
valueFrom:
secretKeyRef:
name: nginx-secret-value
key: extra
volumeMounts:
- name: pages
mountPath: "/usr/share/nginx/pages"
volumes:
- name: pages
configMap:
name: nginx-pages
---
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: nginx-secret-value
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-pages
Слежение за изменениями только в конкретных ресурсах
Указывает, что нужно отслеживать только те секреты или ConfigMap’ы, которые имеют аннотацию pod-reloader.deckhouse.io/match: "true"
. Это удобно, если в поде используется множество ресурсов, но перезапуск требуется только при изменении определённых.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
annotations:
pod-reloader.deckhouse.io/search: "true"
spec:
template:
spec:
containers:
- name: nginx
env:
- name: SECRET_WORD
valueFrom:
secretKeyRef:
name: nginx-secret-value
key: extra
---
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: nginx-secret-value
annotations:
pod-reloader.deckhouse.io/match: "true"
Слежение за изменениями в ресурсах из списка
Явное указание списка ConfigMap, при изменении которых должен перезапускаться под.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
annotations:
pod-reloader.deckhouse.io/configmap-reload: "nginx-config,nginx-pages"
spec:
template:
spec:
containers:
- name: nginx
volumeMounts:
- name: pages
mountPath: "/usr/share/nginx/pages"
- name: config
mountPath: "/etc/nginx/templates"
volumes:
- name: pages
configMap:
name: nginx-pages
- name: config
configMap:
name: nginx-config
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-pages
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
Как включить или отключить перезапуск подов
Включить или отключить перезапуск подов можно следующими способами:
-
Через ресурс ModuleConfig (например, ModuleConfig/pod-reloader). Установите параметр
spec.enabled
в значениеtrue
илиfalse
:apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: pod-reloader spec: enabled: true
-
Через команду
d8
(в подеd8-system/deckhouse
):d8 platform module enable pod-reloader
-
Через веб-интерфейс Deckhouse:
- Перейдите в раздел «Deckhouse - «Модули»;
- Найдите модуль
pod-reloader
и нажмите на него; - Включите тумблер «Модуль включен».
Настройка
Механизм перезапуска подов работает «из коробки» и не требует обязательной конфигурации. По умолчанию он включён в наборах модулей Default и Managed и отключён в наборе Minimal.
При необходимости его поведение можно изменить в настройках модуля pod-reloader (ModuleConfig pod-reloader
).
Доступные параметры:
Параметр | Тип | Описание | Значение по умолчанию |
---|---|---|---|
reloadOnCreate |
boolean | Перезапуск при создании ConfigMap или Secret, а не только при изменении | true |
nodeSelector |
object | Ограничение на узлы для запуска компонента (аналог spec.nodeSelector ) |
Не задан |
tolerations |
array | Допуски к размещению на узлах с taint (аналог spec.tolerations ) |
Не заданы |