Volume - EmptyDir, Host Path, PVC

sungjin0757·2022년 3월 3일
1

Kubernetes

목록 보기
5/11
post-thumbnail

Volume - EmptyDir, Host Path, PVC


이 글은 김태민님의 대세는 쿠버네티스 강의를 참고하여 정리하였습니다!

출처 : https://www.inflearn.com/course/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EA%B8%B0%EC%B4%88/dashboard


🔍 테스트해 볼 내용

Volume Object의 Option에 대해서 배워볼게요!

  1. EmptyDir 구성
  2. HostPath 구성
  3. PVC 구성

🚀 EmptyDir

Container 들 간 데이터를 공유하기 위해서 Pod안에 일종의 저장소인 Volume을 사용하는 것입니다.

Volume이 생성될 때는 항상 Volume안에 내용이 비어있기 때문에 EmptyDir이라는 이름이 붙여집니다.

Volume을 생성하고 Container들이 mount시켜 놓으면 자신의 Local에 있는 것처럼 사용하기 때문에 두 Container가 서로 파일을 주고 받을 필요 없이 편하게 사용 가능합니다.

단점은, Pod가 문제가 생기어서 Pod가 재생성되게 되면 Volume이 삭제됩니다.

즉, 일시적인 사용목적인 데이터만을 저장하는 것이 바람직합니다.

이제, 한번 실습해보도록 합시다!

pod1.yaml

apiVersion: v1
kind: Pod
metadata: 
  name: pod-volume-1
spec:
  containers:
  - name: container1
    image: kubetm/init
    volumeMounts:
    - name: empty-dir
      mountPath: /mount1
  - name: container2
    image: kubetm/init
    volumeMounts:
    - name: empty-dir
      mountPath: /mount2
  volumes:
  - name: empty-dir
    emptyDir: {}  

kubectl create -f ./pod1.yaml

kubectl apply -f ./pod1.yaml

이제 생성된 pod에 각각의 컨테이너에 접근해보도록 합시다!

kubectl exec pod-volume-1 -c container1 -it /bin/bash

kubectl exec pod-volume-2 -c container1 -it /bin/bash

이렇게 잘 접근된 것을 볼 수 있습니다!

이제 컨테이너1에서 mount된 볼륨에 접근하여 파일을 생성해보도록 하겠습니다

ls 를 통해 각각의 컨테이너들이 volume을 잘 마운트하고 있는지 mount | grep mount1으로 mount된 폴더인지 확인해 봅시다!

잘 마운트된 것을 확인할 수 있습니다!

지금부터는,
1. container1에서 mount폴더에 file만들기.
2. container2에서 container1에서 만든 폴더가 잘 저장되어있나 확인하기.
3. Pod삭제했을 때, Volume도 같이 삭제 되는지!

먼저, 이렇게 잘 생성된 것을 확인하였습니다!

이제는 container2에서 확인해보도록 합시다.

container2에서 또한 container1에서 만든 파일을 사용할 수 있다는 것을 확인하였습니다.

이제는 Pod를 한번 지웠다 다시 생성하여 봅시다.

kubectl delete pod pod-volume-1

마지막으로, Pod를 지웠다가 재생성하였을때, Volume또한 재생성되었다는 것을 확인하였습니다!


🚀 HostPath

EmptyDir과 다르게 Pod들이 올라가져 있는 각 NodePathVolume으로 사용합니다.
또한, VolumePod밖에 존재하게 됩니다.

즉, Pod가 삭제되었더라도 Path를 각각의 Pod들이 공유해서 사용하기 때문에, Pod들이 죽어도 데이터는 사라지지 않게 됩니다.

데이터가 영속성이 있다는 점에서 훌륭해 보일 수도 있지만, Pod입장에서는 삭제되었다가 재생성 되었을 때, 같은 Node에 똑같이 생성될 것이라는 보장이 없습니다.

결론적으로, 이러한 Volume을 사용할 떄는, Node 자기 자신을 위해서 유지해야 할 시스템 파일, 설정 파일들을 유지시킬 때 주로 사용됩니다.

주의해야할 점은 Host에 있는 PathPod가 만들어지기 전에 만들어져야 합니다.

이제 직접 실습해 보도록 합시다!

pod2.yaml

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

kubectl create -f ./pod2.yaml

kubectl apply -f ./pod2.yaml

지금부터는,
1. pod 접근
2. mount된 폴더에 파일 만들기
3. node에서 pod가 만든 파일 확인하기
4. pod 재생성 후, 파일이 잘 유지되고 있나 확인하기.

먼저 pod에 접근해보도록 하겠습니다.

mount폴더 또한 만든 것을 확인할 수 있습니다.

이제, mount폴더에 파일을 만들도록 하겠습니다.

지금부터는, node에 접근하여 pod에서 만든 파일을 확인해보도록 하겠습니다.

minikube ssh

Node에서 또한 Volume에 잘 마운트된 것을 확인하였고, Pod에서 만든 파일 또한 확인하였습니다.

이제, 현재 pod를 재생성한 다음에도, 똑같은 파일이 유지되고 있는지 확인해 봅시다.

마지막으로, Pod를 지웠다가 재생성하였을때, Volume이 유지되고 있는 것을 확인하였습니다!


🚀 PVC - Persistent Volume Claim

Pod에 영속성 있는 Volume을 제공하기 위한 개념입니다.

Volume의 형태를 Local에서 뿐 아니라 외부의 Git, AWS등에 연결할 수 있습니다.
이러한 VolumePV - Persistent Volume이라 부르게 됩니다.

Pod는 바로 PV에 연결하는 것이 아닌, PVC를 통해 PV와 연결하게 됩니다.

PVC를 통해 연결하는 이유는 Volume들의 종류는 많고, Volume들을 연결하기 위한 설정들도 각각 틀리기 때문입니다.

PVC/PV는 실습에 제약이 따르므로 여기서 마치도록 하겠습니다!


이상으로 마치겠습니다. 🙋🏻‍♂️

profile
WEB STUDY & etc.. HELLO!

0개의 댓글