In a Kubernetes Pod, Overriding a File using ConfigMap

adil
2 min readJul 31, 2023

--

Many applications don’t use environment variables but instead, use one or more config files.

However, it could be challenging to override an existing file by using ConfigMap.

I will walk through replacing an existing file in a pod. For the sake of simplicity, I will replace the /etc/host.conf file.

The config file on my computer:

➜ ~ cat host-config-file.txt
multi off

You may want to create a ConfigMap entry in an imperative way:

kubectl create configmap host-config-data --from-file=host-config-file.txt

But if you create the config map, in an imperative way, the local filename is assigned as the data key.

kubectl get configmaps host-config-data -o yaml
apiVersion: v1
data:
host-config-file.txt: |
multi off

Declarative way:

apiVersion: v1
kind: ConfigMap
metadata:
name: host-config-data
data:
data_custom_key: |-
multi off

Create the config map:

➜ ~ kubectl create -f configmap.yml
configmap/host-config-data created
➜ ~ kubectl get configmaps host-config-data -o yaml
apiVersion: v1
data:
data_custom_key: multi off

Create the deployment file:

apiVersion: apps/v1
kind: Deployment
metadata:
name: memcached-server-deployment
spec:
replicas: 2
selector:
matchLabels:
cache: memcached
template:
metadata:
labels:
cache: memcached
spec:
containers:
- name: memcached-container
image: memcached:bullseye
volumeMounts:
- name: config-override
mountPath: /etc/host.conf
subPath: custom_path
volumes:
- name: config-override
configMap:
name: host-config-data
items:
- key: data_custom_key
path: custom_path

I used a different word for each segment so you can distinguish which parts are related to each other.

Result:

kubectl exec -it memcached-server-deployment-67858696f7-b72vn -- /bin/bash
memcache@memcached-server-deployment-67858696f7-b72vn:/$ cat /etc/host.conf
multi off

--

--