2016-09-09 1 views
8

バイナリファイルをKubernetesConfigMapに保存し、後でこのConfigMapをマウントするボリュームから同じ内容を読み取ることはできますか?例えば、ディレクトリ/etc/mycompany/myapp/configバイナリファイルをKubernetes ConfigMapに保存するにはどうしたらいいですか?

kubectl create configmap myapp-config --from-file=/etc/mycompany/myapp/config 

は、後でボリュームにマッピングすることができるConfigMap myapp-configでファイルkeystore.jksを含む容器に取り付けられ、およびバイナリファイルとして読まれ、バイナリファイルkeystore.jks含まれている場合は?例えば

は、以下ポッド仕様を与え、keystore.jks/etc/mycompany/myapp/config/keystore.jksmyappに利用可能でなければなりませんか?

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バージョンの詳細:

[email protected]:~/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"} 
+0

私はKubernetesがバイナリ 'keystore.jks'をconfigmapに保存していますが、ファイルサイズは元のファイルより大きく、その後configmapがマップされたボリューム内のファイルのサイズも大きいことがわかりました。 –

+0

私は問題https://github.com/kubernetes/kubernetes/issues/32432を報告しました。 –

+0

問題をバグレポートから機能要求に変更しました。 –

答えて

1

"Enable ConfigMaps to store binary files as well as character files." Kubernetes号にJorgan Liggittによると、Kubernetes 1.3.6はConfigMapでバイナリファイルを保存することはできません。

GitHubのコメント1

設定マップデータを格納した文字列としてではなく、[]バイト...わからない私は は「彼らに

を任意のバイナリコンテンツを置くことができることを期待したいです

GitHubのコメント2ます。Do ConfigMaps @liggitt

ないENCバイナリコンテンツを文字列として扱う?

文字列を格納しません。私はその後demonstrated ConfigMapsは、バイナリファイルをサポートしていないこと

を必要に応じて、base64でエンコードは、アプリケーションロジックと 上に階層化することができます。私はどうなるのか

3

は、base64で、このファイルをエンコードして、デコードされた使用するコンテナは、他の回答に基づいて

+0

良いアイデア! Kubernetesがhttps://github.com/kubernetes/kubernetes/issues/32432を実装するまで私はこれを行うかもしれない。 –

+0

動作しますか?私はBase64で私のキーストアをエンコードし、私の秘密にこのbase64の値を加え、ここで説明するように私の秘密をボリュームとしてマウントしました:https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-ポッドから、そして最後に私のクラスタに展開されました。このボリュームを含むすべてのポッドは起動できません:/ –

+0

実際には動作しますが、バイナリファイルを「base64エンコード」する必要があります。一度だけ行うと、ストアに保存された値はバイナリ形式(文字列)になります。この文字列には、Goコードが理解できない多くの奇妙な文字が含まれています。最後に、サーバーに.jksファイルを作成するには、 'initContainer'を使うことができます:https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-initialization/#creating-a-pod-秘密の値を "base64でデコード"してファイルに入れる初期化コンテナを持っています。 –

0

は、Base64では

ステップ(一度だけ)私の作品にそれを使用できるようにすることです。私のワークステーション上

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

OpenShift

私はopenshiftに接続し、設定マップを作成します

oc create configmap cacerts.base64 --from-file = cacertsbase64で

展開構成

... 
    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を編集する最も簡単な方法は、(0 -wオプション付き)をbase64に新規のcacertsをエンコードするファイルエディタ(つまりメモ帳)でそれを開くことです、コンテンツをコピーして、

OC編集configmapのcacerts.base64

0 OpenShiftコンソールUI

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

を介して、またはコマンドラインに貼り付け

関連する問題