emptyDir and hostPath

  • emptyDir: pod 내에서 컨테이너들이 데이터를 공유하고 서로 readwrite할 수 있게 만든 “임시”저장소, pod가 사라지면 볼륨도 사라지기 때문에 임시저장소임
  • hostPath: pod내에 볼륨을 만드는 것이 아닌 노드의 파일시스템을 볼륨으로 만들어서 이걸 pod에 mount시켜주는 것. pod의 lifecycle을 따르지 않음

emptyDir

다음과 같이 emptyDir.yaml 작성해준다.

vi emptyDir.yaml
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - name: container1
      image: kubetm/init
      volumeMounts:
        - name: test-dir
          mountPath: /test1
    - name: container2
      image: kubetm/init
      volumeMounts:
        - name: test-dir
          mountPath: /test2
  volumes:
    - name: test-dir
      emptyDir: {}

그리고 이 파일을 배포한다.

kubectl apply -f emptyDir.yaml

이렇게 현재 만들어진걸 확인가능하다.

그렇다면 이 만들어진 test-pod의 정보를 한 번 살펴보자.

describe pod test-pod

pod의 정보를 볼 수 있다. 이중에

Containers:에서 볼륨이 마운트 된 걸 볼 수 있다. 그리고 볼륨에 대한 정보도 확인할 수 있다.

pod의 container1으로 가서 bashshell을 열어보자

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

[root@test-pod /]# ls

anaconda-post.log  bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  test1  tmp  usr  var

test1이라는 디렉토리가 생성됨. 들어가보자.

cd test1
ls

하면 아무것도 안 보인다.

예시로 파일을 만든다.

vi test.txt

아무말이나 적고 저장해서 다시 ls를 쳐보면 test.txt가 존재한다.

다시 exit치고 나가서 container2로 가본다.

kubectl exec -it test-pod -c container2 -- bash 
cd test2
ls

아무것도 없어야하지만? test.txt가 존재한다. 바로 아까 우리가 생성한 파일이다.

하지만 emptyDir의 치명적인 문제점은 pod의 라이프사이클을 따라서 파드가 죽으면 볼륨에 대한 내용도 모두 사라진다. 컨테이너가 다시 읽고 쓸 기능이 사라진다.

한번 pod를 지워보자.

kubectl delete pod test-pod

시간 꽤걸리니까 당황ㄴ ㄴ

다시 배포한다고 해도, 컨테이너 내부로 들어가보면 아무것도 남아있지 않는다….!!

자, 이제 확실히 emptyDir의 특징을 알았겠지?

hostPath

이번엔 빔을 열어서 hostPath.yaml을 작성한다.

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - name: container
      image: kubetm/init
      volumeMounts:
        - name: test-volume
          mountPath: /test1
  volumes:
    - name: test-volume
      hostPath:
        path: /test-volume
        type: DirectoryOrCreate

그리고 배포해준다.

 kubectl apply -f hostPath.yaml

마찬가지로 describe해보면,

describe pod test-pod

volume의 타입이 hostpath로 되어있다.

test-volume폴더가 루트에 생겨야 하는데 안 생겨서 진짜 40분동안 오류를 찾다가 그냥 yaml file의 경로를

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - name: container
      image: kubetm/init
      volumeMounts:
        - name: test-volume
          mountPath: /test1
  volumes:
    - name: test-volume
      hostPath:
        path: /Users/jiyea/test-volume  # 수정된 경로
        type: DirectoryOrCreate

이렇게 딱 지정해서 설정해주었다. 그랬더니 됐다.

여튼 test-volume디렉토리로가면 아무것도 없는 걸 확인할 수 있다. 또 test.txt만들어서 아무거나 쓰고

kubectl exec -it test-pod -- bash

컨테이너 하나라서 이렇게만 써줘도돼

들어가서 test1으로 가면 내가 쓴 txt파일을 확인할 수 있다!

얘가 더 좋아보이지만 노드가 죽어서 이 볼륨이 사라지게 된다면 이 파드가 기존의 정보를 다시 가져올 방법이 없음!!!

emptyDir and hostPath

정리를 해보자면 emptyDir은 pod내부의 컨테이너들이 정보를 공유하기 위한 임시 스토리지다!!!

hostpath는 노드의 파일시스템을 볼륨으로 써서 파드한테 마운트한다. 파드가 아니라 노드의 라이프사이클을 따르기때문에 노드가 죽으면 책임질 수 있는 방법이 없다.

그래서 보통 이 두가지 방법은 잘 안 쓰고, remote storage를 따로 두어서 쿠버네티스에서 제공하는 pv,pvc,sc를 사용하고 있다!

외부에서 데이터를 보존하고 있기때문에 안정적인 데이터 관리가 가능하다!!!!!

