K8s 실전 활용을 위한 10단계 Ch11

스토리지

k8s에 배포한 애플리케이션이 데이터를 보존하기 위해서는 내부 또는 외부의 스토리지 시스템과 연결하여 퍼시트턴트 볼륨을 사용해야한다.

데이터의 분실, 파손, 변경등을 막기 위해 데이터를 보존하기 위해 k8s의 스토리지를 사용할 수 있다.

퍼시트턴트 볼륨에서 퍼시스턴트는 컨테이너나 파드가 종료되더라도 데이터가 유실되지 않는 것을 의미하며,

볼륨이란 외부 스토리지의 논리적 볼륨을 컨테이너에 마운트하는 것을 의미한다.

스토리지의 종류와 클러스터 구성

쿠버네티스ㅇ에서는 클러스터 내부에서 빠르게 읽고 쓸 수 있는 내부 볼륨이 존재한다.

노드 내부에서 간단하게 사용할 수 있는 볼륨은 emptryDir과 hostPath가 있다.

emptyDir은 노드의 디스크를 파드가 일시적으로 사용할 수 있는 방법인데, 단점은 같은 파드의 컨테이너 간에는 볼륨을 공유할 수 있으나 다른 파드에서는 접근할 수 없다는 단점이 있다.

그리고 파드가 종료하면 emptyDir은 삭제된다. 즉 이 저장공간은 파드와 생명주기를 함께하며, 일시적인 데이터 저장 공간으로써의 용도를 갖는다.

hostPath는 동일하게 노드의 디스크를 사용할 수 있지만, 같은 노드에 배포된 서로 다른 파드에서 볼륨을 공유해 사용할 수 있다.

또한 emptyDir과는 달리 파드의 생명주기를 함께하지 않는다.

hostPath는 다른 노드간의 공유가 되지않고, 노드가 정지하면 데이터에 접근할 수 없으므로, 외부 스토리지가 구축되기 전 간단하게 사용하는 용도로 사용된다.

스토리지 시트템의 방식

쿠버네티스의 API로 지정할 수 있는 대표적인 퍼시스턴트 볼륨을 살펴보자.

k8s 노드에서 사용하는 스토리지로는 hostPath와 local(노드의 디스크 마운트)가 있다.

OSS(오픈 소스 소프트웨어)는 별도 시스템을 구성해야하는데, ISCSI(ISCSI 디스크를 마운트)와 NFS(NFS의 파일 시스템 마운트), GlusterFS(SDS 중 하나인 GlusterFS의 논리 볼륨을 마운트)를 사용할 수 있다.

그 외에 클라우드 서비스에서 제공하는 스토리지들이 있으며 GCP의 경우 gcpPersistentDisk를 사용하는데, GCE 디스크를 마운트하는 방식이다.

스토리지의 추상화와 자동화

파드상의 컨테이너는 공통된 정의 방법에 따라 퍼스턴트 볼륨을 마운트할 수 있다.

k8s에서는 이를 위한 추상화 레이어의 오브젝트 PVC를 제공하며 이 PVC덕분에 우리는 스토리지 시스템의 상세한 파라미터를 설정하지 않더라도, 매니페스트의 파드 템플릿에 간단히 기술하는 것 만으로 퍼시스턴트 볼륨을 사용할 수 있다.

이를 흐름으로 나타내보면 다음과 같다.

동적 프로비저닝을 하는 경우

스크린샷 2021-01-27 오후 11 08 41

수동으로 스토리지를 생성하는 경우

스크린샷 2021-01-27 오후 11 10 11

여기서 동적이든 수동이든 중요한 것은 추상화를 위한 k8s 오브젝트Persistent Volume ClaimPersistent Volume이 중심이라는 것이다.

PVC를 작성해놓고 파드의 매니페스트에 PVC의 이름을 기술하기만 하면 컨테이너가 퍼시스턴트 볼륨을 마운트한다.

동적 프로비저닝의 경우 쿠버네티스가 외부 스토리지 시스템의 API를 사용하여 볼륨을 자동으로 준비하는 방법에 해당한다.

수동 스토리지 생성은 외부 스토리지 시스템의 설정을 직접 진행하는 방법에 해당한다.

Reference

k8s

15단계로 배우는 도커와 쿠버네티스 - 타카라 마호 저서





© 2022. by minkuk

Powered by minkuk