ConfigMap

ConfigMap stores key value pair configurations.

Creating ConfigMap

A ConfigMap can be created using imperative command and in a declarative way using resource yaml file.

Using imperative command

kubectl create configmap mysql-db --from-literal USER=user \
                                  --from-literal PASSWORD=password  

We can provide config data from file as well using --from-file option.

Using declarative approach

mysql-db-cm.yaml

apiVersion: v1
kind: ConfigMap
metadata:
    name: mysql-db-cm
    namespace: default
data:
    USER: user
    PASSWORD: password

Using this resource file we can create ConfigMap by running command,

kubectl create -f mysql-db-cm.yaml

Using ConfigMap

Simple use case of ConfigMap is to provide environment variables to a pod.

Using above ConfigMap definition file,

mysql-pod.yaml

apiVersion: v1
kind: Pod
metadata:
    name: mysql-db
    labels:
        type: db
spec:
    containers:
        - name: mysql
          image: mysql
          envFrom:
            - configMapRef:
                name: mysql-db-cm        

To provide selected values from ConfigMap,

containers:
    - name: mysql
      image: mysql
      env:
        - name: USER
          valueFrom:
              configMapKeyRef:
                  name: mysql-db-cm
                  key: USER