Должен ли я использовать configMap для каждой переменной среды? - PullRequest
0 голосов
/ 27 ноября 2018

Я использую шлем прямо сейчас.Мой проект такой:

values.yaml:

environmentVariables:
  KEY1: VALUE1
  KEY2: VALUE2

configmap.yaml:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ template "myproject.fullname" . }}
data:
{{- range $k, $v := .Values.environmentVariables }}
  {{ $k }}: {{ $v | quote }}
{{- end }}

deploy.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ template "myproject.fullname" . }}
spec:
  template:
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          env:
{{- range $k, $v := .Values.environmentVariables }}
            - name: {{ $k }}
              valueFrom:
                configMapKeyRef:
                  name: {{ template "myproject.fullname" $ }}
                  key: {{ $k }}
{{- end }}
...

Но сейчас я действительно запутался.Мне действительно нужен этот configmap?Есть ли польза от использования configmap для переменных среды?

Ответы [ 3 ]

0 голосов
/ 01 декабря 2018

Я чувствую, что это во многом вопрос вкуса;но я обычно избегаю ConfigMaps для подобных случаев.

env:
{{- range $k, $v := .Values.environmentVariables }}
  - name: {{ quote $k }}
    value: {{ quote $v }}
{{- end }}

Обычно вам нужен единый источник правды, и Хелм может быть таким: вы не хотите оказаться в ситуации, когда кто-то отредактировалConfigMap вне Helm и повторное развертывание нарушает локальные изменения.Так что в ConfigMap не так много смысла, так как он «более редактируемый», чем спецификация развертывания.

В принципе (как отмечает @Hazim) вы можете обновить содержимое ConfigMap без перезапуска контейнера, но это по сути может• обновлять переменные среды в запущенных контейнерах, а перезапуск контейнеров настолько обычен, что однократное выполнение этого не должно иметь большого значения.

0 голосов
/ 01 декабря 2018

Помимо моментов, связанных с отделением конфигурации от модулей, одним из преимуществ ConfigMap является то, что он позволяет вам сделать значения переменных доступными для других модулей или приложений, которые не обязательно являются частью вашей диаграммы.

Это добавляет немного дополнительной сложности, хотя и может быть большой элемент предпочтения относительно того, когда использовать ConfigMap.Поскольку ваши ключи ConfigMap - это имена переменных среды , вы можете немного упростить развертывание, используя 'envFrom'

0 голосов
/ 27 ноября 2018

Это будет работать, даже если вы не используете configmap, но у него есть некоторые преимущества:

  • Вы можете обновить значения во время выполнения, не обновляя развертывание.Это означает, что вам может не потребоваться перезапускать ваше приложение (модули).Если вы не используете карту конфигурации, каждый раз, когда вы обновляете значение, ваше приложение (или модуль) воссоздается.
  • Разделение задач, т. Е. Настройка развертывания и разделение внешних значений
...