Lesson 6.1: ConfigMaps


In Kubernetes, ConfigMaps are used to manage configuration data as key-value pairs. They allow you to decouple configuration from application code, making it easier to manage and update configurations without modifying the application itself. There are two main ways to create and use ConfigMaps:

  • Imperative Way: Using kubectl create configmap commands.
  • Declarative Way: Using YAML manifests.

Imperative Way

In the imperative approach, you use kubectl commands to create and manage ConfigMaps directly from the command line.

[root@master confsec]# kubectl create cm app-cm --from-literal=firstname=sanjeeb  --from-literal=lastname=kc
configmap/app-cm created
[root@master confsec]# kubectl get cm 
NAME               DATA   AGE
app-cm             2      4s
kube-root-ca.crt   1      6d5h
[root@master confsec]# kubectl describe cm app-cm 
Name:         app-cm
Namespace:    default
Labels:       <none>
Annotations:  <none>
 
Data
====
firstname:
----
sanjeeb
 
lastname:
----
kc
 
 
BinaryData
====
 
Events:  <none>
 
# Create a Pod YAML file (pod.yml) that references the ConfigMap
[root@master confsec]# cat pod.yml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    name: myapp
spec:
  containers:
  - name: nginx-container
    image: nginx:latest
    env: 
    - name: FIRSTNAME
      valueFrom:
        configMapKeyRef:
          name: app-cm
          key: firstname
 
[root@master confsec]# kubectl exec -it nginx-pod -- sh
# echo $FIRSTNAME
sanjeeb
# exit
  • env: Defines environment variables for the container.
  • valueFrom.configMapKeyRef: References a specific key (firstname) from the ConfigMap (app-cm).

Declarative Way

In the declarative approach, you define the ConfigMap and Pod in YAML files and apply them using kubectl apply.

[root@master confsec]# kubectl create cm app-cm --from-literal=firstname=John --from-literal=lastname=Doe --dry-run=client -o yaml > cm.yml 
[root@master confsec]# cat cm.yml 
apiVersion: v1
data:
  firstname: John
  lastname: Doe
kind: ConfigMap
metadata:
  creationTimestamp: null
  name: app-cm
 
[root@master confsec]# cat pod.yml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    name: myapp
spec:
  containers:
  - name: nginx-container
    image: nginx:latest
    envFrom:
    - configMapRef:
        name: app-cm
 
[root@master confsec]# kubectl apply -f cm.yml 
configmap/app-cm created
 
[root@master confsec]# kubectl apply -f pod.yml 
pod/nginx-pod created
 
[root@master confsec]# kubectl get pods 
NAME        READY   STATUS    RESTARTS   AGE
nginx-pod   1/1     Running   0          4s
 
[root@master confsec]# 
[root@master confsec]# kubectl get cm 
NAME               DATA   AGE
app-cm             2      85s
 
[root@master confsec]# kubectl exec -it nginx-pod -- sh 
# echo $firstname 
John
# echo $lastname
Doe
# exit
 
All systems normal

© 2025 2023 Sanjeeb KC. All rights reserved.