sebastiandaschner blog
Injecting multiple Kubernetes volumes to the same directory
tuesday, april 10, 2018Kubernetes 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 hello-world-credentials
.
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.
The 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: