如何在Kubernetes ConfigMap中存储二进制文件?

tyu7yeag  于 2023-03-12  发布在  Kubernetes
关注(0)|答案(8)|浏览(388)

是否可以将二进制文件存储在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"}
r7xajy2e

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

4si2a6ki

4si2a6ki2#

我要做的是用base64编码这个文件,然后使用decoded的容器就可以使用它了

ie3xauqp

ie3xauqp3#

根据其他答案,Base64适合我(仅一次)
步骤:

在我的工作站

base64 -w 0 cacerts   > cacerts.base64
sha256sum.exe cacerts.base64
keytool.exe  -list -v -keystore cacerts

开档

我连接到openshift并创建配置Map
oc创建配置Mapcacerts.base64 --来自文件=cacerts.base64

展开配置

...
  template:
    metadata:
      name: mydeployment...
    spec:
      volumes:
        - name: cacerts-volume
          configMap:
            name: cacerts.base64
      containers:
        - name: crg-driver
          command:
            - base64
      args:
            - '--decode'
            - '-w 0'
            - '/opt/axatech/openpaas/certificates/cacerts.base64 >   /opt/axatech/openpaas/certificates/cacerts' #this does not work yet
          env:
            - name: SWARM_JVM_ARGS
              value: >-
                -Djavax.net.ssl.trustStore=/opt/certificates/cacerts.base64
                -Djavax.net.ssl.trustStorePassword=changeit

         volumeMounts:
           - name: cacerts-volume
             mountPath: /opt/certificates

编辑/更新现有cacerts的最简单方法是将新cacerts编码为base64(使用选项-w 0),使用文件编辑器(即记事本)打开,通过OpenShift Console UI复制并粘贴内容

https://osconsole.mycloud.something.example/console/project/project-dev/browse/config-maps/cacerts.base64

或在命令行中
oc编辑配置Map缓存. base64

kyxcudwk

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不支持二进制文件。

i86rm4rw

i86rm4rw5#

我使用二进制文件的秘密。你可以使用--from-file

kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt
5t7ly7z5

5t7ly7z56#

如果你使用Secret来存储值,你可以利用stringData字段的属性。对值进行一次编码,并将其放入stringData字段而不是data字段。Kubernetes对当前stringData的值进行编码。这样我们就可以将手动base64编码从两个减少到一个。

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
stringData:
  some_key: YWJjZA==

有关二进制数据需要双重编码的原因的详细信息,请参阅以下link

1tu0hz3e

1tu0hz3e7#

如果您不想手动执行此操作,我建议您查看https://kustomize.io/
它们有一个configMap生成器,可从以下文件生成configMap:https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/configmapgenerator/#configmap-from-file
还支持二进制文件。例如:

configMapGenerator:
- name: text-config
  files:
  - configs/some.properties
- name: binary-cacerts
  files:
  - configs/keystore.jks
qmb5sa22

qmb5sa228#

自版本1.10起,配置图支持binaryData字段。

相关问题