따배쿠

[따배쿠/멤버십] 14-1. Kubernetes Storage

Engineer-Lee 2022. 11. 20. 02:15
반응형

https://kubernetes.io/docs/concepts/storage/volumes/

쿠버네티스 스토리지는 다양한 종류의 스토리지를 지원해주고 애플리케이션 파드가 사용 가능해야 한다.

이를 실현하기 위해서 쿠버네티스는 yaml파일에서 스토리지를 먼저 선언해주고 컨테이너 파드에 mountPath로 mount 한다고 지정한다.

 

노드1과 노드2에는 index.html이라는 파일이 있다.

마스터 노드의 hostpath.yaml 파일의 내용은 아래와 같다.

파드의 이름은 web이고

spec에 volumes가 html이라는 이름으로 webdata 디렉토리를 hostpath로 선언했다. hostpath는 노드1과 노드2의 스토리지 공간이다.

containers에 volumeMounts는 html이라는 볼륨에

nginx 컨테이너 내에 있는 /usr/share/nginx/html 디렉토리를 mountPath로 선언했다.

 

즉, 노드들이 가지고 있는 hostpath인 /webdata 디렉토리에

nginx 컨테이너의 /usr/share/nginx/html 디렉토리가 볼륨 mount 된다.

 

 

kubectl apply -f hostpath.yaml로 실행하면 노드1에서 실행 중인걸 볼 수 있다.

curl 192.168.166.186 로 접속하면 HOST1 이라는 텍스트가 나온다.

 

 

hostpath에는 타입을 사용할 수 있다.

 

DirectoryOrCreate: 주어진 경로가 없다면 빈 디렉토리를 새로 생성한다.

Directory: 주어진 경로에 디렉토리가 있어야 한다.

FileOrCreate: 주오진 경로에 아무것도 없다면 file을 생성한다.

File: 주어진 경로에 파일이 있어야 한다.

 

 

hostPath는 로컬 디스크에 있는 공간을 사용했지만 emptyDir은 {}만 입력하면 된다.

비어있는 임시 저장소인 emptydir이 pod안에 생겨서 이를 shared storage로 사용한다.

이 emptydir을 사용하는 파드들이 모두 삭제되면 emptydir 또한 삭제된다.

 

 

empty.yaml 파일의 내용은 아래와 같다.

 

kubectl apply -f empty.yaml 로 실행시키면 노드2에 실행 중인걸 볼 수 있다.

 

kubectl exec web-empty -it -- /bin/bash로 컨테이너 내부로 들어가서 mount | grep nginx 로 확인한다.

 

exit로 나와서 kubectl delete pod --all 로 파드를 지우면 emptydir도 삭제된다.

 

 

 

 

이제 NFS 타입을 알아보자

NFS는 클라이언트와 서버로 나눠진다.

NFS 서버는 shared storage 공간을 지원한다.

NFS 클라이언트는 NFS서버가 공유해주는 스토리지를 자신의 공간인 것처럼 마운트해서 사용한다.

 

nfs.yaml 파일의 내용은 아래와 같다.

nfs의 서버의 ip주소와 shared storage 공간을 입력했다.

 

kubectl apply -f nfs.yaml로 실행해보면 노드3에서 실행중이고 curl로 접속하면 shared storage에 있는 index.html 파일의 내용인 TTABAE-LEARN이 출력된다.

 

반응형