Использование ENV для значений в файле манифеста Кубернеца - PullRequest
0 голосов
/ 07 июня 2019

Я закладываю фундамент для нового проекта, в котором у нас будет приложение, работающее на Google Kubernetes Engine с несколькими средами (разработка, подготовка, производство).Каждая среда - это собственный проект GC.

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

Я создал значения в «Тайнах Кубернетеса», и преобразовать их в ENV просто (см. DATABASE_URL).Однако, если бы я хотел использовать переменную для значения изображения контейнера: gcr.io/my-app-production-123:latest, как бы я передал значение из секрета?

Является ли это правильным подходом для абстрагирования значений среды от манифестафайлы?Спасибо!

apiVersion: batch/v1
kind: Job
metadata:
  name: db-migrate
spec:
  completions: 1
  template:
    metadata:
      name: db-migrate
    spec:
      restartPolicy: Never
      containers:
      - name: db-migrate
        # how can I reference secret/env for the value of image:?
        image: gcr.io/my-app-production-242920:latest
        args: ["bundle", "exec", "rake", "db:create", "db:migrate"]
        env:
        - name: DATABASE_URL
          valueFrom:
            secretKeyRef:
              name: app-secrets
              key: DATABASE_URL

Ответы [ 2 ]

1 голос
/ 08 июня 2019

Вам, вероятно, нужно использовать инструмент более высокого уровня, чтобы вводить переменные, подобные этой. Мне знакомо это Helm , но есть и другие инструменты, которые позволяют также вводить параметры в файлы YAML.

Вы не можете использовать секреты так, как вы описываете. Единственное, что вы можете сделать с секретами (или картами конфигурации, они очень похожи), это смонтировать их как файлы или использовать их установить переменные окружения . В ограниченной степени вы можете использовать переменные окружения для определения других частей конфигурации ; но если вы посмотрите на ссылку API для контейнеров , то места, где разрешен синтаксис $(VARIABLE), специально вызываются, и это разрешено только для args:, command: и env:.

В Helm вы можете использовать синтаксис шаблонов Go в своих файлах YAML, и поэтому можете писать

image: gcr.io/my-app-production:{{ .Values.tag }}

, а затем разверните службу, например

helm install ./my-app --set tag=242920

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

0 голосов
/ 08 июня 2019

Вы можете смонтировать свой секрет внутри контейнера и использовать его, Документация .

Пример:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: db-migrate
    image: gcr.io/my-app-production-242920:latest
    args: ["bundle", "exec", "rake", "db:create", "db:migrate"]
    volumeMounts:
    - name: <these_names_are_same>
      mountPath: "/container/where/to/mount"
      readOnly: true
  volumes:
  - name: <these_names_are_same>
    secret:
      secretName: <your deployed secret name>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...