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

Der*_*har 16 configuration configuration-files kubernetes

可以在Kubernetes ConfigMap中存储二进制文件,然后从安装此ConfigMap的卷中读取相同的内容吗?例如,如果目录/etc/mycompany/myapp/config包含二进制文件keystore.jks,则会

kubectl create configmap myapp-config --from-file=/etc/mycompany/myapp/config
Run Code Online (Sandbox Code Playgroud)

keystore.jks在ConfigMap myapp-config中包含文件,以后可以映射到卷,挂载到容器中,并作为二进制文件读取?

例如,假设下面的吊舱规范,应该keystore.jks是提供给myapp/etc/mycompany/myapp/config/keystore.jks

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
Run Code Online (Sandbox Code Playgroud)

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"}
Run Code Online (Sandbox Code Playgroud)

小智 15

自Kubernetes版本1.10.0起,现在支持二进制ConfigMaps.从自述文件中注意到:

ConfigMap对象现在通过新的binaryData字段支持二进制数据.使用kubectl create configmap --from-file时,包含非UTF8数据的文件将放在此新字段中,以保留非UTF8数据.请注意,kubectl的--append-hash功能不会考虑binaryData.使用此功能需要1.10+ apiserver和kubelet.(#57938,@ dims)

有关详细信息,请参阅更改日志:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.10.md#apps

  • 链接已损坏。2020 年该功能的状态如何? (3认同)

小智 5

我会做的是在 base64 中编码这个文件,然后使用解码的容器能够使用它


And*_*dis 5

根据其他答案,Base64 对我有用(仅一次)

脚步:

在我的工作站上

base64 -w 0 cacerts   > cacerts.base64
sha256sum.exe cacerts.base64
keytool.exe  -list -v -keystore cacerts
Run Code Online (Sandbox Code Playgroud)

开放式班次

我连接到 openshift 并创建配置图

oc 创建 configmap cacerts.base64 --from-file=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
Run Code Online (Sandbox Code Playgroud)

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

https://osconsole.mycloud.something.example/console/project/project-dev/browse/config-maps/cacerts.base64
Run Code Online (Sandbox Code Playgroud)

或在命令行中

oc 编辑 configmap cacerts.base64