[MacOS 환경 #11] 볼륨1. 빈 디렉토리(empty Directory)

도람·2025년 11월 17일
post-thumbnail

볼륨

이 게시물에서는 많은 볼륨 종류 중 빈 디렉토리에 대해 알아보려고 한다.


빈 디렉토리(empty Directory)

  • 이 볼륨은 파드가 노드에 할당될 때 처음 생성되며, 해당 노드에서 파드가 실행되는 동안에만 존재한다.
    이름에서 알 수 있듯 처음에는 비어있다.
  • 모든 컨테이너가 같은 디렉토리를 공유해서 사용할 수 있다.
  • 파드가 삭제되면 데이터도 함께 사라진다.

즉, "파드가 살아있는 동안만 유지되는 임시 저장소"라고 생각하면 된다.


빈 디렉토리의 용도

  • 디스크 기반의 병합 정렬을 위한 스크레치 공간
  • 충돌로부터 복구하기 위해 긴 계산을 검사점으로 지정
  • 웹 서버 컨테이너가 데이터를 처리하는 동안 콘텐츠 매니저 컨테이너가 가져오는 파일을 보관

쿠버네티스 공식 홈페이지에는 빈 디렉토리의 용도가 다음과 같이 나와있다.
말이 굉장히 어렵게 들리지만, 풀어쓰자면,


>"디스크 기반의 병합 정렬을 위한 스크래치 공간"
-> 단순히 임시 작업 공간이라는 뜻. 대용량 처리 시 정렬하고자 할 때 잠시 저장해두는 용도.

"충돌로부터 복구하기 위해 긴 계산을 검사점으로 지정"
-> 프로그램이 중간 저장을 할 수 있도록 도와주는 것(=checkpoint)

“웹 서버 컨테이너가 데이터를 처리하는 동안 콘텐츠 매니저 컨테이너가 가져오는 파일을 보관”
-> 컨테이너간 데이터 공유를 의미, 한 컨테이너가 파일을 생성하면 다른 컨테이너가 그 파일을 읽을 수 있게 같은 emptyDir 볼륨을 공유하는 구조이다.


빈 디렉토리 예시 코드

apiVersion: v1
kind: Pod
metadata:
  name: pod-tempstorage
  labels:
    app: webdemo
spec:
  containers:
  - name: web-server
    image: nginx:latest
    volumeMounts:
    - name: shared-temp
      mountPath: /usr/share/nginx/html

  - name: page-writer
    image: busybox
    command: ["/bin/sh", "-c"]
    args:
      - echo "Welcome! Page generated at $(date)" > /data/index.html;
        sleep 3600;
    volumeMounts:
    - name: shared-temp
      mountPath: /data

  volumes:
  - name: shared-temp
    emptyDir: {}

실행 방법

<사전 작업>
1. vim pod-tempstorage.yaml하여 위 코드를 복사한 뒤 !wq 하여 편집을 마친다.
2. kubectl apply -f pod-tempstorage.yaml 하여 파드를 배포한 후
3. kubectl get pods -o wide 하여 파드 상태를 확인한다. (running이면 완료)


(2개를 띄웠으니 2개가 running된 것을 확인할 수 있다.)


두 컨테이너가 같은 디렉토리를 쓴다는 것 확인하기

앞서 만든 파드 pod-tempstorage에는
web-server, page-writer 두 개의 컨테이너가 있다.

이 둘은 같은 emptyDir 볼륨(shared-temp)을 공유한다.
즉, 한쪽이 파일을 만들면 다른 쪽에서도 바로 볼 수 있어야 한다.


1.web-server 컨테이너 확인

kubectl exec -it pod-tempstorage -c web-server -- /bin/bash

이 명령어는 kubectl을 통해 pod-tempstorage 파드의 web-server 컨테이너(nginx 이미지)에 접속하는 명령이다.

ls /usr/share/nginx/html

그런 다음 이렇게 명령을 실행하면 다음과 같이 출력 예시가 나온다.

그럼 이 파일을 cat 명령어를 통해 확인하면 다음과 같이 나온다.


2.page-writer 컨테이너 확인

kubectl exec -it pod-tempstorage -c page-writer -- /bin/sh

이 명령어를 통해 nginx쪽 컨테이너에 들어간다.

들어가서

pwd
ls

이 명령어를 실행해보면

다음과 같이 index.html이 있는 것을 확인할 수 있다.

이 index.html을 cat 명령어를 통해 해당 내용을 확인해보면
내용이 똑같은 것을 알 수 있다.


3. index.html 파일 수정 후 컨테이너 두개 확인.

web-server 컨테이너에서

/usr/share/nginx/html# echo "Hello from container!" > index.html
cat index.html

해당 명령어를 통해 해당 index.html 내용을 수정하고 아까 만든 컨테이너에 접속해서 똑같은지 확인해본다.

이렇게 똑같은 디렉토리를 공유하는 것을 확인할 수 있다.



그러면 바꾼 내용으로 index.html 내용이 나오는 것을 확인할 수 있으며, 두 컨테이너는 같은 디렉토리를 공유하고 있다는 것을 확인할 수 있다.


정리

구분컨테이너 이름마운트 경로파일 내용
1web-server/usr/share/nginx/htmlHello from container!
2page-writer/dataHello from container!

위와 같이 두 컨테이너가 마운트 경로는 다르지만, 같은 빈 디렉토리를 공유하고 있다.


참고자료:
[쿠버네티스 공식 홈페이지 - Volumes]
https://kubernetes.io/docs/concepts/storage/volumes/

profile
정도를 걷는 엔지니어

0개의 댓글