궁금한게 많은 개발자 노트

[ k8s ] Volume, PV, PVC란? 본문

DevOps

[ k8s ] Volume, PV, PVC란?

궁금한게 많은 개발자 2023. 4. 11. 13:54

Volume이란?

컨테이너 내의 디스크에 있는 파일은 임시적이며, 컨테이너에서 실행될 때 애플리케이션에 적지 않은 몇 가지 문제가 발생합니다. 한 가지 문제는 컨테이너가 크래시될 때 파일이 손실된다는 것입니다. kubelet은 컨테이너를 다시 시작하지만 초기화된 상태이기에 문제가 됩니다. 두 번째 문제는 Pod에서 같이 실행되는 컨테이너간에 파일을 공유할 때 발생합니다. 쿠버네티스 볼륨 추상화는 이러한 문제를 모두 해결합니다.

 

k8s는 다양한 유형의 볼륨을 지원하는데, Pod는 여러 유형의 볼륨을 동시에 사용할 수 있습니다. 임시 볼륨 유형은 파드의 수명을 갖지만, 퍼시스턴트 불륨은 파드의 수명을 넘어 존재합니다. 즉, 파드가 더 이상 존재하지 않으면 k8s는 임시 볼륨을 삭제하지만, 퍼시스턴트 볼륨은 삭제하지 않습니다. 물론 볼륨의 종류와 관계없이 파드가 재 시작될 때 데이터는 보존됩니다.

 

기본적으로 볼륨은 디렉터리이며, 파드 내 컨테이너에서 접근이 가능합니다. 디텍토리의 생성 방식, 이를 지원하는 매체와 내용은 특정 볼륨의 유형에 따라 결정됩니다. 볼륨을 사용하려면 .spec.volumes에서 파드에 제공할 볼륨을 지정하고, .spec.containers[*].volumeMounts의 컨테이너에 해당 볼륨을 마운트할 위치를 선언합니다. 볼륨은 이미지의 특정 경로에 마운트되며, 파드에 정의된 각 컨테이너에 대해 컨테이너가 사용할 볼륨을 어디에 마운트할지 명시해야 합니다.

 

 

Persistent Volume

Persistent Volume 서브 시스템은 사용자 및 관리자에게 스토리지 사용 방법에서부터 스토리지가 제공되는 방법에 대한 세부 사항을 추상화하는 API를 제공합니다. 이를 위해 PV, PVC(Persistent Volume Claim)라는 두가지 API리소스가 있습니다.

PV는 관리자가 직접 만들거나 Storage Class를 사용하여 동적으로 Provisioning한 클러스터의 스토리지입니다.

PV는 Volume Plugin이며, PV를 사용하는 Pod와는 별개의 라이프사이클을 가집니다.

 

PVC는 Pod에서 사용할 수 있는 영구적인 스토리지를 요청하는 Kubernetes 리소스입니다. PVC를 사용하면 Pod에 마운트할 스토리지를 Pod과는 별도로 정의하고, 이를 사용하는 Pod을 쉽게 만들 수 있습니다. 

 

PVC는 스토리지 클래스를 정의하는 StorageClass와 함께 사용됩니다. 스토리지 클래스는 스토리지 볼륨을 제공하는 방법을 정의하고, 이를 바탕으로 PVC는 어떤 스토리지 클래스를 사용할지 결정합니다. 즉, PVC는 요청한 용량, 액세스 모드, 스토리지 클래스 등을 포함하여 스토리지를 요청하며, 해당 요청에 대해 Kubernetes는 사용 가능한 스토리지를 할당합니다.

 

PVC는 다른 Kubernetes 리소스와 마찬가지로 YAML 파일로 정의하여 생성하고 관리할 수 있습니다. PVC를 생성하면 해당 PVC를 사용하는 Pod은 해당 PVC와 연결된 스토리지를 마운트할 수 있습니다. 이렇게 Pod과 PVC를 분리하여 관리하면, Pod에서 사용하는 스토리지와 스토리지 자체를 각각 관리할 수 있어서, 애플리케이션의 가용성과 데이터의 안정성을 보장할 수 있습니다.

PV를 Provisioning하는 방법으로는 두 가지가 있습니다.

 

1. Static Provisioning

정적 프로비저닝은 관리자가 수동으로 물리 디스크를 생성한 후 PV를 생성하고 PVC에 바인딩 한 후에, Pod에서 사용할 수 있습니다. 미리 준비된 스토리지가 있다면 PV를 수동으로 생성하는 정적 프로비저닝을 사용하면 되지만 클라우드를 사용하고 있다면 미리 준비하지 않고 필요시에 스토리지를 생성하면 되기 때문에 동적 프로비저닝을 사용합니다. 

 

2. Dynamic Provisioning

동적 프로비저닝을 사용하면 관리자가 사전에 물리 디스크와 PV를 수동으로 생성할 필요가 없이 PVC만 정의하면 이에 맞는 물리 디스트 생성 및 PV 생성을 자동화합니다. PVC는 StorageClass를 요청해야 하며 관리자는 동적 프로비저닝이 발생하도록 해당 클래스를 생성하고 구성해야 합니다. - PVC에서 EBS 볼륨 및 관련 PV를 자동으로 생성합니다. 볼륨 생성에 대한 세분화된 제어를 위해 StorageClass를 통해 매개변수를 전달할 수 있습니다.

 

Comments