PVC
PVC (Persistent Volume Claim)는 Kubernetes에서 사용되는 리소스 객체로서, Pod가 스토리지 자원을 요청하고 어떤 PV (Persistent Volume)와 바인딩될지를 정의합니다. 쉽게 말해, PVC는 Pod가 어떤 스토리지를 사용할 것인지를 지정하는 요청서와 같은 역할을 합니다.
다음은 PVC에 대한 주요 특징과 사용 사례에 대한 설명입니다
- 스토리지 요청: PVC는 Pod가 얼마나 많은 스토리지를 필요로 하는지를 정의합니다. 이 요청은 용량 (storage capacity) 및 액세스 모드 (access mode)를 포함할 수 있습니다.
- 자동 프로비저닝: PVC가 요청하는 스토리지 자원이 사용 가능한 PV로 바인딩되지 않은 경우, 스토리지 클래스 (StorageClass)를 사용하여 동적으로 PV를 프로비저닝할 수 있습니다.
- 자원 분리: PVC는 애플리케이션 코드와 스토리지 구성을 분리하는 데 도움을 줍니다. 애플리케이션은 PVC를 통해 스토리지에 접근하며, 스토리지 관리는 PVC와 PV 수준에서 이루어집니다.
- 동적 스토리지 확장: PVC는 필요에 따라 동적으로 스토리지를 확장하거나 축소할 수 있습니다. 이것은 애플리케이션의 스토리지 요구 사항이 변경되는 경우 유용합니다.
- 영속성 보장: PVC를 사용하면 Pod가 다시 시작되거나 업데이트되어도 스토리지 데이터가 보존됩니다. 이것은 데이터베이스나 파일 저장소와 같이 영속적인 데이터를 처리하는 애플리케이션에 필요합니다.
- 스토리지 클래스 선택: PVC는 어떤 스토리지 클래스를 사용할지를 지정할 수 있습니다. 이를 통해 다양한 스토리지 백엔드 및 스토리지 품질에 대한 요구 사항을 충족시킬 수 있습니다.
PVC를 사용하여 애플리케이션에서 필요한 스토리지를 관리하면 스토리지 리소스를 효율적으로 활용하고, 애플리케이션의 데이터를 영속적으로 보존할 수 있습니다. PVC를 정의하고 Pod와 연결함으로써 스토리지를 안정적으로 관리하고 애플리케이션을 올바르게 설정할 수 있습니다.
스토리지 프로비저닝은 스토리지 자원을 생성하고 구성하여 데이터를 저장하고 관리할 수 있도록 하는 프로세스를 의미합니다. 이것은 주로 디스크, 파일 시스템, 네트워크 스토리지, 클라우드 스토리지 등과 관련이 있으며, 데이터베이스, 파일 서버, 웹 서버 및 클라우드 서비스와 같은 애플리케이션을 지원하는 데 사용됩니다.
PVC 라이프 사이클
PV가 일정한 라이프사이클을 가지는 것과 마찬가지로 PVC도 특정한 라이프사이클을 가집니다. PVC의 주요 라이프사이클 단계는 다음과 같습니다
- PVC 생성 (Creation):
- PVC는 kubectl apply 또는 다른 Kubernetes API 호출을 통해 생성됩니다.
- PVC를 생성할 때는 PVC가 요청하는 스토리지 용량 및 액세스 모드를 지정합니다.
- PVC 바인딩 (Binding):
- PVC가 생성되면 Kubernetes 컨트롤 플레인은 해당 PVC와 일치하는 PV를 찾아 바인딩합니다.
- PVC와 PV 간의 일치 여부는 storageClassName, 액세스 모드 및 요청된 용량 등의 조건을 기반으로 합니다.
- PV가 적절한 PVC와 바인딩되면 PVC는 바인딩된 PV의 스토리지를 사용할 수 있게 됩니다.
- PVC 사용 (Usage):
- PVC가 바인딩된 PV를 사용하여 Pod에서 스토리지에 액세스할 수 있습니다.
- Pod는 PVC의 이름을 사용하여 스토리지를 마운트하고 데이터를 읽고 쓸 수 있습니다.
- PVC 삭제 (Deletion):
- PVC가 더 이상 필요하지 않을 때, kubectl delete 또는 다른 삭제 명령을 사용하여 PVC를 삭제할 수 있습니다.
- PVC를 삭제하면 PVC와 PV 간의 바인딩이 해제됩니다.
- PVC 재사용 또는 삭제 (Reuse or Deletion):
- PVC를 삭제하면 해당 PVC가 사용한 PV는 언바인딩된 상태로 남게 됩니다.
- 클러스터 관리자는 이후 PVC가 삭제된 PV를 다시 사용하거나 삭제할 수 있습니다.
- 동적 프로비저닝 (Dynamic Provisioning):
- PVC가 바인딩되지 않은 PV를 요청하는 경우, 동적 프로비저닝을 사용하여 PV를 자동으로 프로비저닝할 수 있습니다.
- 이 과정에서 PVC 생성과 PV 프로비저닝이 발생하며, PVC가 새로 생성된 PV에 바인딩됩니다.
PVC는 Pod와 마찬가지로 애플리케이션 라이프사이클에 밀접하게 연결되며, 데이터의 영속성을 보장하고 스토리지 관리를 단순화하는 데 중요한 역할을 합니다. PVC의 라이프사이클 단계는 PV와 함께 작동하여 스토리지 자원을 효율적으로 관리하고 스토리지를 사용하는 애플리케이션의 요구 사항을 충족시킵니다.
PVC 생성 및 설명
이전 글에서 생성한 my-hostpath-pv를 바인딩하는 PVC를 만들려면 다음과 같은 YAML 파일을 사용할 수 있습니다. 아래 YAML 파일은 my-hostpath-pvc라는 PVC를 생성하고, 이 PVC가 my-hostpath-pv와 바인딩되도록 설정합니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-hostpath-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: "" # 스토리지 클래스를 설정하지 않음 (기본 클래스 사용)
resources:
requests:
storage: 5Gi # 원하는 용량을 지정
volumeName: my-hostpath-pv # 바인딩할 PV의 이름을 여기에 지정
- metadata.name: PVC의 이름을 지정합니다. 여기서는 my-hostpath-pvc로 설정되어 있습니다.
- spec.accessModes: 액세스 모드를 설정합니다. 이 예제에서는 ReadWriteOnce로 설정하여 한 번에 하나의 Pod에서만 읽기 및 쓰기 액세스를 허용합니다.
- spec.storageClassName: 스토리지 클래스를 설정합니다. 이 예제에서는 비워두어 기본 스토리지 클래스를 사용합니다.
- spec.resources.requests.storage: PVC가 요청하는 스토리지 용량을 설정합니다. 이 예제에서는 5Gi로 설정되어 있습니다.
- spec.volumeName: 바인딩할 PV의 이름을 설정합니다. 이 예제에서는 my-hostpath-pv로 설정되어 이 PVC가 해당 PV와 바인딩됩니다.
PV, PVC 생성 후 PV의 상태(STATUS) 가 Bound 인지 확인
PVC는 Kubernetes에서 데이터의 영속성을 관리하고 스토리지 리소스를 효율적으로 활용하는 중요한 개념 중 하나입니다. PVC를 적절하게 사용하면 데이터 관리 및 애플리케이션 배포를 더욱 간편하게 수행할 수 있습니다.
📌 쿠버네티스(Kubernetes) PV / PVC / StorageClass (1) (tistory.com)
'Programing > Kubernetes' 카테고리의 다른 글
쿠버네티스(Kubernetes), 랜처(Rancher, RKE2) 설치 3편 (0) | 2023.09.27 |
---|---|
쿠버네티스(Kubernetes), 랜처(Rancher, RKE2) 설치 2편 (0) | 2023.09.13 |
쿠버네티스(Kubernetes), 랜처(Rancher, RKE2) 설치 1편 (0) | 2023.09.13 |
쿠버네티스(Kubernetes) 클러스터 복구 (0) | 2023.09.12 |
쿠버네티스(Kubernetes) PV / PVC / StorageClass (1) (0) | 2023.08.22 |