#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, который получает значения из запроса модуля базы данных. Как динамически устанавливать значения переменных среды?