Empty Dir


Empty Dir

컨테이너 파일시스템은 컨테이너가 실행되고 있는 동안만 존재한다.

컨테이너가 종료되면 스토리지 볼륨은 삭제된다.

pod 내의 컨테이너가 크래시 되어서 삭제되거나 재시작 되더라도

emptyDir 의 라이프사이클은 pod 단위이기때문에 emptyDir 은 삭제되지 않고 계속해서 사용가능하다.

emptyDir 은 디스크 대신에 메모리를 사용하는것도 가능하다. (빠르다.)

 

empty.yaml

[vagrant@master work]$ cat empty.yaml
apiVersion: v1
kind: Pod
metadata:
  name: redis
spec:
  containers:
  - name: redis
    image: redis
    volumeMounts:
    - name: redis-storage
      mountPath: /data/redis
  volumes:
  - name: redis-storage
    emptyDir: {}

 

파드 확인

[vagrant@master work]$ kubectl get pods -o wide
NAME    READY   STATUS    RESTARTS      AGE     IP            NODE      NOMINATED NODE   READINESS GATES
redis   1/1     Running   0             3m48s   10.244.2.94   worker2   <none>           <none>
test    1/1     Running   1 (56m ago)   118m    10.244.2.93   worker2   <none>           <none>
x       1/1     Running   0             148m    10.244.2.88   worker2   <none>           <none>

 

마운트한 redis 디렉터리에 파일하나 생성

[vagrant@master work]$ kubectl exec -it redis -- /bin/bash -c "echo 'hello redis' > redis/redis.txt"
[vagrant@master work]$ kubectl exec -it redis -- /bin/bash -c "ls redis"                           
redis.txt

 

pod를 관리하는 노드(worker2)로 접속해서 파일 위치 확인

[vagrant@master work]$ ssh w2
Warning: Permanently added 'w2' (RSA) to the list of known hosts.

[vagrant@worker2 ~]$ sudo find / -name redis.txt
/var/lib/kubelet/pods/d3457f68-8a33-4701-ab51-2e40300d239a/volumes/kubernetes.io~empty-dir/redis-storage/redis.txt

[vagrant@worker2 ~]$ sudo cat /var/lib/kubelet/pods/d3457f68-8a33-4701-ab51-2e40300d239a/volumes/kubernetes.io~empty-dir/redis-storage/redis.txt
hello redis

 

pod를 삭제하면 데이터가 날아감

[vagrant@master work]$ kubectl delete pods redis
pod "redis" deleted
[vagrant@master work]$ ssh w2
Last login: Tue Mar 12 14:50:51 2024 from 192.168.98.10
[vagrant@worker2 ~]$ sudo cat /var/lib/kubelet/pods/d3457f68-8a33-4701-ab51-2e40300d239a/volumes/kubernetes.io~empty-dir/redis-storage/redis.txt
cat: /var/lib/kubelet/pods/d3457f68-8a33-4701-ab51-2e40300d239a/volumes/kubernetes.io~empty-dir/redis-storage/redis.txt: No such file or directory

 

다시 적용 후 찾아보면 없음

[vagrant@master work]$ kubectl apply -f empty.yaml
pod/redis created

[vagrant@master work]$ kubectl get pods -o wide
NAME    READY   STATUS    RESTARTS      AGE    IP            NODE      NOMINATED NODE   READINESS GATES
redis   1/1     Running   0             13s    10.244.1.64   worker1   <none>           <none>
test    1/1     Running   2 (68s ago)   122m   10.244.2.93   worker2   <none>           <none>
x       1/1     Running   0             153m   10.244.2.88   worker2   <none>           <none>

[vagrant@master work]$ kubectl exec -it redis -- /bin/bash -c "ls redis"

 

스토리지를 메모리로 쓰는 법

limit를 2G로 잡았는데 안쓰면 가용용량 전부를 메모리로 사용할 수 있음

[vagrant@master work]$ cat memory.yaml
apiVersion: v1
kind: Pod
metadata:
  name: redis
