emptyDir
- Pod내의 컨테이너들끼리 데이터를 공유하기 위해 볼륨을 사용
- 볼륨은 Pod내에 위치한다.
- 최초에 생성할 때는 볼륨이 비어있는 상태이다.
- Pod안에 볼륨이 생성되기 때문에, Pod가 사라질 때 같이 사라진다.
hostPath
-
자신(Pod)이 올라가 있는 Node의 path를 볼륨으로 사용
- 개별 노드를 위한 파일들을 관리하는데 용이함
- Node의 파일 시스템을 접근하는데 유용하다. ex) 노드의 로그 파일을 읽어서 수집하는 용도
-
Pod들이 죽어도 볼륨은 사라지지 않는다.
-
만약 Node가 2개 이상일 경우 Pod가 다른 Node에 재생성되면 기존 Node에 볼륨마운트를 할 수 없으므로 문제가 생긴다.
-
hostPath에 정의된 path는 Pod가 생성되기 전에 만들어져 있어야 한다
단, type : DirectoryOrCreate 으로 하면 해당 path가 노드에 없으면 생성해준다.
-
PVC / PV
-
외부에서 사용되는 볼륨(ex, git, AWS 등)에 연결해주는 것을 퍼시스턴트 볼륨(PV)라고 한다.
- 퍼시스턴트 볼륨의 종류에 따라 연결해주는 방식이 다 다르다
-
Pod는 이러한 PV들에게 바로 연결하지 않고 Persistent Volume Claim(PVC)에 연결하고 PVC가 PV에 연결을 해준다.
- PV 정의 생성 → PVC 생성 → PVC에 맞는 PV 연결 → Pod 생성 시 PVC 마운팅
- 이렇게 PV와 PVC를 나누는 이유는 Pod에 배포하는 사용자가
-
PV 파일에 capacity에 설정된 정보를 바탕으로 k8s가 PVC와 연결을 맺어준다.
- 이때 PVC에 정의한 capacity가 PV 보다 크다면 k8s는 연결을 해주지 않는다.
- 작다면 연결이 가능하다
- 이때 PVC에 정의한 capacity가 PV 보다 크다면 k8s는 연결을 해주지 않는다.
Dynamic Provisioning
기존 PVC/PV의 문제점
- Kubernetes Cluster와 Volume 연결
- 각 볼륨마다 AccessMode에서 설정할 수 있는 값들이 다르다.
- Azure의 경우 ReadWriteOnly만 가능
하지만 이런식으로 하면, 사용자가 PVC를 만들 때 마다 따로 PV를 만들어 줘야 하고, 이걸 Volume에 연결하고, AccessMode도 맞춰줘야하는 불편함이 생긴다. 이를 해결하기 위해 쿠버네티스에서 Dynamic Provisioning을 제공한다.
Dynamic Provisioning은 사용자가 PVC를 만들면 자동으로 PV를 만들어주고 Volume과 연결까지 해준다. 이렇게 생성된 PV의 Status를 확인할 수 있으며 각각의 정책도 설정 가능하다.
StorageClass
정의 : 퍼시스턴트 볼륨을 동적으로 생성하여 관리할 때 사용
-
Provisioner(필수)
-
PV 프로비저닝에 사용되는 볼륨 플러그인을 결정. 내부
-
Azure에서 제공하는 프로비저닝
-
-
Parameters : provisioner에 따라 다르다.
-
ReclaimPolicy
- Delete : 해당 PVC를 삭제하면, 동적으로 프로비저닝 된 PV도 자동으로 삭제
- Retain(기본값) : PVC를 삭제해도 PV는 삭제되지 않고, Released 단계로 변경되며 복구가 가능하다
cf) PV를 StorageClass를 사용하여 만든 경우와 아닌 경우 ReclaimPolicy의 기본값이 다르다
-
StorageClass를 사용하여 동적으로 PV를 만든 경우
- ReclaimPolicy의 기본정책 : Delete
-
StorageClass를 사용하지 않고 PV를 만든 경우
- ReclaimPolicy의 기본정책 : Retain
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes Study - 08] Namespace, ResourceQuota, LimitRange (0) | 2021.02.12 |
---|---|
[Kubernetes Study - 07] ConfigMap, Secret (0) | 2021.02.10 |
Kubernetes 명령어 정리 (0) | 2021.02.03 |
[Kubernetes Study - 05] 기본 실습 (3) - AKS를 이용한 내부 클러스터 통신 (0) | 2021.01.22 |
[Kubernetes Study - 03] 기본 실습 (1) - yaml 파일 작성 및 Pod 내 컨테이너 접속 (0) | 2021.01.21 |