问题
例如:
我们需要将这些文件一次(在启动时)放入 Pod 中。
据我所知,我只能在一个目录级别中创建一个所有文件的 ConfigMap,并且我必须重新创建该结构。
例如
kubectl create configmap style-files --from-file=.
在上面的示例中,此命令只会为 xml 文件创建 ConfigMap。
预期行为
行为类似于 ConfigMap,但能够创建一个包含当前目录中的所有文件和子目录中的所有文件的单个 ConfigMap,同时保留文件夹结构。
问题
是否有一些针对我的用例的概念,或者我是否必须使用 ConfigMap?
目录中的示例文件:
.
├── test21.css
├── test22.css
├── test2.xml
└── test.xml
Create configmap:
kubectl create configmap example --from-file=./
示例配置图:
apiVersion: v1
data:
test.xml: |
test1
test1
test2.xml: |
test2
test2
test21.css: |
test21
test21
test22.css: |
test22
test22
kind: ConfigMap
带有投影 ConfigMap 键的卷的示例 pod:
apiVersion: v1
kind: Pod
metadata:
name: busy
spec:
containers:
- name: busybox
image: k8s.gcr.io/busybox
command: ["/bin/sh"]
args: ["-c", "sleep 200"]
volumeMounts:
- mountPath: /test
name: data1
volumes:
- name: data1
configMap:
name: example
items:
- key: test.xml
path: test.xml
- key: test2.xml
path: test2.xml
- key: test21.css
path: layout/test21.css
- key: test22.css
path: layout/test22.css
注:
您可以基于每个文件将密钥投影到特定路径和特定权限。
您可以使用投影卷将此示例与不同的源(例如秘密和配置映射)结合起来: 投影卷将多个现有卷源映射到同一目录中。
apiVersion: v1
kind: Pod
metadata:
name: busy
spec:
containers:
- name: busybox
image: k8s.gcr.io/busybox
command: ["/bin/sh"]
args: ["-c", "sleep 200"]
volumeMounts:
- mountPath: /test
name: data1
volumes:
- name: data1
projected:
sources:
- configMap:
name: example
items:
- key: test.xml
path: test.xml
- key: test2.xml
path: test2.xml
- key: test21.css
path: layout/test21.css
- key: test22.css
path: layout/test22.css
另一种方法是使用 zip/jar 文件作为 configmap(configmap 支持二进制文件),因此安装后可以将其解压缩到容器内所需的路径中,或使用 init 容器准备适当的文件夹结构或使用重新填充的数据构建映像。
资源:
希望这有帮助。
您可以在集群内可访问的位置(例如 s3 存储或简单的 http 服务器)提供存档文件,并使用配置映射为 pod 配置正确的 URL 以下载文件。 要下载并提取存档,您可以结合使用初始化容器和卷安装。
有关初始化容器的更多信息:https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
我建议使用配置映射,但您可能需要使用其中两个和两个安装座来重新创建层次结构,因为配置映射是平坦的。
将包含 XML 的一个安装到
/your/path/
,将另一个包含 CSS 的安装到 /your/path/layout
。
可能需要巧妙地使用
subpath
键以避免第一个 cm
覆盖第二个nd。