이 글은 Mumshad Mannambeth가 강의한 Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의 커리큘럼을 토대로 공부한 내용을 정리하였음을 밝힙니다.
도커 컨테이너는 기본적으로 일시적(transient)이다. 즉, 필요한 경우 실행되었다가 이후 종료되며 컨테이너가 삭제된다. 컨테이너 내에 있는 데이터 또한 마찬가지로, 컨테이너가 제거되면 그 안에 있는 데이터 또한 사라진다. 컨테이너 내의 데이터를 영구적으로 사용하고 싶다면, 볼륨을 생성하여 컨테이너와 연동해야 한다.
그렇다면, 쿠버네티스에서는 어떻게 구현될 수 있을까? 도커 컨테이너와 마찬가지로, 쿠버네티스의 파드 또한 일시적이므로, 생성되기도 하며 제거되기도 한다. 파드 내에 존재하는 데이터 또한 제거될 때 사라진다. 도커 컨테이너에서와 마찬가지로, 파드 내의 데이터를 영구적으로 사용하기 위해서 볼륨을 생성하여 파드와 연동할 수 있다.
Volumes & Mounts
예를 들어, 단일 노드
에서 1부터 100 사이의 랜덤한 숫자를 만들어내는 간단한 파드를 구성한다고 해보자. 만들어진 숫자는 컨테이너 내 /opt/number.out
경로에 저장된다고 가정해보자. 이 경우, 위에서와 같이 volumeMounts
설정에서 mountPath
란에 컨테이너에서 마운트 될 볼륨의 경로를 입력하고, volumes
설정에서 hostPath
란에 단일 노드의 경로를 입력함으로써 volume mount가 적용된 파드를 생성할 수 있다.
그러나 노드가 하나가 아니라 여러 개로 구성된 경우, 위와 같은 방식으로 설정하면 문제가 된다. 쿠버네티스는 hostPath
에 기입한 /data
경로가 여러 노드에 각각 존재하는 것이 아닌, 단 하나 존재하는 것으로 여기며, 그 경로 내에 있는 데이터도 동일할 것으로 간주하기 때문이다. 실제로는 노드가 다르기에 /data
경로와 그 안의 데이터들은 각각 다를 것이다.
쿠버네티스에서는 다양한 스토리지 솔루션으로 이러한 문제를 해결할 수 있다. 예를 들어, AWS EBS를 볼륨으로 사용한다면 아래와 같이 volumes
설정을 변경하여 사용할 수 있다.
스토리지 솔루션은 종류 또한 다양한데, 표준 스토리지 솔루션으로는 NFS
, GlusterFS
, Flocker
, Scale IO
, Ceph FS
등이 있으며, 퍼블릭 클라우드 솔루션으로는 AWS EBS
, Azure Disk
, Google Persistent Disk
등이 있다.
참고 문헌
[1] Mumshad Mannambeth의 강의
: Certified Kubernetes Administrator (CKA) with Practice Tests
[2] 시작하세요! 도커/쿠버네티스 (용찬호 지음)
: 시작하세요! 도커/쿠버네티스