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.
|Published on System Code Geeks with permission by Sebastian Daschner, partner at our SCG program. See the original article here: Injecting multiple Kubernetes volumes to the same directory|
Opinions expressed by System Code Geeks contributors are their own.