Kubernetes Openshift 4 ConfigMap二进制文件作为目录装入
我已从Openshift 4 Windows 10 CLI创建了ConfigMap:Kubernetes Openshift 4 ConfigMap二进制文件作为目录装入,kubernetes,openshift,configmap,Kubernetes,Openshift,Configmap,我已从Openshift 4 Windows 10 CLI创建了ConfigMap: .\oc create configmap my-cacerts --from-file=cacerts 我可以使用Openshift 4的web界面查看名为my cacerts的ConfigMap,并从中下载二进制文件cacerts 现在我挂载它(部署.yaml的一部分) 不幸的是/etc/my/cacerts作为一个空文件夹而不是一个二进制文件装载 如何将cacerts装载为文件而不是目录 更新: 如果我
.\oc create configmap my-cacerts --from-file=cacerts
我可以使用Openshift 4的web界面查看名为my cacerts的ConfigMap,并从中下载二进制文件cacerts
现在我挂载它(部署.yaml的一部分)
不幸的是/etc/my/cacerts作为一个空文件夹而不是一个二进制文件装载
如何将cacerts装载为文件而不是目录
更新:
如果我发布
.\oc get configmap my-cacerts
.\oc describe pod my-pod
有以下输出:
apiVersion: v1
binaryData:
cacerts: ... big long base64...
kind: ConfigMap
metadata: ...
如果我发布
.\oc get configmap my-cacerts
.\oc describe pod my-pod
我明白了
您的
卷
定义不正确,配置映射
不存在且无效,但似乎API正在悄悄地退回到此处的空目录
,从而导致目录为空
当您使用上面的oc
命令创建ConfigMap
时,结果将是一个ConfigMap
如下所示(请注意,有一个键称为“cacerts”):
在卷
部分,然后使用configMap:
和子路径
,如下所示,从configMap
中仅装载一个键(“cacerts”):
$ oc edit deployment my-deployment
[..]
spec:
containers:
- image: registry.fedoraproject.org/fedora-minimal:33
name: fedora-minimal
volumeMounts:
- mountPath: /etc/my/cacerts
name: my-cacerts-volume
subPath: cacerts
[..]
volumes:
- configMap:
name: my-cacerts
defaultMode: 420
name: my-cacerts-volume
这将导致:
$ oc rsh ...
sh-5.0$ ls -l /etc/my/cacerts
-rw-r--r--. 1 root 1000590000 13 Dec 3 19:11 /etc/my/cacerts
sh-5.0$ cat /etc/my/cacerts
Hello world!
您也可以保留子路径
并将/etc/my/
设置为相同结果的目标,因为每个键都有一个文件:
[..]
volumeMounts:
- mountPath: /etc/my/
name: my-cacerts-volume
[..]
volumes:
- configMap:
name: my-cacerts
name: my-cacerts-volume
对于正确的语法,您还可以检查Openshift 4的,应指定默认模式:
volumeMounts:
- mountPath: /etc/my
name: cacerts-ref
readOnly: true
volumes:
- name: cacerts-ref
configMap:
defaultMode: 420
name: cacerts
之后,configMap内容被正确映射
.\oc describe pod my-pod
Volumes:
cacerts-ref:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: cacerts
Optional: false
嗨,西蒙,谢谢你的快速回答。我现在就去试试。请注意,如果我发出“oc get configmap my cacerts-o yaml”,那么我会得到包含所有内容的yaml,但是里面是二进制数据而不是数据。它是Openshift 4I,我已经一对一地尝试过了(包括oc rsh),但它仍然会创建空文件夹。如前所述,唯一的区别是在ConfigMap中我有binaryData:caccerts:>-…感谢您更新原始问题。BinaryData或ConfigMap中的数据应该无关紧要,在这两种情况下都应该有效。主要问题是您仍然有一个“type:EmptyDir”类型的卷,您应该再次编辑部署以获得正确的卷类型,并确保您在那里获得正确的卷类型(另请参阅我链接的文档)。这是Openshift特定的内容,defaultMode:420解决了我的问题
.\oc describe pod my-pod
Volumes:
cacerts-ref:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: cacerts
Optional: false