【问题标题】:Set environment variable from file in pod spec从 pod 规范中的文件设置环境变量
【发布时间】:2021-07-01 13:21:19
【问题描述】:

有没有办法从 pod 规范中的文件设置环境变量。 我没有使用 configmap 或 secret 的选项。

我正在初始化容器中获取一些动态值,并使用卷和卷挂载与 pod 共享文件。

filename -> /var/file.env
username: test 
password: password 

我不能使用“source file.env”,因为它是 java alpine 图像,并且已经在图像中定义了入口点。

有没有办法使用类似的东西

name: Username
      valueFrom: ??

【问题讨论】:

  • 您是否有理由不想通过获取 env 文件然后使用容器原始入口点来覆盖入口点?
  • source 是一个非标准的供应商 shell 扩展,但 POSIX shell 规范包括非常相似的 .,它在 Alpine 和非 Linux Unices 上的 shell 中受支持。您可能仍然需要修改映像的启动顺序才能读取文件。

标签: kubernetes google-kubernetes-engine


【解决方案1】:

您需要创建一个秘密。这里官方文档。 https://kubernetes.io/es/docs/concepts/configuration/secret/

在你的情况下遵循这个。

echo -n 'admin' > ./username.txt
echo -n 'password' > ./password.txt

然后执行以下命令。

kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt

显示您新添加的秘密。

kubectl get secrets

要查看您所做的详细信息,请按照下一个命令。

kubectl describe secrets/db-user-pass

请记住,在使用存储的环境变量时,您需要通过名称来调用密钥。

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: redis
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
  volumes:
  - name: foo
    secret:
      secretName: mysecret

【讨论】:

  • db-user-pass 是如何变成mysecret 的?
  • 因为你在 kubectl 命令上给了它一个通用名称。
  • kubectl create secret 时给出的秘密名称是db-user-pass。所以在 pod 的 yaml 中应该是secretName: db-user-pass。是的,您可以为 name 使用其他名称,但 secretName 必须指向密钥的实际名称。
猜你喜欢
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 2013-10-20
  • 2021-05-16
  • 2022-07-20
  • 2017-10-10
相关资源
最近更新 更多