Два способа настроить горячее обновление в Kubernetes

задняя часть Kubernetes
Два способа настроить горячее обновление в Kubernetes

Это 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 развертывания будет обновлена, что приведет к реконструкции модуля для достижения желаемого эффекта.