シークレットを使用して1つのファイルをマウントすることを検討していましたが、他のすべてのコンテンツを上書きするディレクトリのみをマウントできるようです。ディレクトリをマウントせずに単一の構成ファイルを共有するにはどうすればよいですか?
回答:
たとえば、2つの構成ファイルを含む構成マップがあるとします。
kubectl create configmap config --from-file <file1> --from-file <file2>
次のようなsubPathを使用して、単一のファイルを既存のディレクトリにマウントできます。
---
volumeMounts:
- name: "config"
mountPath: "/<existing folder>/<file1>"
subPath: "<file1>"
- name: "config"
mountPath: "/<existing folder>/<file2>"
subPath: "<file2>"
restartPolicy: Always
volumes:
- name: "config"
configMap:
name: "config"
---
ここに完全な例
私はここからこの作業例から始めます。少なくともKubernetes 1.3を使用していることを確認してください。
次のようなConfigMapを作成するだけです。
apiVersion: v1
kind: ConfigMap
metadata:
name: test-pd-plus-cfgmap
data:
file-from-cfgmap: file data
次に、次のようなポッドを作成します。
apiVersion: v1
kind: Pod
metadata:
name: test-pd-plus-cfgmap
spec:
containers:
- image: ubuntu
name: bash
stdin: true
stdinOnce: true
tty: true
volumeMounts:
- mountPath: /mnt
name: pd
- mountPath: /mnt/file-from-cfgmap
name: cfgmap
subPath: file-from-cfgmap
volumes:
- name: pd
gcePersistentDisk:
pdName: testdisk
- name: cfgmap
configMap:
name: test-pd-plus-cfgmap
現在(v1.0、v1.1)は、単一の構成ファイルをボリュームマウントする方法はありません。シークレット構造は、当然ながら複数のシークレットを表すことができます。つまり、ディレクトリでなければなりません。
設定オブジェクトを取得する場合、単一のファイルがサポートされている必要があります。
その間、ディレクトリをマウントして、イメージからシンボリックリンクを作成できますか?
ロギングを拡張するために、実行中のデプロイメントに新しいlog4j2.xmlをマウントするとします。
# Variables
k8s_namespace=xcs
deployment_name=orders-service
container_name=orders-service
container_working_dir=/opt/orders-service
# Create config map and patch deployment
kubectl -n ${k8s_namespace} create cm log4j \
--from-file=log4j2.xml=./log4j2.xml
kubectl -n ${k8s_namespace} patch deployment ${deployment_name} \
-p '{"spec":{"template":{"spec":{"volumes":[{"configMap":{"defaultMode": 420,"name": "log4j"},"name": "log4j"}]}}}}'
kubectl -n ${k8s_namespace} patch deployment ${deployment_name} \
-p '{"spec":{"template":{"spec":{"containers":[{"name": "'${container_name}'","volumeMounts": [{ "mountPath": "'${container_working_dir}'/log4j2.xml","name": "log4j","subPath": "log4j2.xml"}]}]}}}}'