Изменение переменных окружения зависимостей диаграммы руля без разветвления - PullRequest
0 голосов
/ 16 апреля 2020

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

Существует ли простой способ предоставления переменных среды нескольким контейнерам в Kubernetes гибким способом, либо через Helm, либо с помощью другого инструмента?

В настоящее время я изучаю возможность использования Kustomize для выполнения последней мили изменения после того, как Хелм заполнил шаблоны, но я зацикливался на настройке патчей Kustomize. В моем сценарии у меня есть переменные окружения, заполняемые Helm в ConfigMap. Я хотел бы добавить поле envFrom для чтения ConfigMap и добавления заданных переменных среды в контейнеры. Я хочу добавить envFrom к ресурсам YAML файлов через Kustomize. Проблема в том, что файлы Kustomize patch.yaml имеют спецификацию ресурса c. Ниже приведен пример моих patch.yaml и моих kustomization.yaml соответственно.

patch.yaml:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: does-not-matter
spec:
  template:
    spec:
      containers:
        - name: server
          envFrom:
          - configMapRef:
              name: my-env

kustomization.yaml:

resources:
  - all.yaml

patches:
  - path: patch.yaml
    target:
      kind: "StatefulSet"
      name: "*"

Для выполнения Кастомизация, я запускаю:

helm install perceptor ../  --post-renderer ./kustomize

, которая в основном просто заполняет шаблоны Helm и передает их в Kustomize для выполнения патчей последней мили.

В патче я должен указать имя контейнера («сервер») для правильного внедрения моего configMap. Что я действительно хотел бы сделать, так это предоставить эти переменные среды всем контейнерам в данном развертывании (как определено ограничениями target в kustomization.yaml), независимо от их имени. Из того, что я видел, похоже, мне придется написать отдельный патч для каждого контейнера, что является неоптимальным. Я только начинаю работать с Kubernetes, поэтому, возможно, мне не хватает чего-то, что легко решило бы эту проблему.

1 Ответ

0 голосов
/ 21 апреля 2020

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

Следующий фрагмент кода не нарушит текущую функциональность и не даст пользователям возможность представить пользовательскую среду переменные, основанные на существующих ConfigMap (s) в Spe c.

helm_template.yaml

 #helm template
 ...

 env:
- name: POD_NAME
  valueFrom:
    fieldRef:
      apiVersion: v1
      fieldPath: metadata.name
- name: POD_NAMESPACE
  valueFrom:
    fieldRef:
      apiVersion: v1
      fieldPath: metadata.namespace
{{- if .Values.envConfigs }}
{{- range $key, $config := $.Values.envConfigs }}
- name: {{ $key }}
  valueFrom:
    configMapKeyRef:
      name: {{ $config }}
      key: {{ $key | quote }}
{{- end }}
{{- end }}

values.yaml

#
# values.yaml
#
envConfigs:
  Q3_CFG_MAP: Q3DM17
  Q3_CFG_TIMEOUT: 30

# if empty use: 
# envConfigs: {}
...