kubernetes

저장소

파일 시스템에 대해 알아봅시다. 사실 컨테이너에 파일을 저장하면 된다고 생각할 수 있습니다. 하지만 조금 더 생각해보면 단순한 문제가 아니게 됩니다. 기본적으로 Node안에 Container가 가상화 되어있습니다. 우리가 Container안에서 /tmp 폴더 안에서 log를 쌓는다고 한다면, Node에서는 정해진 격리된 컨테이너의 디렉토리 위치에 log가 저장 될 것 입니다.

하지만, 쿠버네티스에서 컨테이너의 생성과 제거가 빈번하게 발생하기 때문에 컨테이너 제거 시 컨테이너에 포함된 파일들도 당연히 사라집니다. 왜냐하면, 컨테이너가 하드웨어의 개념이 아닌 Node에 위치하는 디렉토리일 뿐(격리된 공간)이기 때문입니다.

만약 예상치 못하게 컨테이너가 종료 되었다면, 내부의 데이터가 날라갈 것입니다. 따라서 도커와 비슷하게, 특정 Node의 위치에 컨테이너가 종료되더라도 데이터가 저장되도록 설정하는 것이 가능합니다. 하지만 이러한 설정도 여러개의 Node를 사용한다면, 다른 Node에 컨테이너가 생성 된다면 기존의 데이터를 가지고 올 수 가 없습니다. 이러 방식은 특정 위치에 저장하는 방식이 비효율적이 될 수 있음을 이해할 수 있을 것입니다.

쿠버네티스는 저장소를 파입과 용량을 추상화 하여 제공합니다. Container안의 특정 디렉토리는 추상화한 volume 객체에 연결되어 있습니다. 그리고 추상화된 volume 객체는 실제 저장공간에 연결되어 있습니다. 따라서 컨테이너의 생성/제거와 상관없이 동일한 저장공간을 사용할 수 있습니다.

Volume

쿠버네티스의 Volume은 저장공간으로 크게 임시 볼륨영구 볼륨으로 나누어 집니다.

임시 볼륨

컨테이너 내부 저장공간으로 컨테이너 삭제 시 사라지는 공간입니다. 따라서 지워져도 상관없는 파일을 저장 할 때 사용하는 공간으로 보통 파일을 업로드 하거나 다운로드할 때, 임시(요청에 대한 응답을 하는 기간)로 저장해두는 공간으로 사용합니다. 이름에서 확인가능 하듯, 컨테이너 라이프 사이클 안에서 사용할 수 있기 때문에 임시 볼륨이라고 부릅니다.

영구 볼륨

저장공간이 Node 외부에 있어, 저장한 내용의 일관성을 보장 할 수 있는 불륨입니다. 정적 할당과 동적 할당(cloud)이 둘 다 가능합니다. 보통 네트워크 저장소를 사용하기 때문에, I/O가 자주 일어나는 경우에는 금액부분을 고려할 필요가 있습니다. 파일 시스템을 계속 프로비저닝하면서 네트워크로 계속 접속하는 부분은 비용문제가 발생할 수 있음을 주의하여야 합니다.

자세한 내용은 뒤에서 다루도록 하겠습니다.