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 configuratonsConfigMaps 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 used in Kubernetes Pods |
Creating ConfigMaps
The following is the syntax for the creating the ConfigMapskubectl create configmap [mapname] [data-source] kubectl create configmap [configmapName] [--from-file file_path]|[--from-literal key=value]
- directories
- Files
- Literal Values
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 systemkubectl 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-cmNote 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 wideDescribe the cm
kubectl describe cm app-config kubectl get configmaps app-config -o yamlobserve 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-fileecho "app.name=web-state app.env=dev" > redis-filecreating...
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:
Post a Comment