【问题标题】:Passing variables to a container on startup在启动时将变量传递给容器
【发布时间】:2021-02-17 04:56:44
【问题描述】:

我想在 kubernetes 环境中设置我的 Django 应用程序,以便在创建应用程序容器时传递环境变量,以便使用这些环境变量来启动容器。例如,在启动应用程序容器时,我想发出管理命令,例如

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

等等。如何以通用的方式在容器内传递这些变量值,例如上面的 lname 和 fname,以便每次都可以根据用户凭据传递新值,并且不需要每次都进行硬编码?

【问题讨论】:

  • 您应该能够以作为容器启动时间运行的脚本来执行此操作,可能是入口点包装脚本。你已经尝试过什么? (在 Docker 之外,您能否编写一个执行您想要的操作然后启动 Django 应用程序的脚本?)
  • 是的,我运行一个 shell 脚本来查询数据库 pod:kubectl exec -it database-pod -- bash -c "p​​sql -U postgres -c \"Select json_build_object('first_name',first_name ,'last_name',last_name,'email',email,'date_joined',date_joined)
  • 我想用这个shell脚本返回的值来初始化容器,比如姓氏等

标签: django docker kubernetes deployment


【解决方案1】:

您可以在部署清单中传递environment variables,例如:

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"

can also invoke them in container 使用 commandargument 对象,就像在容器中运行命令一样

  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)"]

也可以从ConfigMapSecrets 传递变量。

【讨论】:

  • 就我而言,我事先并不知道环境变量。这些值需要设置为 bash 脚本的结果,该脚本从查询数据库 pod 中获取值。如何动态设置环境变量值?
猜你喜欢
  • 2015-09-18
  • 1970-01-01
  • 2019-06-29
  • 2019-10-07
  • 2022-01-16
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多