2023. 1. 11. 17:02ㆍDev
정적 프로비저닝과 동적 프로비저닝의 차이
PersistentVolume(PV)은 컨테이너용 스토리지가 프로비저닝되고 사용되는 방식을 추상화할 수 있는 Kubernetes의 하위 시스템입니다. 스토리지 프로비저닝 및 사용을 위한 Kubernetes의 관련 구성은 StorageClass, PersistentVolume 및 PersistentVolumeClaim(PVC)입니다.
Korea Kubernetes User Group 오픈 톡방에 lugi님이 설명해주신 내용이 있어서 공유드립니다.
비유를 들어 설명드리자면PV는 건물입니다. 뭐 원룸이라고 하면 건물 전체라고 하지요. 방이 수십개 있을 겁니다.
그리고 나는 pod입니다.
PVC는 일종의 계약서에요. 101호 방을 내가 쓰겠다고 계약서를 들고 가면 이제 방을 나한테 내주는 겁니다.
그래서 pod가 PVC를 연결 시키면 나는 PV에게 공간을 할당 받아 쓸 수 있습니다.
근데 그게 쉐어하우스일 수도 있고 나 혼자 쓰는 방일 수도 있습니다. 그게 RWX랑 RWO라는 방식의 차이에요
StorageClass: StorageClass를 사용하여 PersistentVolume을 프로비저닝하는 데 사용할 수 있는 스토리지의 "클래스"를 지정할 수 있습니다. 여기에는 provisioner, 서비스 품질, 회수 정책 등에 대한 세부 정보가 포함됩니다.
Provisioner: 프로비저너는 StorageClass를 사용하여 PersistentVolume을 프로비저닝하는 동안 사용해야 하는 볼륨 플러그인을 결정합니다. 프로비저너는 클라우드 또는 온프레미스 스토리지 서비스 중 하나 일 수 있습니다(예: 클라우드의 디스크 서비스, NFS 공유, iSCSI). 공급업체는 CSI( 컨테이너 스토리지 인터페이스 ) 플러그인을 사용하여 Kubernetes에 스토리지 시스템에 대한 지원을 추가할 수도 있습니다 .
PersistentVolume(PV): Kubernetes Persistent Volume 은 스토리지 클래스를 사용하여 프로비저닝되는 스토리지 볼륨을 나타냅니다. 볼륨을 미리 프로비저닝(정적)하거나 배포 중에 pod에서 요청을 수신할 때 볼륨을 프로비저닝(동적) 할 수 있습니다. PV용 API 객체는 스토리지 클래스에 의해 정의된 모든 스토리지 프로비저너의 스토리지 구현을 캡슐화합니다.
PersistentVolumeClaim(PVC): Kubernetes PVC 는 Pod에서 PV를 요청하는 데 사용됩니다. 클레임은 원하는 스토리지 용량 및 액세스 모드(ReadWriteMany, ReadWriteOnce 또는 ReadOnlyMany)를 나타낼 수 있습니다.
컨테이너에 대해 영구 스토리지를 프로비저닝하고 사용하기 위한 두 가지 옵션(정적 또는 동적)이 있습니다. 이 두 가지 옵션을 자세히 살펴보겠습니다.
정적 볼륨 수명 주기
정적 볼륨을 사용하면 관리자가 원하는 스토리지 볼륨을 미리 프로비저닝합니다. 스토리지 솔루션에서 생성되며 스토리지 클래스를 통해 사용할 수 있습니다. Pod에 스토리지가 필요한 경우 PVC를 통해 볼륨을 요청할 수 있습니다.
Pod에서 요청한 사양과 일치하는 클러스터에서 사용 가능한 정적 PV가 있는 경우 해당 PVC에 바인딩됩니다. 이러한 바인딩된 볼륨은 애플리케이션이 액세스할 수 있도록 Pod에 의해 마운트됩니다.
PV는 수명 주기 동안 Pod에 바인딩된 상태로 유지됩니다. 볼륨 사용이 완료되면 PV의 회수 정책에 따라 볼륨을 유지, 재활용 또는 삭제할 수 있는지 여부가 결정됩니다.
동적 볼륨 수명 주기
동적 볼륨을 사용하면 Pod의 PVC를 기반으로 스토리지 볼륨이 생성됩니다. PVC에 지정된 스토리지 클래스에 대해 볼륨이 작성됩니다. 동적 스토리지 프로비저닝이 성공하려면 이러한 스토리지 클래스가 클러스터에서 미리 구성되어야 합니다. 또한 Kubernetes 클러스터에서 'DefaultStorageClass' 승인 컨트롤러를 활성화해야 합니다.
프로비저닝은 요청 시 발생하므로 정적 볼륨의 크기에서와 같이 크기 조정에 대한 제한이 없습니다. PV가 생성되면 바인딩 및 회수 프로세스는 정적 볼륨과 동일합니다.
정적 볼륨과 동적 볼륨
정적 및 동적 스토리지 프로비저닝 프로세스 모두 CSI 플러그인을 활용하여 고객이 선택한 스토리지 장치에 영구 볼륨을 생성할 수 있습니다. CSI 플러그인을 사용하는 것을 권장하고 모범 사례입니다.
EFS를 예로 들면,
2021년 3월부터 Amazon EFS CSI driver가 dynamic provisioning을 지원합니다.
https://aws.amazon.com/ko/blogs/containers/introducing-efs-csi-dynamic-provisioning/
이전에는 efs provisioner를 쓰기도 했지만 지금은 개발 중단되고 쓰지 않습니다.
모든 기능들은 EFS CSI driver에서 지원합니다.
정적 프로비저닝은 언제 사용합니까?
정적 스토리지 프로비저닝에 대한 다음 사용 사례를 고려하십시오.
- 매개변수 설정: 정적 프로비저닝은 스토리지 사용량을 예측할 수 있는 시나리오, 즉 볼륨 크기와 같은 매개변수가 미리 정의된 시나리오에서 유용합니다.
- 기존 볼륨: 스토리지 디바이스에 이미 프로비저닝된 스토리지 볼륨은 Kubernetes 클러스터에 정적 볼륨으로 연결할 수 있습니다.
- 공유 볼륨: 여러 애플리케이션에서 동일한 볼륨을 공유해야 하는 경우 정적 볼륨을 사용할 수 있습니다. 이는 동일한 네임스페이스에 있거나 다른 네임스페이스의 애플리케이션 간에 있을 수 있습니다.
동적 프로비저닝을 언제 사용합니까?
동적 스토리지 프로비저닝에 대한 다음 사용 사례를 고려하십시오.
- 유연성: 동적 프로비저닝은 변화하는 사용 요구 사항을 충족하기 위해 유연성이 필요할 때 유용합니다. 스토리지 크기도 애플리케이션마다 다를 수 있으므로 설정된 정적 볼륨 크기는 적합하지 않습니다.
- 코드형 인프라: 스크립트 또는 CI/CD 도구를 사용하여 볼륨이 자동으로 생성되는 사용 사례에도 동적 프로비저닝이 필요합니다.
- 최적화: 스토리지를 활용하기 위해 볼륨이 미리 프로비저닝되지 않으므로 스토리지 비용을 최적화하는 데 도움이 됩니다. 이는 종량제 모델에서 스토리지 비용이 청구되는 클라우드 환경에서 특히 유용합니다.
동적 프로비저닝의 이점
컨테이너에 대한 영구 스토리지 볼륨의 필요성은 정적 또는 동적 프로비저닝으로 충족될 수 있습니다. 그러나 이름에서 알 수 있듯이 정적 프로비저닝은 구성 옵션을 제한하고 최적화를 위한 제한된 공간을 제공합니다. 빠르게 변화하는 환경, 특히 클라우드에 배포된 환경에서는 정적 프로비저닝이 좋은 선택이 아닌 경우가 많습니다.
동적 프로비저닝은 스토리지 구성 및 최적화 측면에서 유연성을 제공합니다. CSI 스토리지 플러그인을 사용하면 동적 프로비저닝을 통해 애플리케이션의 성능 요구 사항을 즉시 충족하는 클라우드의 스토리지 계층을 쉽게 사용할 수 있습니다. 또한 기본 클라우드 스토리지 계층화 기능을 통해 클라우드에서 저비용 스토리지의 이점을 얻을 수 있습니다. 또한 애플리케이션 제공을 위해 기존 DevOps 프로세스와 원활하게 통합됩니다.
아래 표는 높은 수준에서 정적 및 동적 스토리지 프로비저닝의 다양한 기능을 비교합니다.
특징 | 정적 프로비저닝 | 동적 프로비저닝 |
볼륨 크기 조정 | 고정 크기 | 유연한 크기 조정 |
프로비저닝 모드 | Pre-provisioned | On-demand |
클라우드 스토리지 비용 | 높은 | 낮은 |
DevOps 통합 | 복잡한 | 쉬운 |
CSI 통합 | 지원 | 지원 |
볼륨 회수 | 지원 | 지원 |
'Dev' 카테고리의 다른 글
윈도우 wsl2 터미널 창 분할 단축키 (0) | 2023.02.10 |
---|---|
AWS EC2에서 curl을 이용한 RDS 접근 확인 (0) | 2023.01.16 |
2022 회고와 2023 목표 (0) | 2022.12.29 |
쿠버네티스 오퍼레이터란? (1) | 2022.11.17 |
istio 에러 (0) | 2022.06.28 |