DevOps Classroom notes 16/Oct/2026

K8s storage:

  • Container are ephameral. when container will restart , everthing will be wirte in file system it will be lost.
  • K8s Storage sloved two problem
  1. Presistance: data will survives container restart and pod rescheduling.
  2. Sharing: multiple container can share data.

Storage building blocks:

Volume:

  • scope level is pod
  • directly access container in pod
volume 
  - name: demo 
    path: /data/mysql 

Volume ==> create and name volume ==> POD will use it 

PersistentVolume (PV):

  • scope level is cluser
  • A piece of storage created/provisioned by admin or dynamically

PersistentVolume Claim (PVc):

  • scope level is namespace
  • User request storage (required by container)

Storage class:

  • scope level is cluster
  • Define storage class and enable dynamic provisioning
EX: local-path, NFS

CSI Drivers:

  • CSI Stands for Container Storage Interface
  • scope level is cluser
  • plugin like EBS, AZure DIsk, NFS…etc

Ephameral Vloume types:

  • these are live and die with the pod

emptyDir

  • An Empty dir will create when pod started . Delete dir when pod get deleted/removed
  • Use-cases:
    • scratch space (every time need new space storage)
    • Cache
    • Sharing file between sidecar container and main container.
# create empty vloume
volumes:
 - name: shared
   emptyDir: {}

## Mount volume
volumeMounts:
 - name: shared
   mountpath: /data

Ram-base variant

volumes:
 - name: cache
   emptyDir: {}
      medium: Memory
      sizeLimit: 256Mi

Sample yaml for emptyDir volume:

apiVersion: apps/v1
kind: Deployment

metadata:
  name: recreate-deployment-app
  labels:
    app: apache2

spec:
  replicas: 2

  selector:
    matchLabels:
      app: apache2

  strategy:
    type: Recreate

  template:
    metadata:
      labels:
        app: apache2

    spec:
      initContainers:
        - name: download-template
          image: alpine:latest
          command:
            - sh
            - -c
            - |
              apk add --no-cache wget unzip
              wget -O /tmp/templatemo_589_lugx_gaming.zip \
                https://templatemo.com/tm-zip-files-2020/templatemo_589_lugx_gaming.zip
              unzip /tmp/templatemo_589_lugx_gaming.zip \
                -d /usr/local/apache2/htdocs/
              cp /usr/local/apache2/htdocs/templatemo_589_lugx_gaming/* /usr/local/apache2/htdocs/
              rm -rf /usr/local/apache2/htdocs/templatemo_589_lugx_gaming
          volumeMounts:
            - name: apache2-html
              mountPath: /usr/local/apache2/htdocs/

      containers:
        - name: apache2
          image: httpd:2
          ports:
            - containerPort: 80

          volumeMounts:
            - name: apache2-html
              mountPath: /usr/local/apache2/htdocs/

      volumes:
        - name: apache2-html
          emptyDir: {}

---
apiVersion: v1
kind: Service
metadata:
  name: nodeport-service-apache2
  labels:
    app: apache2
spec:
  type: NodePort
  selector:
    app: apache2  
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30010

Task:

  1. create similar way volume emptyDir
  2. used main image nginx image and create init container download sample template from https://templatemo.com
  3. deploy and valiadte endpoint
FROM nginx
COPY static-html-directory /usr/share/nginx/html

Leave a comment

Turn on JavaScript to leave a comment.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Please turn AdBlock off
Social Media Icons Powered by Acurax Web Design Company
Exit mobile version
%%footer%%