emptyDir and hostPath

  • emptyDir: pod 내에서 컨테이너들이 데이터를 공유하고 서로 readwrite할 수 있게 만든 “임시”저장소, pod가 사라지면 볼륨도 사라지기 때문에 임시저장소임
  • hostPath: pod내에 볼륨을 만드는 것이 아닌 노드의 파일시스템을 볼륨으로 만들어서 이걸 pod에 mount시켜주는 것. pod의 lifecycle을 따르지 않음

emptyDir

다음과 같이 emptyDir.yaml 작성해준다.

vi emptyDir.yaml
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - name: container1
      image: kubetm/init
      volumeMounts:
        - name: test-dir
          mountPath: /test1
    - name: container2
      image: kubetm/init
      volumeMounts:
        - name: test-dir
          mountPath: /test2
  volumes:
    - name: test-dir
      emptyDir: {}

그리고 이 파일을 배포한다.

kubectl apply -f emptyDir.yaml

이렇게 현재 만들어진걸 확인가능하다.

그렇다면 이 만들어진 test-pod의 정보를 한 번 살펴보자.

describe pod test-pod

pod의 정보를 볼 수 있다. 이중에

Containers:에서 볼륨이 마운트 된 걸 볼 수 있다. 그리고 볼륨에 대한 정보도 확인할 수 있다.

pod의 container1으로 가서 bashshell을 열어보자

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

[root@test-pod /]# ls

anaconda-post.log  bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  test1  tmp  usr  var

test1이라는 디렉토리가 생성됨. 들어가보자.

cd test1
ls

하면 아무것도 안 보인다.

예시로 파일을 만든다.

vi test.txt

아무말이나 적고 저장해서 다시 ls를 쳐보면 test.txt가 존재한다.

다시 exit치고 나가서 container2로 가본다.

kubectl exec -it test-pod -c container2 -- bash 
cd test2
ls

아무것도 없어야하지만? test.txt가 존재한다. 바로 아까 우리가 생성한 파일이다.

하지만 emptyDir의 치명적인 문제점은 pod의 라이프사이클을 따라서 파드가 죽으면 볼륨에 대한 내용도 모두 사라진다. 컨테이너가 다시 읽고 쓸 기능이 사라진다.

한번 pod를 지워보자.

kubectl delete pod test-pod

시간 꽤걸리니까 당황ㄴ ㄴ

다시 배포한다고 해도, 컨테이너 내부로 들어가보면 아무것도 남아있지 않는다….!!

자, 이제 확실히 emptyDir의 특징을 알았겠지?

hostPath

이번엔 빔을 열어서 hostPath.yaml을 작성한다.

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - name: container
      image: kubetm/init
      volumeMounts:
        - name: test-volume
          mountPath: /test1
  volumes:
    - name: test-volume
      hostPath:
        path: /test-volume
        type: DirectoryOrCreate

그리고 배포해준다.

 kubectl apply -f hostPath.yaml

마찬가지로 describe해보면,

describe pod test-pod

volume의 타입이 hostpath로 되어있다.

test-volume폴더가 루트에 생겨야 하는데 안 생겨서 진짜 40분동안 오류를 찾다가 그냥 yaml file의 경로를

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - name: container
      image: kubetm/init
      volumeMounts:
        - name: test-volume
          mountPath: /test1
  volumes:
    - name: test-volume
      hostPath:
        path: /Users/jiyea/test-volume  # 수정된 경로
        type: DirectoryOrCreate

이렇게 딱 지정해서 설정해주었다. 그랬더니 됐다.

여튼 test-volume디렉토리로가면 아무것도 없는 걸 확인할 수 있다. 또 test.txt만들어서 아무거나 쓰고

kubectl exec -it test-pod -- bash

컨테이너 하나라서 이렇게만 써줘도돼

들어가서 test1으로 가면 내가 쓴 txt파일을 확인할 수 있다!

얘가 더 좋아보이지만 노드가 죽어서 이 볼륨이 사라지게 된다면 이 파드가 기존의 정보를 다시 가져올 방법이 없음!!!

emptyDir and hostPath

정리를 해보자면 emptyDir은 pod내부의 컨테이너들이 정보를 공유하기 위한 임시 스토리지다!!!

hostpath는 노드의 파일시스템을 볼륨으로 써서 파드한테 마운트한다. 파드가 아니라 노드의 라이프사이클을 따르기때문에 노드가 죽으면 책임질 수 있는 방법이 없다.

그래서 보통 이 두가지 방법은 잘 안 쓰고, remote storage를 따로 두어서 쿠버네티스에서 제공하는 pv,pvc,sc를 사용하고 있다!

외부에서 데이터를 보존하고 있기때문에 안정적인 데이터 관리가 가능하다!!!!!

