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 |