Это 6-й день моего участия в August Update Challenge, проверьте подробности события, проверьте подробности события:Испытание августовского обновления
1. Предпосылки
Любое приложение требует определенных элементов конфигурации для настройки характеристик приложения. Эти конфигурации обычно можно разделить на две категории:
- Один из них — нечувствительная конфигурация, такая как среда выполнения и внешние зависимости.
- Одна категория — конфиденциальная конфигурация, такая как ключи и сертификаты SSH.
Эти конфигурации не следует помещать непосредственно в образ контейнера, а следует настраивать отдельно от контейнера и динамически монтировать во время выполнения с помощью томов данных, переменных среды и т. д.
В процессе использования kubernetes мы обычно помещаем конфигурационный файл приложения в ConfigMap и/или Secret, но часто сталкиваемся с проблемой, как заставить конфигурационный файл действовать после обновления конфигурационного файла.
Пользователь определяет объекты ресурсов Kubernetes (такие как Deployment, Daemonset и т. д.), а файл конфигурации определяется configmap, который подключается к поду через Volumemounts.После изменения файла конфигурации служба может автоматически перезагружаться в загрузить обновленную конфигурацию.
2 решения
2.1 Reloader
- Ограничения: Kubernetes версии 1.9 и выше.
- Установка кластера
reloader
- путем добавления аннотаций
annotation
способ достижения
kubectl apply -f https://raw.githubusercontent.com/stakater/Reloader/master/deployments/kubernetes/reloader.yaml
2.1.1 Глобальное обновление триггера configmap
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: filebeat
namespace: log
labels:
k8s-app: filebeat
annotations:
reloader.stakater.com/auto: "true"
2.1.2 Автоматически запускать обновления конфигурации объектов ресурсов в соответствии с указанными изменениями карты конфигурации
- Одно обновление ConfigMap
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: filebeat
namespace: log
labels:
k8s-app: filebeat
annotations:
configmap.reloader.stakater.com/reload: "filebeat-config"
- Несколько конфигурационных карт, разделяйте несколько конфигурационных карт запятыми
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: filebeat
namespace: log
labels:
k8s-app: filebeat
annotations:
configmap.reloader.stakater.com/reload: "filebeat-config,foo-config"
2.2 аннотация контрольной суммы
Аннотация контрольной суммы — это наиболее часто используемый метод непрерывного обновления в диаграммах Helm, то есть добавление sha256sum секрета или ConfigMap к аннотациям развертывания, чтобы существующий модуль был обновлен с изменением секрета или ConfigMap.
kind: Deployment
spec:
template:
metadata:
annotations:
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
[...]
Эффект от добавления этого раздела заключается в том, что в/configmap.yaml
Если какой-либо контент изменится, аннотация под sepc развертывания будет обновлена, что приведет к реконструкции модуля для достижения желаемого эффекта.