Injecting multiple Kubernetes volumes to the same directorytuesday, april 10, 2018
Kubernetes config maps and secrets allow use to inject configuration files into containers. If we want multiple config entries that originate from different config maps or secrets to be injected into the same location, we are required to specify a sub path:
kind: Deployment apiVersion: apps/v1 metadata: name: hello-world spec: replicas: 1 template: metadata: labels: app: hello-world spec: containers: - name: hello-world image: docker.example.com/app:1 volumeMounts: - name: hello-world-config-volume mountPath: /config/application.properties subPath: application.properties readOnly: true - name: hello-world-credentials-volume mountPath: /config/credentials.properties subPath: credentials.properties readOnly: true volumes: - name: hello-world-config-volume configMap: name: hello-world-config - name: hello-world-credentials-volume secret: secretName: hello-world-credentials
This example will create two volumes from the contents of the config map
hello-world-config and the secret
Imagine, these resources have the following contents:
kind: ConfigMap apiVersion: v1 metadata: name: hello-world-config data: application.properties: | greeting=Hello name=World --- kind: Secret apiVersion: v1 metadata: name: hello-world-credentials data: credentials.properties: <base64> type: Opaque
The example will mount the file contents of the key
application.properties of the config map to a file with the same name under
/config/ and will mount the secret value
credentials.properties as the second file under that directory.
The application will be able to access both files read-only.
subPath declaration also allows to mount a single volume into the pod multiple times with different sub paths.
This post was reposted from my newsletter issue 021.
Found the post useful? Subscribe to my newsletter for more free content, tips and tricks on IT & Java:
All opinions are my own and do not reflect those of my employer or colleagues.