spec:
  containers:
  - name: redis
    image: redis
    volumeMounts:
    - name: redis-storage
      mountPath: /data/redis
  volumes:
  - name: redis-storage
    emptyDir:
      medium: Memory
      sizeLimit: 2G

 

redis pod의 /data/redis를 확인해보면 tmpfs다.

[vagrant@master work]$ kubectl exec -it redis -- /bin/bash -c "df -h /data/redis"
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           1.9G     0  1.9G   0% /data/redis

 

원래 medium: Memory를 안썼을 때는 /dev/mapper~ 로 저장소로 마운트 된다.

[vagrant@master work]$ kubectl exec -it redis -- /bin/bash -c "df -h"
Filesystem                   Size  Used Avail Use% Mounted on
overlay                      125G  4.4G  121G   4% /
tmpfs                         64M     0   64M   0% /dev
tmpfs                        1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/cl_centos8-root  125G  4.4G  121G   4% /data
shm                           64M     0   64M   0% /dev/shm
tmpfs                        3.6G   12K  3.6G   1% /run/secrets/kubernetes.io/serviceaccount
tmpfs                        1.9G     0  1.9G   0% /proc/acpi
tmpfs                        1.9G     0  1.9G   0% /proc/scsi
tmpfs                        1.9G     0  1.9G   0% /sys/firmware

 

redis를 관리하는 노드를 확인하고

[vagrant@master work]$ kubectl get pods -o wide
NAME    READY   STATUS    RESTARTS        AGE    IP            NODE      NOMINATED NODE   READINESS GATES
redis   1/1     Running   0               2m     10.244.2.95   worker2   <none>           <none>
test    1/1     Running   2 (6m55s ago)   128m   10.244.2.93   worker2   <none>           <none>
x       1/1     Running   0               159m   10.244.2.88   worker2   <none>           <none>

 

접속해서 free -h 명령으로 메모리 용량을 보면 1.9Gi가 남아있다.

[vagrant@master work]$ ssh w2
Last login: Tue Mar 12 14:52:53 2024 from 192.168.98.10
[vagrant@worker2 ~]$ free -h
              total        used        free      shared  buff/cache   available
Mem:          3.6Gi       395Mi       1.9Gi        17Mi       1.3Gi       3.0Gi
Swap:            0B          0B          0B

 

1.5G 짜리 파일을 redis pod에 만들어 준 후, 다시 노드의 메모리 용량을 확인해보면

[vagrant@master work]$ kubectl exec -it redis -- /bin/bash -c "dd if=/dev/zero of=./bigfile bs=1M count=1500 status=progress"
1301282816 bytes (1.3 GB, 1.2 GiB) copied, 3 s, 434 MB/s
1500+0 records in
1500+0 records out
1572864000 bytes (1.6 GB, 1.5 GiB) copied, 3.70141 s, 425 MB/s

 

465Mi만이 남을 것을 확인할 수 있다.

[vagrant@master work]$ ssh w2
Last login: Tue Mar 12 15:01:22 2024 from 192.168.98.10
^[[A[vagrant@worker2 ~]$ free -h
              total        used        free      shared  buff/cache   available
Mem:          3.6Gi       399Mi       465Mi        17Mi       2.8Gi       3.0Gi
Swap:            0B          0B          0B

 

파일을 삭제하고 다시 확인해보면 메모리 용량이 돌아와 있다.

[vagrant@master work]$ kubectl exec -it redis -- /bin/bash -c "rm -rf ./bigfile"                   [vagrant@master work]$ ssh w2
Last login: Tue Mar 12 15:02:40 2024 from 192.168.98.10
[vagrant@worker2 ~]$ free -h
              total        used        free      shared  buff/cache   available
Mem:          3.6Gi       400Mi       1.9Gi        17Mi       1.3Gi       3.0Gi
Swap:            0B          0B          0B

'Container > Kubernetes' 카테고리의 다른 글

kubernetes Persistent Storage (PV / PVC)  (0) 2024.03.12
kubernetes volumes - nfs  (0) 2024.03.12
Kubernetes nodes Roles 변경  (0) 2024.03.12
Pod 내에 container 생성  (0) 2024.03.08
Deployment  (0) 2024.03.08

+ Recent posts