쿠버네티스, 이것만 알면 된다! - #7 Volume(볼륨) 사용법
쿠버네티스는 상태를 저장하지 않는 Stateless이므로, 어떠한 문제가 발생하여 컨테이너가 삭제된다면 데이터도 같이 삭제됩니다. 이렇게 될 경우, 로그 파일을 보관해야 한다거나 데이터베이스를 사용할 경우 데이터가 사라지면 큰 장애가 발생할 수 있습니다.
따라서 데이터가 사라지지 않고 보존되어야 할 경우 볼륨(Volume)을 사용합니다.
emptyDir, hostPath
먼저 쿠버네티스의 여러 가지 볼륨 중 임시 디스크를 사용하는 emptyDir, 로컬 디스크를 사용하는 hostPath에 대해서 알아보도록 하겠습니다.
emptyDir
emptyDir은 생성 당시에는 디스크에 아무 내용이 없으므로, emptyDir이라고 합니다.
emptyDir은 Pod가 생성될 때 생성되고, Pod가 삭제될 때 같이 삭제되는 임시 볼륨으로, Pod가 실행되는 디스크의 공간에 볼륨을 연결하게 됩니다.
emptyDir이 만들어지고 삭제되는 라이프사이클이 컨테이너 단위가 아닌 Pod 단위로 되어있으므로, 컨테이너가 삭제되어도 emptyDir은 삭제되지 않지만, Pod가 삭제될 경우에는 emptyDir에 보관 중이던 모든 데이터는 삭제됩니다.
hostPath
hostPath는 Node(혹은 VM)의 디스크에 볼륨을 생성하여 Pod가 삭제 되더라도 Volume에 있던 데이터는 유지 됩니다.
PV(PersistentVolume), PVC(PersistentVolumeClaim)
일반적으로 볼륨을 설정하려면 물리적 디스크를 생성해야 하고, 이러한 물리적 디스크에 대한 설정을 자세하게 이해해야 할 필요가 있습니다. 쿠버네티스는 인프라에 대한 복잡성을 단순화하기 위해서 PV(PersistentVolume), PVC(PersistentVolumeClaim)라는 개념을 도입하였습니다.
PV(PersistentVolume)
실제 물리적 디스크를 생성한 후에, 이 디스크를 PersistentVolume이라는 이름으로 쿠버네티스에 등록합니다. 즉, 생성한 물리적 디스크를 쿠버네티스 클러스터에서 사용가능하도록 표현한 것이 PV입니다.
PVC(PersistentVolumeClaim)
개발자가 Pod를 생성할 때, 볼륨을 정의하고, 이 볼륨 정의 부분에 물리적 디스크에 대한 특성을 정의하는 것이 아니라 PVC를 지정하여 관리자가 생성한 PV와 연결합니다. 즉, Pod의 볼륨과 PV를 연결하는 것이 아닌 PVC가 연결되도록 하는 것입니다.
PV, PVC의 생명 주기
PV, PVC는 다음과 같은 생명 주기로 동작합니다.
출처: https://yena-diary.tistory.com/10
- 프로비저닝(Provisioning): PV를 생성하는 단계
- 바인딩(Binding): PV를 PVC에 연결시키는 단계
- 사용(Using): Pod가 PVC를 볼륨으로 사용하는 단계
- 회수(Reclaiming): PVC를 삭제할 때, 연결된 PV를 어떻게 처리할지에 대한 설정하는 단계(Retain, Recycle, Delete 3가지 옵션이 있습니다)
Retain | PV의 데이터를 그대로 보존 |
Retain | 재사용할 경우 PV 데이터들을 모두 삭제 후 재사용 |
Delete | 사용이 종료되면 삭제 |
마무리
이번 장에서는 쿠버네티스의 Volume에 대해서 알아보았습니다.
다음으로는 다양한 쿠버네티스의 Controller에 대해서 알아보도록 하겠습니다!
관련글
1.쿠버네티스란 무엇일까? - https://ktcloudplatform.tistory.com/67
2.Desired State - https://tech.ktcloud.com/68
3.쿠버네티스 구성요소 - https://tech.ktcloud.com/70
4.쿠버네티스 설치 - https://tech.ktcloud.com/71
5.쿠버네티스의 동작 흐름 - https://tech.ktcloud.com/75
6. 쿠버네티스의 서비스 - https://tech.ktcloud.com/78