Cloud/Kubernetes

Kubernetes Volume - emptyDir 사용해보기

cstory-bo 2024. 4. 17. 10:49

emptyDir은

Pod 내의 Container 간의 볼륨 마운트를 위한 오브젝트이다.

주의할 점은,
Pod와 Lifecycle이 같기 때문에 Pod가 삭제되면 같이 삭제되니만,
emptyDir로 sideCar나 앰버서더 와 같은 다양한 디자인패턴을 구현할 수 있다.

non-persistent volume이라고도 한다.

vi emptyDir.yaml 으로 yaml 파일 생성한다.

아래 readonly 옵션으로 권한도 제어할 수 있다.

apiVersion: v1
kind: Pod
metadata:
  name: pod-vol1
  labels:
    app: test
spec:
  containers:
  - image: dbgurum/k8s-lab:initial
    name: container1
    volumeMounts:
    - name: empty-dir
      mountPath: /mount1
  - image: dbgurum/k8s-lab:initial
    name: container2
    volumeMounts:
    - name: empty-dir
      mountPath: /mount2
      readOnly: true
  volumes:
  - name: empty-dir
    emptyDir: {}

:wq로 저장하고 나온다.

kubectl exec -it pod-vol1 -c container1 -- bash

[root@pod-vol1 /]# mount | grep /mount1 /dev/sda1 on /mount1 type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)

[root@pod-vol1 /]# cd /mount1/

[root@pod-vol1 mount1]# echo "i love k8s~" >> k8s.txt

[root@pod-vol1 mount1]# ls k8s.txt

[root@pod-vol1 mount1]# cat k8s.txt
i love k8s~

[root@pod-vol1 mount1]# exit
exit

kubectl exec -it pod-vol1 -c container2 -- bash

[root@pod-vol1 /]# cd mount2/

[root@pod-vol1 mount2]# ls
k8s.txt

[root@pod-vol1 mount2]# cat k8s.txt
i love k8s~

[root@pod-vol1 mount2]# mount | grep /mount2
/dev/sda1 on /mount2 type xfs (ro,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)

readonly 옵션을 줬기 때문에 아래처럼 파일을 수정하지 못한다.

[root@pod-vol1 mount2]# echo "me too~" >> k8s.txt
bash: k8s.txt: Read-only file system

[root@pod-vol1 mount2]# exit
exit
command terminated with exit code 1

 kubectl cp pod-vol1:mount1/k8s.txt -c container1 k8s.txt

ls
emptydir.yaml k8s.txt