PV, PVC lifeCycle 그림으로 설명
Static Provisioning
1. 인프라 관리자(admin)가 사용할 수 있는 Storage에 해당하는 PV를 생성
예제에서는 HostPath, NFS와 public cloud GCP, AWS, Azure의 Storage를 사용할 수 있는 상태
2개의 PV 생성
[ Local Storage와 Public Cloud Storage의 Access mode에 대한 설명 ]
ReadWriteOnce(RWO) : 해당 PV는 하나의 Pod에만 마운트 되고 하나의 Pod에서만 읽고 쓰기가 가능.
ReadOnlyMany (ROM): 여러 개의 Pod에 마운트가 가능하며, 여러 개의 Pod에서 동시에 읽기가 가능. 쓰기는 불가능.
ReadWriteMany (RWM): 여러 개의 Pod에 마운트가 가능하고, 동시에 여러개의 Pod에서 읽기와 쓰기가 가능.
위와 같이 여러개의 모드가 있지만, 모든 디스크에 사용이 가능한 것은 아니고 디스크의 특성에 따라서 선택적으로 지원
하위 표에서 자세히 설명
[ Volume 종류 및 AccessMode 표 ]
참고: https://kubernetes.io/ko/docs/concepts/storage/volumes/#awselasticblockstore
Storage | Volume Plugin | ReadWriteOnce | ReadOnlyMany | ReadWriteMany |
public Cloud | AWS ElasticBlockStore | O | X | X |
Azure File | O | O | O | |
Azure Disk | O | X | X | |
GCP gcePersistentDisk | O | O | X | |
On-Premise Cloud | StorageOS | O | X | X |
VsphereVolume | O | X | X | |
Glusterfs | O | O | O | |
CephFS | O | O | O | |
NFS | O | O | O | |
Kubernetes | HostPath | O | X | X |
emptyDir | O | X | X |
2. 개발자가 Volume Object를 사용하기 위해 PVC 생성
특정 조건의 PVC를 생성하면 해당 PVC 조건에 맞는 PV를 kubernetes가 자동으로 찾아서 매칭 시켜줌
[ 그림의 PVC 1의 경우 ]
PVC 1의 경우 조건에 맞는 PV 1이 있어서 이를 kubernetes 자동으로 매칭 시켜주어
Status 상태가 정상적으로 Bound 가 됨
[ 그림의 PVC 2의 경우 ]
PVC 2의 경우 Storage 1TB 조건에 맞는 PV가 없음
Status 상태가 Pending 됨
PV 가 없음으로 조건에 맞는 PV가 생성될 때까지 무한히 Pending 상태로 대기하게 됨
조건에 맞는 PV가 생성될 시 kubernetes가 자동으로 연결시켜주며 Bound 상태가 될 것이다.
[만약 PVC 1에서 Storage를 50G를 요청했다면?]
50G로 설정했다면 매칭되는 용량이 완전히 매칭되는 PV는 없고
50G가 보다 여유로운 100G인 PV1이 존재하고 있다.
이런 경우 PVC1이 PV1과 매칭되어 PVC1 이 50G 사용 가능으로 설정되지 않고
100G 사용 가능으로 설정된다.
3. Pod에 Volume Object로 PVC 연결
[ 그림의 Pod 1의 경우 ]
Pod 1의 경우 정상적으로 Bound 된 PVC 1 Volume Object를 사용했으므로
PVC 스펙에 해당하는 Volume을 사용할 수 있음
Pod Status 상태가 정상적으로 Running 됨
[ 그림의 Pod 2의 경우 ]
Pod 2의 경우 Pending 상태로 PV가 생성되기를 기다리는 중인 PVC 2 Volume Object를 사용했으므로
PVC 스펙에 해당하는 Volume을 사용할 수 없음
Pod Status 상태가 정상적으로 Pending으로 됨
PVC가 없음으로 조건에 맞는 PVC가 생성될 때까지 Pod 2가 무한히 Pending 상태로 대기하게 됨
PVC가 정상적으로 생성될 시 Pod가 Volume을 사용할 수 있게 되며 Running 상태가 될 것임
Dynamic Provisioning
1. StorageClass Object를 생성
Dynamic Provisioning 방식으로 Volume을 사용하기 위해 StorageClass를 생성한다.
사용자가 원하는 조건으로 직접 생성할 수도 있지만
각 Public Cloud 사에서 kubernetes를 사용할 시 Default로 StorageClass 가 생성되어 있음
- 예) AWS의 EKS, GCP의 GKE
on-premise 환경의 경우 default StorageClass는 없음
아래 그림에서는 on-premise 환경에서 GCP와 연결되는 StroageClass를 생성함
2. 개발자가 원하는 조건의 PVC를 생성
개발자가 원하는 조건의 PVC를 생성한다.
PVC에는 StorageClass가 명시되어 있고 PVC와 StorageClass가 연결되게 됨
3. PVC와 Storage 클래스 연결
PVC와 StorageClass가 연결되면
StorageClass는 PVC의 스펙에 맞는 PV를 생성하기 위해
provisioner 설정에 명시되어 있는 저장소와 연결됨
- 예제에서는 GCP임으로 GCP와 연결된다.
GCP에서 PVC 스펙과 동일한 Storage를 생성할 수 있는지 확인한 후 생성이 가능하면
StorageClass는 GCP를 사용해서 PVC 조건에 맞는 PV를 생성함
4. Pod에 Volume Object로 PVC 연결
Pod 생성할 경우 정상적으로 Bound 된 PVC Volume Object를 사용했으므로
PVC 스펙에 해당하는 Volume을 사용할 수 있음
Pod Status 상태가 정상적으로 Running 됨
🔗출처
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes] Kubernetes(쿠버네티스)란 ?! (0) | 2022.05.16 |
---|---|
[Kubernetes] Pod 생성 과정 (0) | 2022.03.28 |
[Kubernetes] Object - Volume이란 (2) (0) | 2022.03.28 |
[Kubernetes] Object - Volume이란 (1) (0) | 2022.03.28 |
[Kubernetes] Object - Namespace란 ? (0) | 2022.03.28 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!