emptyDir and hostPath

  • emptyDir: pod 내에서 컨테이너들이 데이터를 공유하고 서로 readwrite할 수 있게 만든 “임시”저장소, pod가 사라지면 볼륨도 사라지기 때문에 임시저장소임
  • hostPath: pod내에 볼륨을 만드는 것이 아닌 노드의 파일시스템을 볼륨으로 만들어서 이걸 pod에 mount시켜주는 것. pod의 lifecycle을 따르지 않음

emptyDir

다음과 같이 emptyDir.yaml 작성해준다.

vi emptyDir.yaml
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - name: container1
      image: kubetm/init
      volumeMounts:
        - name: test-dir
          mountPath: /test1
    - name: container2
      image: kubetm/init
      volumeMounts:
        - name: test-dir
          mountPath: /test2
  volumes:
    - name: test-dir
      emptyDir: {}

그리고 이 파일을 배포한다.

kubectl apply -f emptyDir.yaml

이렇게 현재 만들어진걸 확인가능하다.

그렇다면 이 만들어진 test-pod의 정보를 한 번 살펴보자.

describe pod test-pod

pod의 정보를 볼 수 있다. 이중에

Containers:에서 볼륨이 마운트 된 걸 볼 수 있다. 그리고 볼륨에 대한 정보도 확인할 수 있다.

pod의 container1으로 가서 bashshell을 열어보자

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

[root@test-pod /]# ls

anaconda-post.log  bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  test1  tmp  usr  var

test1이라는 디렉토리가 생성됨. 들어가보자.

cd test1
ls

하면 아무것도 안 보인다.

예시로 파일을 만든다.

vi test.txt

아무말이나 적고 저장해서 다시 ls를 쳐보면 test.txt가 존재한다.

다시 exit치고 나가서 container2로 가본다.

kubectl exec -it test-pod -c container2 -- bash 
cd test2
ls

아무것도 없어야하지만? test.txt가 존재한다. 바로 아까 우리가 생성한 파일이다.

하지만 emptyDir의 치명적인 문제점은 pod의 라이프사이클을 따라서 파드가 죽으면 볼륨에 대한 내용도 모두 사라진다. 컨테이너가 다시 읽고 쓸 기능이 사라진다.

한번 pod를 지워보자.

kubectl delete pod test-pod

시간 꽤걸리니까 당황ㄴ ㄴ

다시 배포한다고 해도, 컨테이너 내부로 들어가보면 아무것도 남아있지 않는다….!!

자, 이제 확실히 emptyDir의 특징을 알았겠지?

hostPath

이번엔 빔을 열어서 hostPath.yaml을 작성한다.

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - name: container
      image: kubetm/init
      volumeMounts:
        - name: test-volume
          mountPath: /test1
  volumes:
    - name: test-volume
      hostPath:
        path: /test-volume
        type: DirectoryOrCreate

그리고 배포해준다.

 kubectl apply -f hostPath.yaml

마찬가지로 describe해보면,

describe pod test-pod

volume의 타입이 hostpath로 되어있다.

test-volume폴더가 루트에 생겨야 하는데 안 생겨서 진짜 40분동안 오류를 찾다가 그냥 yaml file의 경로를

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - name: container
      image: kubetm/init
      volumeMounts:
        - name: test-volume
          mountPath: /test1
  volumes:
    - name: test-volume
      hostPath:
        path: /Users/jiyea/test-volume  # 수정된 경로
        type: DirectoryOrCreate

이렇게 딱 지정해서 설정해주었다. 그랬더니 됐다.

여튼 test-volume디렉토리로가면 아무것도 없는 걸 확인할 수 있다. 또 test.txt만들어서 아무거나 쓰고

kubectl exec -it test-pod -- bash

컨테이너 하나라서 이렇게만 써줘도돼

들어가서 test1으로 가면 내가 쓴 txt파일을 확인할 수 있다!

얘가 더 좋아보이지만 노드가 죽어서 이 볼륨이 사라지게 된다면 이 파드가 기존의 정보를 다시 가져올 방법이 없음!!!

emptyDir and hostPath

정리를 해보자면 emptyDir은 pod내부의 컨테이너들이 정보를 공유하기 위한 임시 스토리지다!!!

hostpath는 노드의 파일시스템을 볼륨으로 써서 파드한테 마운트한다. 파드가 아니라 노드의 라이프사이클을 따르기때문에 노드가 죽으면 책임질 수 있는 방법이 없다.

그래서 보통 이 두가지 방법은 잘 안 쓰고, remote storage를 따로 두어서 쿠버네티스에서 제공하는 pv,pvc,sc를 사용하고 있다!

외부에서 데이터를 보존하고 있기때문에 안정적인 데이터 관리가 가능하다!!!!!

 

'Kubernetes' 카테고리의 다른 글

K8S API Server  (0) 2024.12.07
Resource 중간정리  (0) 2024.12.01
Kubernetes Volumes  (2) 2024.11.13
Kubectl  (0) 2024.11.06
Kubernetes의 Networking과 Service  (0) 2024.11.06
코코자