Передача переменных в контейнер при запуске

#django #docker #kubernetes #deployment

#django #docker #kubernetes #развертывание

Вопрос:

Я хочу настроить свое приложение Django в среде kubernetes таким образом, чтобы при создании контейнера приложения переменные среды передавались таким образом, чтобы эти переменные среды использовались для инициализации контейнеров. Например, при запуске контейнера приложения я хочу выдавать команды управления, такие как

 python manage.py createuser --lastname lname --firstname --fname --number --num "
  

и так далее. Как передать эти значения переменных, такие как lname и fname выше, внутри контейнера общим способом, чтобы каждый раз можно было передавать новые значения в зависимости от учетных данных пользователя, и их не нужно каждый раз жестко кодировать?

Комментарии:

1. Вы должны быть в состоянии сделать это как скрипт, который запускается во время запуска контейнера, возможно, сценарий-оболочка точки входа. Что вы уже пробовали? (За пределами Docker, не могли бы вы написать скрипт, который делал то, что вы хотели, а затем запускал приложение Django?)

2. да, я запускаю сценарий оболочки, который запрашивает модуль базы данных следующим образом: kubectl exec -it database-pod — bash -c «psql -U postgres -c «Select json_build_object(‘first_name’,first_name,’last_name’,last_name,’email’,email,’date_joined’,date_joined)

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

Ответ №1:

Вы можете передавать переменные среды в манифесте развертывания, например:

 spec:
  containers:
  - name: envar-demo-container
    image: gcr.io/google-samples/node-hello:1.0
    env:
    - name: DEMO_GREETING
      value: "Hello from the environment"
    - name: DEMO_FAREWELL
      value: "Such a sweet sorrow"
  

Вы также можете вызвать их в контейнере, используя command и argument object , так же, как выполнение команды в контейнере

   containers:
  - name: env-print-demo
    image: bash
    env:
    - name: GREETING
      value: "Warm greetings to"
    - name: HONORIFIC
      value: "The Most Honorable"
    - name: NAME
      value: "Kubernetes"
    command: ["echo"]
    args: ["$(GREETING) $(HONORIFIC) $(NAME)"]
  

Также можно передавать переменные из ConfigMap или Secrets .

Комментарии:

1. В моем случае я заранее не знаю переменные среды. Значения должны быть установлены в результате выполнения скрипта bash, который получает значения из запроса модуля базы данных. Как динамически устанавливать значения переменных среды?