PV(Persistent Volume)
Kubernetes에서 PV (Persistent Volume)는 지속적인 데이터 저장을 위한 스토리지 볼륨을 나타냅니다. PV는 스토리지 자원을 추상화하고, 클러스터 내에서 애플리케이션에 안정적으로 데이터를 저장하고 제공할 수 있도록 도와줍니다. PV는 사용자 또는 관리자가 프로비저닝하고 관리하는 스토리지 자원을 나타내며, 이러한 PV를 사용하여 Pod와 같은 애플리케이션에서 데이터를 저장하고 사용할 수 있습니다.
Kubernetes PV에 대한 주요 특징
- 추상화된 스토리지: PV는 클러스터 내에서 사용 가능한 스토리지 자원을 추상화합니다. 이는 클라우드 스토리지, 로컬 디스크, 네트워크 스토리지 등과 같은 다양한 백엔드 스토리지를 나타낼 수 있습니다.
- 영속성 보장: PV는 애플리케이션의 데이터를 영속적으로 보존합니다. 즉, Pod가 삭제되거나 업데이트되더라도 PV는 데이터를 유지합니다.
- 동적 프로비저닝: 관리자가 미리 프로비저닝하지 않아도, PV는 동적으로 프로비저닝될 수 있습니다. 이는 PVC (Persistent Volume Claim)를 통해 필요한 스토리지 요구사항을 정의하고, 시스템이 이에 맞게 PV를 자동으로 프로비저닝하도록 할 수 있습니다.
- 접근 모드: PV는 여러 가지 접근 모드를 가질 수 있습니다. 예를 들어, 읽기/쓰기 모드, 읽기 모드, 공유 모드 등이 있으며, 이는 다양한 스토리지 유형과 사용 사례에 따라 다릅니다.
- 재사용 가능: PV는 재사용 가능하며 여러 Pod에서 공유하여 사용할 수 있습니다. 여러 Pod가 하나의 PV에 접근하여 데이터를 공유할 수 있습니다.
PV 상태값에 대한 설명
Kubernetes의 PV (Persistent Volume)는 스토리지 자원을 나타내는 객체로서, 다양한 상태를 가질 수 있습니다. PV의 상태는 해당 스토리지 자원이 어떻게 사용 가능한지, 현재 어떤 상태에 있는지를 나타내며, 클러스터 관리자 및 사용자가 PV를 효과적으로 관리하기 위해 중요한 정보를 제공합니다. PV의 주요 상태값은 다음과 같습니다
- Available (사용 가능)
- PV가 사용 가능한 상태입니다.
- PV가 PVC (Persistent Volume Claim)와 바인딩되지 않았으며, 클러스터 내에서 사용할 수 있는 스토리지 자원으로 구성되어 있습니다.
- Bound (바인딩됨):
- PV가 PVC와 바인딩된 상태입니다.
- PVC가 PV와 매칭되었으며, 해당 PV는 해당 PVC에 의해 사용 중입니다.
- Released (해제됨)
- PV가 PVC와 언바인딩되어, 이전에 바인딩되었던 PVC와의 연결이 끊어진 상태입니다.
- PV는 여전히 사용 가능하지만, 새로운 PVC와 바인딩되기를 기다리고 있습니다.
- Failed (실패)
- PV가 실패한 상태입니다.
- PV가 사용 불가능하거나, 정상적인 동작을 하지 않는 상태일 수 있습니다.
- 주로 스토리지나 네트워크와 같은 하부 인프라 문제로 인해 발생합니다.
PV의 상태는 kubectl get pv 명령을 사용하여 확인할 수 있으며, kubectl describe pv <pv-name> 명령을 사용하여 자세한 정보를 얻을 수 있습니다.
PV 생성에 대한 YAML 및 설명을 보겠습니다.
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-hostpath-pv
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: manual
hostPath:
path: /mnt/pv
- metadata: PV의 메타데이터 설정 부분으로, PV의 이름을 정의합니다.
- spec: PV의 세부 사항을 정의하는 부분입니다.
- capacity: PV의 용량을 설정합니다.
- volumeMode: PV의 볼륨 모드를 지정합니다. 일반적으로 Filesystem으로 설정합니다.
- accessModes: PV에 대한 액세스 모드를 지정합니다. 위의 예시에서는 ReadWriteOnce로 설정되어 하나의 노드에서만 읽기/쓰기 가능합니다.
- persistentVolumeReclaimPolicy: PV가 삭제될 때 어떻게 처리할지 설정합니다. Retain으로 설정하면 PV가 삭제되더라도 스토리지를 유지합니다.
- storageClassName: 스토리지 클래스 이름을 지정합니다.
- hostPath: hostPath를 사용하여 스토리지를 제공하는 설정입니다. path를 /mnt/pv로 지정했습니다.
volumeMode
volumeMode는 PV (Persistent Volume) 또는 PVC (Persistent Volume Claim)에 대한 볼륨 모드를 정의하는데 사용되는 설정입니다. 이 설정은 볼륨이 파일 시스템으로 동작할지 또는 블록 디바이스로 동작할지를 결정합니다.
volumeMode에는 두 가지 주요 옵션이 있습니다
- Filesystem (파일 시스템):
- volumeMode: Filesystem으로 설정하면 PV 또는 PVC가 파일 시스템으로 동작합니다.
- 이 모드는 대부분의 경우에 사용되며, PV를 파일 시스템으로 마운트하여 Pod 내에서 파일 및 디렉토리를 사용할 수 있습니다.
- Block (블록 디바이스):
- volumeMode: Block으로 설정하면 PV 또는 PVC가 블록 디바이스로 동작합니다.
- 이 모드는 특정 상황에서 필요할 수 있으며, 블록 디바이스로 PV를 마운트하여 Pod 내에서 원시 블록 스토리지를 사용할 수 있습니다. 이 모드는 주로 데이터베이스와 같이 블록 스토리지를 필요로 하는 애플리케이션에 사용됩니다.
volumeMode 설정은 PV를 생성할 때 또는 PVC를 요청할 때 정의됩니다. PV와 PVC의 volumeMode가 일치해야 합니다. 예를 들어, PV가 volumeMode: Filesystem으로 설정되어 있으면 PVC도 동일한 모드로 요청해야 합니다.
블록 디바이스 모드에서 PV를 사용하려면 Pod 내에서 해당 디바이스를 다룰 수 있어야 하며, 파일 시스템 모드에서 PV를 사용하려면 해당 PV가 파일 시스템으로 포맷되어야 합니다.
persistentVolumeReclaimPolicy
persistentVolumeReclaimPolicy는 Kubernetes PV (Persistent Volume) 객체의 설정 중 하나로, PV가 PVC (Persistent Volume Claim)와 언바인딩된 후에 해당 PV의 스토리지를 어떻게 처리할지를 정의합니다. 이 설정은 PV의 재사용 및 스토리지 리소스의 관리를 제어하는 데 중요합니다.
persistentVolumeReclaimPolicy에는 세 가지 주요 옵션이 있습니다
- Retain
- PV가 언바인딩되더라도 스토리지를 유지합니다.
- 즉, PV가 삭제되더라도 PV가 사용한 스토리지는 그대로 남아 있습니다. 수동으로 정리하거나 재사용할 수 있습니다.
- Delete
- PV가 언바인딩되면 PV가 사용한 스토리지를 자동으로 삭제합니다.
- PV가 삭제되면 PV가 사용한 스토리지 자원도 함께 삭제됩니다.
- Recycle (v1.11 이전 버전에서 사용 가능)
- PV가 언바인딩되면 스토리지를 초기 상태로 재설정하는 시도를 합니다.
- 이 옵션은 이제 사용이 권장되지 않으며, v1.11 이후 버전에서는 사용되지 않습니다. 대신, Delete 또는 Retain을 사용하는 것이 권장됩니다.
PV의 persistentVolumeReclaimPolicy 설정은 PV를 다시 사용하거나 스토리지를 해제하고 관리하는 방식을 결정합니다. 예를 들어, PV를 다시 사용하려면 Retain을 사용하고, PV와 관련된 스토리지를 정리하려면 Delete를 사용할 수 있습니다. 각 PV에 대해 설정을 지정하며, 기본값은 없으며 명시적으로 설정해야 합니다.
accessModes
Kubernetes에서 accessModes는 PV (Persistent Volume)에 대한 액세스 모드를 지정하는데 사용되는 속성입니다. 이 모드는 다수의 Pod가 동일한 PV를 공유하거나 읽기/쓰기 액세스를 어떻게 할지 정의합니다. accessModes에는 다음 세 가지 주요 옵션이 있습니다
- ReadWriteOnce (RWO):
- 단일 노드에서만 읽기/쓰기 액세스를 허용합니다.
- 여러 Pod 간에서 공유할 수 없으며, 한 번에 하나의 Pod만이 PV를 마운트하고 사용할 수 있습니다.
- 예를 들어, 로그 파일을 쓰는 애플리케이션에 적합합니다.
- ReadOnlyMany (ROX):
- 다중 노드에서 읽기 전용 액세스를 허용합니다.
- 여러 Pod가 동시에 PV를 마운트하여 읽기 전용으로 사용할 수 있습니다.
- 예를 들어, 웹 서버와 같이 여러 Pod에서 공유하는 정적 파일에 적합합니다.
- ReadWriteMany (RWX):
- 다중 노드에서 읽기/쓰기 액세스를 허용합니다.
- 여러 Pod가 동시에 PV를 마운트하고 읽기와 쓰기 모두 가능합니다.
- 일반적으로 네트워크 파일 시스템(NFS)과 같이 여러 노드 간에 스토리지를 공유해야 하는 시나리오에 적합합니다.
accessModes를 올바르게 설정하는 것은 PV를 사용하는 애플리케이션의 요구 사항과 사용 사례에 큰 영향을 미칩니다. 예를 들어, 읽기/쓰기 액세스가 필요한 애플리케이션은 RWO를 사용해야 하며, 읽기 전용 액세스만 필요한 애플리케이션은 ROX를 사용해야 합니다.
각 PV에 대한 accessModes 설정은 PV를 프로비저닝할 때 정의되며, 이 설정을 PV를 요청하는 PVC (Persistent Volume Claim)와 일치시켜야 합니다. 예를 들어, PVC가 accessModes: [ReadWriteOnce] 로 정의되면 해당 PVC는 RWO 액세스 모드의 PV에만 바인딩될 수 있습니다.
📌 쿠버네티스(Kubernetes) PV / PVC / StorageClass (2) (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 (2) (0) | 2023.09.08 |