Volume에 대해 자세히 알아보자
- 실제 데이터는 쿠버네티스 클러스터와 Volume으로 분리돼서 관리
이전에 배운 Volume
- Volume은 데이터를 안정적으로 유지하기 위해 사용
- Volume은 내부망에서 관리하는 것과 외부망에서 관리하는 것으로 나눌 수 있음
- 외부망은 아마존, 구글, 마이크로소프트와 같은 스토리지를 사용할 수 있음
- 내부망은 쿠버네티스를 구성하는 노드의 hostPath, local Volume
- 또, 내부망에서 On-Premise Solution을 설치할 수 있음
- STORAGEOS, Ceph, GlusterFS와 같은게 있고 이게 알아서 노드 자원을 이용해 Volume 관리
- 내부망에서 또 NFS를 사용해서 다른 서버를 Volume으로 사용 가능
이전에 배운 Kubernetes Cluster
- 관리자는 PV를 만들어 저장용량과 AccessMode를 만들어 Volume을 선택해 사용
- 사용자는 원하는 용량과 AccessMode로 PVC를 만들면 쿠버네티스가 알아서 적절한 PV와 연결
- PVC는 Pod에서 사용
- AccessMode: ReadWriteOnce, ReadOnlyMany, ReadWriteMany
- 이렇게 한다고 다 적용되는게 아니라 Volume마다 또 지원되는 AccessMode가 달라서 암튼 이렇게 막 되지 않음
- 이런 방식은 Volume 만들 때마다 PVC 만들고, Storage, AccessMode 맞추는게 힘듦
Dynamic Provisioning
- 사용자가 PVC를 만들면 알아서 PV를 만들어주고 실제로 Volume과 연결해줌
- 모든 PV에는 파드처럼 각각의 상태가 존재해서, PV가 PVC가 연결되어 있는지 아닌지 에러가 났는지 등을알 수 있음
- PV를 삭제하는 부분에서 정책적인 요소가 있음
StorageClass
- 사전작업 후 Dynamic Provisioning을 지원해주는 storage solution을 선택해야 함 --> STORAGEOS 선택
- 설치하면, 서비스나 파드등 여러 오브젝트들이 생성되고 StorageClass 오브젝트가 제일 중요
- StorageClass를 사용해서 동적으로 PV를 만드는데 PVC를 만들 때, StorageClassName이 있음
- 이전엔 PVC의 StorageClassName 항목에
""
을 넣으면 적절한 PV에 연결이 됐었음 - 만약 여기에 STORAGEOS로 만든 StorageClass
"fast"
를 넣으면 자동으로 STORAGEOS를 가진 PV가 만들어짐 - StorageClass는 추가적으로 만들 수 있고, default를 설정하면 PVC에 StorageClassName을 생략하면 default StorageClass가 적용됨
Status & ReclaimPolicy
- PV의 Status는 최초 PV가 만들어 졌을 때 Available
- PVC와 PV가 연결되면 PV는 Bound 상태로 변하는데, PV를 직접 만드는 경우는 Volume이 실제 만들어진 상태는 아님
- 파드가 PVC를 사용해서 구동이 되어야 실제 Volume이 만들어짐
- 파드가 삭제되면, PVC와 PV는 아무런 변화가 없음 --> 데이터에 문제가 없음
- PVC를 삭제하면 PV의 Status는 Released
- PV와 Volume에 연결에 문제가 생기면 Failed
- PV가 Relased일 때 ReclaimPolicy에 따라 PV에 대한 상태가 달라짐
- ReclaimPolicy엔느 Retain, Delete, Recycle이 있음
- Retain: PVC가 삭제되면 PV의 상태가 Relased
- PV를 직접 만들 시 default
- 데이터는 보존되지만 PV 재사용 불가능
- 삭제하려면 수동으로 해야함
- Delete: PVC를 지우면 PV도 같이 지워짐
- StorageClass 사용해서 만들어진 PV면 default
- Volume에 따라 실제 데이터가 삭제되기도 하고 안 되기도 함
- Recycle: PV의 상태가 Available이 됨
- 현재 Deprecated
- 실제 데이터가 삭제되면서 PV의 재사용 가능
출처
인프런 - 대세는 쿠버네티스
'네트워크 > k8s' 카테고리의 다른 글
[k8s] 28. Accessing API - Overview (0) | 2021.02.21 |
---|---|
[k8s] 27. Volume - 실습 (0) | 2021.02.21 |
[k8s] 25. Service - 실습 (0) | 2021.02.19 |
[k8s] 24. Service - Headless, Endpoint, ExternalName (0) | 2021.02.18 |
[k8s] 23. Pod - Node Scheduling - 실습 (0) | 2021.02.17 |