是否可以将二进制文件存储在KubernetesConfigMap中,然后从装载此ConfigMap的卷中读取相同的内容?例如,如果目录/etc/mycompany/myapp/config
包含二进制文件keystore.jks
,将
kubectl create configmap myapp-config --from-file=/etc/mycompany/myapp/config
在ConfigMap myapp-config
中包含文件keystore.jks
,该文件稍后可以Map到卷、装入容器并作为二进制文件读取?
例如,给定以下pod规范,keystore.jks
是否应在/etc/mycompany/myapp/config/keystore.jks
时对myapp
可用?
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp
image: mycompany/myapp
volumeMounts:
- name: myapp-config
mountPath: /etc/mycompany/myapp/config
volumes:
- name: myapp-config
configMap:
name: myapp-config
Kubernetes版本详情:
derek@derek-HP-EliteOne-800-G1-AiO:~/Documents/platinum/fix/brvm$ kubectl version
Client Version: version.Info{Major:"1", Minor:"3", GitVersion:"v1.3.6", GitCommit:"ae4550cc9c89a593bcda6678df201db1b208133b", GitTreeState:"clean", BuildDate:"2016-08-26T18:13:23Z", GoVersion:"go1.6.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"3", GitVersion:"v1.3.6+coreos.0", GitCommit:"f6f0055b8e503cbe5fb7b6f1a2ee37d0f160c1cd", GitTreeState:"clean", BuildDate:"2016-08-29T17:01:01Z", GoVersion:"go1.6.2", Compiler:"gc", Platform:"linux/amd64"}
8条答案
按热度按时间r7xajy2e1#
自Kubernetes版本1.10.0起,现在支持二进制配置Map。请参阅自述文件注解:
ConfigMap对象现在通过一个新的binaryData字段支持二进制数据。当使用kubectl create configmap --from-file时,包含非UTF8数据的文件将被放置在这个新字段中,以便保留非UTF8数据。请注意,kubectl的--append-hash功能不考虑binaryData。使用这个功能需要1.10以上的apiserver和kubelets。(#57938,@dims)
查看更改日志了解更多详细信息:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.10.md#apps
4si2a6ki2#
我要做的是用base64编码这个文件,然后使用decoded的容器就可以使用它了
ie3xauqp3#
根据其他答案,Base64适合我(仅一次)
步骤:
在我的工作站
开档
我连接到openshift并创建配置Map
oc创建配置Mapcacerts.base64 --来自文件=cacerts.base64
展开配置
编辑/更新现有cacerts的最简单方法是将新cacerts编码为base64(使用选项-w 0),使用文件编辑器(即记事本)打开,通过OpenShift Console UI复制并粘贴内容
或在命令行中
oc编辑配置Map缓存. base64
kyxcudwk4#
根据Kubernetes问题“Enable ConfigMaps to store binary files as well as character files.“中的Jorgan Liggitt,Kubernetes 1.3.6无法在配置Map中存储二进制文件。
GitHub评论1:
配置Map将数据存储为字符串,而不是[]字节...不确定我是否期望能够在其中放入任意二进制内容”
GitHub评论2:
@liggitt ConfigMap是否不将二进制内容编码为字符串?
它们不存储字符串,而是存储字符串。如果需要,base64编码可以与应用程序逻辑放在一起
我随后演示了ConfigMap不支持二进制文件。
i86rm4rw5#
我使用二进制文件的秘密。你可以使用--from-file
5t7ly7z56#
如果你使用Secret来存储值,你可以利用stringData字段的属性。对值进行一次编码,并将其放入stringData字段而不是data字段。Kubernetes对当前stringData的值进行编码。这样我们就可以将手动base64编码从两个减少到一个。
有关二进制数据需要双重编码的原因的详细信息,请参阅以下link
1tu0hz3e7#
如果您不想手动执行此操作,我建议您查看https://kustomize.io/
它们有一个configMap生成器,可从以下文件生成configMap:https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/configmapgenerator/#configmap-from-file
还支持二进制文件。例如:
qmb5sa228#
自版本1.10起,配置图支持binaryData字段。