Day 35: Mastering ConfigMaps and Secrets in KubernetesπŸ”’πŸ”‘πŸ›‘οΈ

Day 35: Mastering ConfigMaps and Secrets in KubernetesπŸ”’πŸ”‘πŸ›‘οΈ

Β·

3 min read

πŸ‘πŸŽ‰ Yay! Yesterday we conquered Namespaces and Services πŸ’ͺπŸ’»πŸ”—πŸš€

What are ConfigMaps and Secrets in k8s

In Kubernetes, ConfigMaps and Secrets are used to store configuration data and secrets, respectively. ConfigMaps store configuration data as key-value pairs, while Secrets store sensitive data in an encrypted form.

  • Example :- Imagine you're in charge of a big spaceship (Kubernetes cluster) with lots of different parts (containers) that need information to function properly. ConfigMaps are like a file cabinet where you store all the information each part needs in simple, labeled folders (key-value pairs). Secrets, on the other hand, are like a safe where you keep the important, sensitive information that shouldn't be accessible to just anyone (encrypted data). So, using ConfigMaps and Secrets, you can ensure each part of your spaceship (Kubernetes cluster) has the information it needs to work properly and keep sensitive information secure! πŸš€

  • Read more about ConfigMap & Secret.

Today's task:

Task 1:

  • Create a folder of mysql -db and enter into it
mkdir MYSQL-DB && cd MYSQL-DB
  • Create a file configmap.yml
# vim configMap.yml
-------------------------------------------------------------------------------
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
  namespace: django-app
  labels:
    app: mysql
data:
  MYSQL_DATABASE: "todo-db"

  • Verify that the configmap is working by accessing the todo-app

kubectl apply -f configMap.yml -n django-app
kubectl get configMap -n django-app

kubectl get pods -n django-app

  • Now update the deployment.yml file to include the ConfigMap
# vim deployment.yml
-------------------------------------------------------------------------------
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deploymnet
  namespace: django-app
  labels:
    app: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - name: mysql
          image: mysql:8
          ports:
            - containerPort: 3306
          env:
            - name: MYSQL_DATABASE
              valueFrom:
                configMapKeyRef:
                  name: mysql-config
                  key: MYSQL_DATABASE

  • Verify that the deployment is working by accessing the todo-app

kubectl apply -f deployment.yml -n django-app
kubectl get deployment -n django-app
kubectl get pods -n django-app

Task 2:

  • create a yaml file Secret.yaml
# vim secret.yaml
-------------------------------------------------------------------------------
apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
  namespace: django-app
  labels:
    app: mysql
type: Opaque
data:
  MYSQL_ROOT_PASSWORD: c3JpcGFydGh1
  • Verify that the secret is working by accessing the todo-app

kubectl apply -f secrets.yaml -n django-app
kubectl get secrets -n django-app

  • Now update the deployment.yml file to include the secrets
# vim deployment.yaml
-------------------------------------------------------------------------------
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deploymnet
  namespace: django-app
  labels:
    app: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - name: mysql
          image: mysql:8
          ports:
            - containerPort: 3306
          env:
            - name: MYSQL_DATABASE
              valueFrom:
                configMapKeyRef:
                  name: mysql-config
                  key: MYSQL_DATABASE
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql-secret
                  key: MYSQL_ROOT_PASSWORD
  • Verify that the deployment is working by accessing the todo-app

kubectl apply -f deploymnet.yml -n django-app
kubectl get deployment -n django-app
kubectl get pods -n django-app


Happy Learning

Thanks For Reading! :)

-Sri ParthuπŸ’πŸ’₯

Β