我正在考虑使用秘密来安装单个文件,但似乎你只能挂载将覆盖所有其他内容的目录.如何在不安装目录的情况下共享单个配置文件?
Tom*_*yen 118
例如,您有一个包含2个配置文件的configmap:
kubectl create configmap config --from-file <file1> --from-file <file2>
Run Code Online (Sandbox Code Playgroud)
您可以使用这样的subPath将单个文件挂载到现有目录中:
---
volumeMounts:
- name: "config"
mountPath: "/<existing folder>/<file1>"
subPath: "<file1>"
- name: "config"
mountPath: "/<existing folder>/<file2>"
subPath: "<file2>"
restartPolicy: Always
volumes:
- name: "config"
configMap:
name: "config"
---
Run Code Online (Sandbox Code Playgroud)
完整的例子在这里
Joe*_*l B 35
我将从这里开始这个工作示例.确保你至少使用Kubernetes 1.3.
只需创建一个这样的ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: test-pd-plus-cfgmap
data:
file-from-cfgmap: file data
Run Code Online (Sandbox Code Playgroud)
然后像这样创建一个pod:
apiVersion: v1
kind: Pod
metadata:
name: test-pd-plus-cfgmap
spec:
containers:
- image: ubuntu
name: bash
stdin: true
stdinOnce: true
tty: true
volumeMounts:
- mountPath: /mnt
name: pd
- mountPath: /mnt/file-from-cfgmap
name: cfgmap
subPath: file-from-cfgmap
volumes:
- name: pd
gcePersistentDisk:
pdName: testdisk
- name: cfgmap
configMap:
name: test-pd-plus-cfgmap
Run Code Online (Sandbox Code Playgroud)
我没有投票或回复帖子的声誉,所以我会在这里发帖。得票最多的答案并不像它所说的那样有效(至少在 k8s 1.21.1 中):
volumeMounts:
- mountPath: /opt/project/config.override.json
name: config-override
subPath: config.override.json
command:
- ls
- -l
- /opt/project/config.override.json
Run Code Online (Sandbox Code Playgroud)
产生一个空目录/opt/project/config.override.json
。我已经在文档和谷歌中挖掘了几个小时,但仍然无法将这个单个 json 文件挂载为 json 文件。
我也尝试过这个:
volumeMounts:
- mountPath: /opt/project/
name: config-override
subPath: config.override.json
command:
- ls
- -l
- /opt/project
Run Code Online (Sandbox Code Playgroud)
很明显,当它/opt/project
尝试将 json 文件挂载到其中时,它会列出为空目录。config.override.json
在这种情况下,不会创建具有名称的文件。
PS:安装到文件的唯一方法是:
volumeMounts:
- mountPath: /opt/project/override
name: config-override
command:
- ls
- -l
- /opt/project/override
Run Code Online (Sandbox Code Playgroud)
它创建一个目录/opt/project/override
并将 configMap 创建中使用的原始文件名符号链接到所需的内容:
lrwxrwxrwx 1 root root 27 Jun 27 14:37 config.override.json -> ..data/config.override.json
Run Code Online (Sandbox Code Playgroud)
目前(v1.0,v1.1)无法批量安装单个配置文件.Secret结构自然能够表示多个秘密,这意味着它必须是一个目录.
当我们获得配置对象时,应该支持单个文件.
与此同时,您可以从图像中安装目录和符号链接吗?
已接受答案的有用附加信息:
假设您的原始文件名为 environment.js,并且您希望目标文件名为 destination_environment.js,那么您的 yaml 文件应如下所示:
---
volumeMounts:
- name: "config"
mountPath: "/<existing folder>/destination_environment.js"
subPath: "environment.js"
volumes:
- name: "config"
configMap:
name: "config"
---
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
41628 次 |
最近记录: |