web-dev-qa-db-ja.com

Kubernetes ConfigMapにバイナリファイルを保存するにはどうすればよいですか?

バイナリファイルを KubernetesConfigMap に保存し、後でこのConfigMapをマウントするボリュームから同じコンテンツを読み取ることはできますか?たとえば、ディレクトリ/etc/mycompany/myapp/configにはバイナリファイルが含まれますkeystore.jks、意志

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

インクルードファイルkeystore.jks ConfigMapでmyapp-config後でボリュームにマッピングし、コンテナにマウントし、バイナリファイルとして読み取ることができますか?

たとえば、次のポッド仕様を考えると、keystore.jksmyappで利用可能/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

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"}
16
Derek Mahar

Kubernetesバージョン1.10.0以降、バイナリConfigMapがサポートされるようになりました。 READMEノートから:

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-1.10.md#apps

13
olly___

私がやることは、このファイルをbase64でエンコードしてから、デコードを使用するコンテナを使用できるようにすることです

4
Luis Tobon

Kubernetesの問題の Jorgan Liggitt によると、「 ConfigMapsを有効にしてバイナリファイルと文字ファイルを保存する 」により、Kubernetes 1.3.6はConfigMapにバイナリファイルを保存できません。

GitHubコメント 1

構成マップは、データを[] byteではなく文字列として保存します...任意のバイナリコンテンツを格納できるとは思いません」

GitHubコメント 2

@liggitt ConfigMapsはバイナリコンテンツを文字列としてエンコードしませんか?

それらは文字列を保存しません。必要に応じて、base64-encodingをアプリケーションロジックと重ねることができます

その後、 デモ ConfigMapsはバイナリファイルをサポートしません。

2
Derek Mahar

他の回答に基づいて、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 = 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編集configmap cacerts.base64