✅ PV (Persistent Volume)
PV는 Volumes와 같은 볼륨 플러그인이지만, PV를 사용하는 개별 파드와는 별개의 라이프 사이클을 가진다. Pod와는 상관없이 영속성있는 볼륨을 제공한다.
✅ PVC(Persistent Volume Claim)
PVC는 사용자의 스토리지에 대한 요청이다. 파드와 비슷하다.
파드는 노드 리소스를 사용하고 PVC는 PV리소스를 사용한다.
파드가 특정 수준의 리소스( CPU 및 메모리 )를 요청할 수 있는 것처럼 클레임은 특정 크기 및 접근 모드를 요청할 수 있다.
Pod는 PV를 바로 연결하지 않고, PVC를 통해 연결된다.
Pod를 PV에 바로 연결하지 않는 이유는 Kubernetes가 User와 Admin으로 영역을 나눠서 관리하기 때문이다.
- Admin: Kubernetes 운영자
- User: Pod에 서비스를 만들고 배포를 담당하는 자
✅ StorageClass
persistent volume을 이용한 구성을 보면, 항상 PV가 생성되어 있어야 한다. 즉, pod가 향 후 몇개가 생성될 지 알 수 없으므로 이를 예상해서 항상 큰 사이즈의 volume을 일단 생성(자원 할당)하고, pod가 요청 할 때마다 이를 할당하는 구조이다.
동적인 구조에서 volume을 직접 지정하는 persistent volume이 아니라 volume에 대한 요건(사이즈, ssd, disk, type)만 정의하고, 요청시에 이 요건에 맞는 pv를 할당하기 위해서 storage class를 사용한다.
각 스토리지클래스에는 해당 스토리지클래스에 속하는 퍼시스턴트볼륨을 동적으로 프로비저닝 할 때 사용되는 provisioner, parameters 와 reclaimPolicy 필드가 포함된다.
스토리지클래스 오브젝트의 이름이 사용자가 특정 클래스를 요청할 수 있는 방법이기 때문에 중요하다.
관리자는 스토리지클래스 오브젝트를 처음 생성할 때 클래스의 이름과 기타 파라미터를 설정하며, 일단 생성된 오브젝트는 업데이트할 수 없다.
관리자는 특정 클래스에 바인딩을 요청하지 않는 PVC에 대해서만 기본 스토리지클래스를 지정할 수 있다.
✅ Lifecycle
크게 총 4단계가 있다.
1️⃣ Provisioning
provisioning은 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해두었다가 필요시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해두는 것이다.
Provisioning에는 Static Provisioning와 Dynamic Provisioning이 있다.
pv 생성이 정상적으로 성공하면 Available 상태가 된다.
- Static Provisioning
manifest 파일등을 통해 특정 용량을 가진 PV를 미리 생성해두고, 요청이 있을 시 미리 생성한 PV를 할당해 사용한다.
클러스터 사용자가 사용할 수 있는 실제 스토리지의 세부 사항을 제공한다. 이 PV들은 쿠버네티스 API에 존재하며 사용할 수 있다.
- Dynamic Provisioning
관리자가 생성한 정적 PV가 사용자의 퍼시스턴트볼륨클레임과 일치하지 않으면 클러스터는 PVC를 위해 특별히 볼륨을 동적으로 프로비저닝 하려고 시도할 수 있다. 이 프로비저닝은 스토리지클래스를 기반으로 한다. 정적과는 다르게 사용자가 요청할 때 PV를 생성하여 할당하고, 사용자는 원하는 만큼의 용량을 생성해서 자유롭게 사용할 수 있다. 따라서 클러스터 관리자가 스토리지를 사전 Provisioning할 필요가 없다. 사용자가 스토리지를 요청하면 자동으로 Provisionig한다.
2️⃣ Binding
PV와 PVC를 연결시킨다. PV의 Capacity와 accessMode가 PV-PVC의 연결 근거가 된다.
PVC는 사용자가 요청하는 볼륨을 PV에 요청하고 PV는 그에 맞는 볼륨이 있으면 할당한다.
만약 PVC가 요청하는 볼륨이 PV에 없다면, 해당 요청을 무한정 남아있게 된다. PVC가 요청하는 볼륨이 PV에 생성되면 요청을 받아들여 할당해준다.
PVC 대 PV 바인딩은 일대일 매핑으로, 퍼시스턴트볼륨과 퍼시스턴트볼륨클레임 사이의 양방향 바인딩인 ClaimRef를 사용한다.
- accessmode 종류
- ReadWriteOnce
하나의 노드에서 해당 볼륨이 읽기-쓰기로 마운트 될 수 있다. ReadWriteOnce 접근 모드에서도 파트가 동일 노드에서 구동되는 경우에는 복수의 파드에서 볼륨에 접근할 수 있다.
- ReadWriteMany
볼륨이 다수의 노드에서 읽기 전용으로 마운트 될 수 있다.
- ReadWriteOncePod
볼륨이 단일 파드에서 읽기-쓰기로 마운트될 수 있다. 전체 클러스터에서 단 하나의 파드만 해당 PVC를 읽거나 쓸 수 있어야하는 경우 ReadWriteOncePod 접근 모드를 사용한다.
3️⃣ Using
Pod는 PVC를 볼륨으로 사용한다.
Cluster는 PVC를 확인해 바인딩된 pv를 찾고 해당 볼륨을 Pod에서 사용할 수 있도록 한다.
4️⃣ Reclaiming
기존에 사용했던 PVC가 아니더라도 다른 PVC로 재활용이 가능하다. 떄문에 사용이 종료된 PVC를 삭제할 때, 사용했던 PV의 데이터를 어떻게 처리할지에 대한 설정을 한다.
- Retain: PV의 데이터를 그대로 보존합니다.
- Recycle: 재사용하게될 경우 기존의 PV 데이터들을 모두 삭제 후 재사용합니다.
- Delete: 사용이 종료되면 해당 볼륨을 삭제합니다.
https://m.blog.naver.com/freepsw/222005161870
[kubernetes] Volume vs Persistent Volume vs Storage Class
Kubernetes를 사용하면서 다양한 어플리케이션을 pod로 실행하게 되는데, 이때 중요한 데이터는 안전한 스...
blog.naver.com
https://nirsa.tistory.com/156?category=871751
[Kubernetes] 쿠버네티스 볼륨 개념 1편 (emptryDir, hostPath)
볼륨을 사용해야하는 이유? 컨테이너 특성 상 어떠한 문제가 발생하여 컨테이너가 삭제 된다면 데이터도 같이 삭제 됩니다. 웹 소스 파일의 경우 이미지에 들어있어 삭제 되더라도 상관 없겠지
nirsa.tistory.com
https://junior-developer.tistory.com/55
[k8s] 6. Volume - emptyDir, hostPath, PV/PVC
Volume emptyDir, hostPath, PVC/PV에 대해 알아보자 1. emptyDir 컨테이너들끼리 데이터를 공유하기 위해서 볼륨을 사용하는 것 최초 볼륨이 생성될 때 볼륨 내용이 비어있기 때문에 emptyDir로 명명됨 Contain..
junior-developer.tistory.com
https://kubernetes.io/ko/docs/concepts/storage/persistent-volumes/
퍼시스턴트 볼륨
이 페이지는 쿠버네티스의 퍼시스턴트 볼륨 의 현재 상태를 설명한다. 볼륨에 대해 익숙해지는 것을 추천한다. 소개 스토리지 관리는 컴퓨트 인스턴스 관리와는 별개의 문제다. 퍼시스턴트볼륨
kubernetes.io
https://miro.medium.com/max/868/1*DE9B97u63yfk6hntSbF5kQ.png
https://miro.medium.com/max/2000/1*eUpYUJz3bTBAcyMCI6ThOw.png