从文件创建一个新的 ConfigMap:
kubernetes create configmap foo --from-file=foo
这是 ConfigMap 在内部的外观:
kubernetes get configmaps foo -o yaml
apiVersion: v1
data:
foo: |
VAR1=value1
VAR2=value2
Run Code Online (Sandbox Code Playgroud)
然后,我使用这个 ConfigMap 在容器中创建一组环境变量:
apiVersion: v1
kind: Pod
metadata:
labels:
name: app
name: app
spec:
containers:
- name: app-server
image: app:latest
ports:
- containerPort: 3000
envFrom:
- configMapRef:
name: foo
command: ["/bin/bash", "-c", "printenv"]
Run Code Online (Sandbox Code Playgroud)
当容器命令运行时,我看到以下输出printenv:
foo=VAR1=value1
VAR2=value2
Run Code Online (Sandbox Code Playgroud)
因此,echo $foopod 中的命令返回:
VAR1=value1 VAR2=value2
根据 ConfigMap 的文档--from-file,这是预期的行为。
这将是一个创造性的方式(和合适的地方),以某种方式获得该文件的提供给吊舱作为单独的ENV变量的值VAR1,VAR2,VAR3,等?
对于 Kubernetes 的当前版本 (1.6.x),这是不可能的。正如官方文档中所写kubectl create configmap:
--from-file:密钥文件可以使用其文件路径指定,在这种情况下,文件基名将用作 configmap 密钥,或者可以选择使用密钥和文件路径,在这种情况下,将使用给定的密钥。指定一个目录将迭代该目录中的每个命名文件,其基本名称是有效的 configmap 键。
当您想要创建像这样使用的 configmap 作为容器配置的输入时,您可以使用如下选项envFrom创建它:--from-literal
kubectl create configmap foo --from-literal=var1=value1 --from-literal=var2=value2
Run Code Online (Sandbox Code Playgroud)
为了仍然保留该文件,您可以将文件转换为某种文件,然后运行以下命令,如下所示:
eval "kubectl create configmap foo $(cat foo.txt | sed -e 's/^/--from-literal=/' | tr "\n" ' ')"
Run Code Online (Sandbox Code Playgroud)
除此之外,也许检查一下--flattenGitHub 上的 flag 提案等未完成的提案也值得您花时间。
还要注意变量命名。iircVAR1和VAR2不是有效的属性名称 - 它们必须是小写,这可能会在传递它们时导致一些问题。
| 归档时间: |
|
| 查看次数: |
3094 次 |
| 最近记录: |