Wednesday, April 6, 2022

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


No comments:

Categories

Kubernetes (24) Docker (20) git (13) Jenkins (12) AWS (7) Jenkins CI (5) Vagrant (5) K8s (4) VirtualBox (4) CentOS7 (3) docker registry (3) docker-ee (3) ucp (3) Jenkins Automation (2) Jenkins Master Slave (2) Jenkins Project (2) containers (2) create deployment (2) docker EE (2) docker private registry (2) dockers (2) dtr (2) kubeadm (2) kubectl (2) kubelet (2) openssl (2) Alert Manager CLI (1) AlertManager (1) Apache Maven (1) Best DevOps interview questions (1) CentOS (1) Container as a Service (1) DevOps Interview Questions (1) Docker 19 CE on Ubuntu 19.04 (1) Docker Tutorial (1) Docker UCP (1) Docker installation on Ubunutu (1) Docker interview questions (1) Docker on PowerShell (1) Docker on Windows (1) Docker version (1) Docker-ee installation on CentOS (1) DockerHub (1) Features of DTR (1) Fedora (1) Freestyle Project (1) Git Install on CentOS (1) Git Install on Oracle Linux (1) Git Install on RHEL (1) Git Source based installation (1) Git line ending setup (1) Git migration (1) Grafana on Windows (1) Install DTR (1) Install Docker on Windows Server (1) Install Maven on CentOS (1) Issues (1) Jenkins CI server on AWS instance (1) Jenkins First Job (1) Jenkins Installation on CentOS7 (1) Jenkins Master (1) Jenkins automatic build (1) Jenkins installation on Ubuntu 18.04 (1) Jenkins integration with GitHub server (1) Jenkins on AWS Ubuntu (1) Kubernetes Cluster provisioning (1) Kubernetes interview questions (1) Kuberntes Installation (1) Maven (1) Maven installation on Unix (1) Operations interview Questions (1) Oracle Linux (1) Personal access tokens on GitHub (1) Problem in Docker (1) Prometheus (1) Prometheus CLI (1) RHEL (1) SCM (1) SCM Poll (1) SRE interview questions (1) Troubleshooting (1) Uninstall Git (1) Uninstall Git on CentOS7 (1) Universal Control Plane (1) Vagrantfile (1) amtool (1) aws IAM Role (1) aws policy (1) caas (1) chef installation (1) create organization on UCP (1) create team on UCP (1) docker CE (1) docker UCP console (1) docker command line (1) docker commands (1) docker community edition (1) docker container (1) docker editions (1) docker enterprise edition (1) docker enterprise edition deep dive (1) docker for windows (1) docker hub (1) docker installation (1) docker node (1) docker releases (1) docker secure registry (1) docker service (1) docker swarm init (1) docker swarm join (1) docker trusted registry (1) elasticBeanStalk (1) global configurations (1) helm installation issue (1) mvn (1) namespaces (1) promtool (1) service creation (1) slack (1)