ConfigMaps in Kubernetes

Hello guys, welcome back to my DevSecOps learning posts, Today I have a new Kubernetes object  Config Maps, This is like any other object we can create, get, delete and describe ConfigMaps. Just same as our Perl, Python, and Java languages support 'Hashmaps' to store the collection of data items. Here in t Kubernetes, we can use a map during the deployment of Pod/Container.

A ConfigMap object can be used to store the configuration data items. This could be a set of properties required inside the application that runs inside a Container. it could be an environment variable which can be a ref to a key that has a value defined in the ConfigMap.


What is ConfigMap in Kubernetes?

ConfigMaps hold configuration in key-value pairs which are accessed by Pod containers Similar to the Linux /etc configuratons 

ConfigMaps can hold Properties files of an application – For Example Java applications hibernate.properties log4j.properties, logging.conf

The entire configuration file can be used from ConfigMap

We can also add JSON files as ConfigMap

Once ConfirMap is created, Kubernetes objects are ready for injecting in running containers to get the new configuration changes.

ConfigMap in Kubernetes
ConfigMap used in Kubernetes Pods


Creating ConfigMaps

The following is the syntax for the creating the ConfigMaps
  kubectl create configmap [mapname] [data-source]
  kubectl create configmap [configmapName] [--from-file file_path]|[--from-literal key=value]
  
Here the data-source ConfigMaps can be created in three ways:
  • directories
  • Files
  • Literal Values

Let's start exploring about ConfigMaps, To check ConfigMap have a short name and support for the namespaces using :
kubectl api-resources
(or)
kubectl api-resources |grep -i configmap

How do you check is there any ConfigMap exist in your  Kubernetes cluster?

We can check the configmaps exists on our Kubernetes system
kubectl get cm
  or 
kubectl get configmaps

Creating ConfigMaps using Literals

We can use key-value pairs in the command line and Create a simple configmap object using the literal by using --from-literal option:
  
kubectl create configmap devdb-cm --from-literal=dev.database_ip="192.168.30.2"
To check details about the newly created cm devdb-cm
  
kubectl describe cm devdb-cm
Note that  you can add multiple key-value pairs as data.
kubectl create configmap devapp-cm \
 --from-literal=app.envname="dev" \
 --from-literal=app.url="vtdev.com" \
 --from-literal=app.mem="1024m"
 
 kubectl create configmap prod-cm \
 --from-literal=app.envname="prod" \
 --from-literal=app.url="vtprod.com" \
 --from-literal=app.mem="8096m"
 
kubectl get cm 
kubectl describe cm devapp-cm
kubectl describe cm  prod-cm

2: Creating Using Directory

create a directory and have configMap files in it.
mkdir  cm-dir/; cd cm-dir
     echo "admin"> a.properties
	 echo "dev-env">b.properties
  
  
  kubectl create configmap app-config --from-file=cm-dir 
  
  kubectl get configmaps -o wide   
  
Describe the cm
  kubectl describe cm app-config 
  kubectl get configmaps app-config -o yaml 
observe the difference using -o yaml and the describe there you can find DATA section.
 

3: Creating Using a File

Create another ConfigMap using Files redis-file
  
  echo "app.name=web-state
  app.env=dev" > redis-file
creating...
    kubectl create configmap redis-config --from-file=redis-config

4: Declarative way using YAML

In the declarative approch, your YML you must create ConfigMap before refering it in Pod spec or template spec.
  
apiVersion: v1
kind: Pod 
metadata: 
  name: redis 
 spec: 
   containers: 
   - name: redis
     image: kubernetes/redis:v1
     volumeMounts:
	 - mountPath: /redis-master
	   name: config
volumes: 
  - name: config
    configMap: 
	  name: myredis-config
	  items:
	  - key: redis-config
	    path: redis.conf 


You can inject the configMap to a pod, here redis pod included as 'VolumeMounts', volume connects

  
kubectl apply -f redis-config.yml
kubectl exec redis cat /redis-master/redis.conf 		
kubectl exec -it redis redis-cli 

Pod associating with ConfigMaps

Using VolumeMounts pointing to Volume

Using env variable map to ConfigMap key reference


Comments

Popular posts from this blog

Ansible 11 The uri module with examples

Jenkins Active choices parameter - Dynamic input

DevOps Weapons