[K8s in Action] 6. 볼륨: 컨테이너에 디스크 스토리지 연결

Sangmin Yoon·2021년 6월 29일
0

Kubernetes in Action

목록 보기
6/8

파일 시스템은 컨테이너 이미지에서 제공되기 때문에 컨테이너마다 고유하게 분리된 파일 시스템을 가진다. 지속되는 파일 시스템, 공유되는 파일 시스템을 위해 볼륨이 존재한다.

1. Volume 소개

  • Volume은 Pod의 구성 요소로 컨테이너와 동일하게 파드 스펙에서 정의된다.
  • Volume은 독립적인 K8s Object가 아니므로 자체적으로 생성, 삭제될 수 없다.

1) 예시

  • Volume을 통해 세 개의 컨테이너들이 파일 시스템을 공유하게 설정한다.

2. 볼륨을 사용한 컨테이너 간 데이터 공유

1) emptyDir 볼륨 사용

  • 볼륨이 빈 디렌터리로 시작된다. 볼륨의 라이프사이클이 파드에 묶여 있으므로 파드가 삭제되면 볼륨의 컨텐츠는 사라진다.
  • emptyDir 볼륨은 동일 파드에서 실행 중인 컨테이너 간 파일을 공유할 때 유용하다.
  • 위 YAML 파일은 html이라는 단일 emptyDir 볼륨을 컨테이너 두 개에 마운트한다. 볼륨은 각 컨테이너에 각기 다른 경로로 마운트된다.

2) 깃 리포지토리를 볼륨으로 사용하기

  • gitRepo는 기본적으로 emptyDir 볼륨이며 파드가 시작되면 깃 리포를 복제하고 특정 리비전을 체크아웃해 데이터로 채운다.

emptyDir 볼륨과 gitRepo 볼륨은 파드가 삭제되면 볼륨과 컨텐츠가 삭제된다. 그러나 다른 유형의 볼륨은 새 디렉터리를 생성하지 않고 기존에 존재하는 외부 디렉터리를 파드의 컨테이너 파일 시스템에 마운트한다.

3. 워커 노드 파일 시스템의 파일 접근

1) hostPath 볼륨

  • hostPath 볼륨은 노드 파일시스템의 특정 파일이나 디렉터리를 가리킨다. 이 볼륨은 파드가 종료되어도 삭제되지 않는다. 이전 파드와 동일한 노드에 스케쥴린된다는 조건에서 새 파드는 이전 파드가 남긴 모든 항목을 볼 수 있다.

4. 퍼시스턴트 스토리지 사용

파드에서 실행 중인 앱이 디스크에 데이터를 유지해야 하고 + 파드가 다른 노드로 reschedule 되어도 동일한 데이터를 사용해야 한다면 NAS(Network-Attached Storage) 유형에 저장되어야 한다.

5. 기반 스토리지 기술과 파드 분리

이상적으로는 K8s에 앱을 배포하는 개발자는 기저에 어떤 종류의 스토리지 기술이 사용되는지 알 필요가 없어야 하고, 동일한 방식으로 파드를 실행하기 위해 어떤 유형의 물리 서버가 사용되는지 알 필요가 없어야 한다.

1) PersistentVolume과 PersistentVolumeClaim

  • 인프라의 세부 사항을 처리하지 않고 K8s 클러스터에 스토리지를 요청할 수 있도록 하는 두 개의 리소스다.
  • 개발자가 PVC Manifestfmf K8s API Server에 게시하면 적절한 PV를 찾아 클레임에 볼륨을 바인딩한다. 이 때 PV는 PVC와 달리 특정 네임스페이스에 속하지 않는다.

2) 파드에서 PVC 사용하기

  • 파드에 PVC 붙인다.

6. PV의 동적 프로비저닝

개발자는 스토리지 기술 알 필요 없이 퍼시스턴트 스토리지를 사용할 수 있게 됐다. 그러나 여전히 클러스터 관리자는 스토리지를 미리 프로비저닝해두어야 한다. K8s는 이 작업을 자동으로 수행하게 해준다. PV Provisioner를 배포하고 사용자가 선택 가능한 PV 타입을 하나 이상의 StorageClass 오브젝트로 정의할 수 있다.

0개의 댓글