PV와 PVC에 이어집니다.
기존 PV와 PVC 할당의 문제는 무엇일까?
PVC로 PV를 요청해서 바인딩하므로 즉, 사용자가 PV를 미리 만들어 놓아야하는 것이다.
이러한 번거로운 문제를 해결하기 위해 StorageClass라는 것이 존재한다.
StorageClass를 사용자가 생성해 놓으면 PVC를 통해 사용자가 요청을 보낼 때, StorageClass로 요청이 들어가고 StorageClass를 통해서 PV를 생성할 수 있는 것이다.
StorageClass에는 위와 같이 다양한 종류가 있지만, 본 실습에서는 보다 간단한 k8s SIGs에서 제공하는 NFS Provisioner를 사용하기로 한다.
Deployment 형태로 배포되며 NFS(Network File System)를 사용하므로 NFS 볼륨을 마운트 하는 부분이 있는 것을 확인할 수 있다.
또한 NFS Provisioner를 사용하는 실제 StorageClass 같이 배포되어야 한다.
잘 생성된 것을 확인할 수 있다.
PVC에 StorageClass의 이름을 넣고, 용량을 지정하면 이제 StorageClass를 통해서 원하는 용량의 PV를 생성하고 PVC와 PV가 바인드(연결)된다.
PVC를 생성하면 자동으로 PV가 생성되는 것을 확인할 수 있다. 이를 deployment와 연결하고 확인해보자.
최종적으로는 배포되는 Deployment 내에 PVC를 통해서 PV와 Deployment를 마운트하여 사용하면 된다.
로그를 남기고 PV와 마운트 된 경로에 들어가보면, 로그가 남아있는 것을 확인할 수 있다.
즉, 실제 PV가 잘 작동하는 것을 알 수 있다.
사용자가 직접 PV를 생성하는 것이 정적 프로비저닝이고, StorageClass를 통해서 그때 그때 필요한 PV를 자동으로 생성하는 것을 동적 프로비저닝이라고 한다.
이후 프로비저닝 단계를 마치고, PV가 생성되면 PVC와 연결하는 즉, 바인딩 과정이 수행되는데 바인딩에는 다음과 같이 3가지 모드가 있다.
바인딩 모드는 볼륨에 어떻게 접근하는 가를 정의한다.
ReadWriteOnce (RWO)
: 단일 노드만이 볼륨에 읽기 및 쓰기 작업이 가능하다.
이는 독점적 접근을 의미하며, 한 번에 하나의 노드만이 볼룸을 사용할 수 있다.
ReadOnlyMany (ROX)
: 여러 노드에서 볼륨을 읽을 수 있지만, 쓰기는 불가능하다.
ReadWriteMany (RWX)
: 여러 노드가 동시에 볼륨에 대해 읽기 및 쓰기 작업을 수행할 수 있다.
이후 바인딩된 볼륨의 사용이 완료되면, 반환하는 단계로 넘어간다.
볼륨의 사용이 완료되고, 사용자가 더 이상 볼륨을 사용할 필요가 없을 때, 볼륨에 대한 클레임(PVC)를 삭제하는 단계이다.
PVC가 삭제될 때 PV를 어떻게 할 것인지를 결정하는 ReclaimPolicy에 따라서 달라진다.
Retain (유지)
: PVC가 삭제되어도 PV를 유지한다.
데이터가 보존되며, 볼륨은 쿠버네티스 클러스터 내에서 Released
상태가 된다.
Delete (삭제)
: PVC가 삭제될 때 PV와 그 안에 저장된 데이터도 함께 자동으로 삭제된다. 이 정책은 동적 프로비저닝과 같은 자동화된 환경에서 유용하다.
: 이 정책은 이제 거의 사용되지 않으며, 쿠버네티스의 최신 버전에서는 권장되지 않는다. 과거에 PVC가 삭제될 때 PV 내부의 데이터를 삭제하고 볼륨을 재사용할 수 있도록 하였다Recycle (재활용)