[쿠버네티스 스토리지] pv와 pvc에 대한 개념 이해

hi·2023년 8월 3일
0

쿠버네티스

목록 보기
42/60

파드 개발자 입장에서의 추상화

  • 파드 개발자가 클러스터에서 스토리지를 사용할 때 인프라를 알아야 하는지..
  • 실제 네트워크 스토리지를 사용하려면 알아야 함.
  • 애플리케이션 배포하는 개발자가 스토리지 기술의 종류를 몰라도 상관없도록 하는 것이 이상적
  • 인프라 관련 처리는 클러스터 관리자의 유일한 도메인
  • pv와 pvc를 사용해 관리자와 사용자의 영역을 나눔


PersistentVolume(PV)과 PersistentVolumeClaim(PVC)

  • 인프라 세부 사항을 알지 못해도 클러스터의 스토리지를 사용할 수 있도록 제공해주는 리소스
  • 파드 안에 영구 볼륨을 사용하도록 하는 방법은 다소 복잡



PV, PVC의 장점 비교


  • getPersistentDisk를 사용할 때 사용자가 알아야 하는 부분


  • pv, pvc를 사용할 때 사용자가 알아야 하는 부분


PersistentVolume(PV)과 PersistentVolumeClaim(PVC) 정의


  • 두 가지 새로운 요소에 대해 정의: PVC

mongo-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mongodb-pvc # 클레임 사용 때 필요
spec:
  resources:
    requests:
      storage: 1Gi # 요청하는 스토리지 양
  accessModes:
    - ReadWriteOnce # 단일 클라이언트에 읽기 쓰기 지원
  storageClassName: "" # 동적 프로비저닝에서 사용

  • 두 가지 새로운 요소에 대해 정의: PV

(PV는 네임스페이스에 속하지 않음)

mongo-pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mongodb-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce # 하나의 파드만 읽기 쓰기 가능
    - ReadOnlyMany # 여러 개의 파드가 동시에 읽기 가능
  persistentVolumeReclaimPolicy: Retain
  gcePersistentDisk:
    pdName: mongodb
    fsType: ext4

Reclaiming설명
Retain (유지)PVC를 삭제하더라도 PV는 존재
Delete (삭제)외부 인프라의 연관된 스토리지 자산을 모두 제거
Recycle (재사용)rm -rf /thevolume/* 볼륨에 대한 기본 스크럽( )을 수행 하고 새 클레임에 대해 다시 사용할 수 있도록 함

mongodb.yaml

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: mongodb
  name: mongodb
spec:
  volumes:
    - name: mongodb-data
      gcePersistentDisk:
        pdName: mongodb
        fsType: ext4
  containers:
    - image: mongo
      name: mongodb
      volumeMounts:
        - mountPath: /data/db
          name: mongodb-data
      ports:
        - containerPort: 27017
          protocol: TCP
status: { }

변경

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: mongodb
  name: mongodb
spec:
  volumes:
    - name: mongodb-data
      persistentVolumeClaim:
        claimName: mongodb-pvc
  containers:
    - image: mongo
      name: mongodb
      volumeMounts:
        - mountPath: /data/db
          name: mongodb-data
      ports:
        - containerPort: 27017
          protocol: TCP
status: { }

imkunyoung@cloudshell:~/storage (k8s-inflearn)$ kubectl exec -it mongodb -- mongosh
Current Mongosh Log ID: 64eb962f10ddb58c777c4638
Connecting to:          mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.10.5
Using MongoDB:          7.0.0
Using Mongosh:          1.10.5

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

------
   The server generated these startup warnings when booting
   2023-08-27T18:25:02.984+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
   2023-08-27T18:25:04.561+00:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
   2023-08-27T18:25:04.562+00:00: vm.max_map_count is too low
------

test> use mystore
switched to db mystore
mystore> db.foo.find()
[
  {
    _id: ObjectId("64e24753d55cdec56609311f"),
    name: 'test',
    value: '1234'
  }
]





참고

PV 상태설명주요 특징 및 동작
AvailablePV가 클러스터에서 사용 가능한 상태입니다. 아무런 할당이나 연결이 없는 초기 상태입니다.클러스터에서 새로운 PVC에 할당될 준비가 되어 있는 상태
BoundPV가 PVC에 할당되어 연결된 상태입니다. 해당 PVC에서 사용되고 있습니다.PVC가 해당 PV와 성공적으로 연결되었음을 의미
Released이전에 할당된 PVC와의 연결이 끊어진 상태입니다. PV는 더 이상 PVC와 연결되지 않았습니다.새로운 PVC에 다시 할당되기 위해 대기하며, 데이터는 여전히 보존됩니다
FailedPV 생성 또는 연결 중 오류가 발생하여 PV가 사용 불가능한 상태입니다.PV 생성 오류, 외부 스토리지의 문제 등으로 인해 발생할 수 있음
TerminatingPV가 삭제 중인 상태입니다.PV를 삭제하는 동안 해당 상태로 유지되며, 완전히 삭제되면 해당 PV는 클러스터에서 사라짐
ReclaimingPV가 삭제되었지만, 외부 스토리지에서 볼륨을 정리하고 회수 중인 상태입니다.PV 삭제 후 스토리지의 데이터 정리 및 볼륨 회수 과정을 진행 중
ReleasedToFreePV의 reclaim 정책이 Retain으로 설정된 경우, PV가 이전 PVC와의 연결이 끊어진 상태입니다.기존 데이터가 여전히 유지되지만, 다른 클레임으로 재할당되지 않고 해당 상태로 유지됨
BoundToReleasedPV의 reclaim 정책이 Retain으로 설정된 경우, PV가 이전 PVC와의 연결이 끊어진 후 PVC와 동시에 삭제된 상태입니다.기존 데이터가 유지되지만 클러스터와의 연결이 완전히 끊어지고, 클러스터에서 완전히 삭제됨


Reclaim 정책설명
RetainPV가 삭제되더라도 외부 스토리지 리소스는 유지됩니다. 데이터는 삭제되지 않고 수동으로 회수 가능합니다.
DeletePV가 삭제되면 외부 스토리지 리소스도 함께 삭제됩니다. 데이터가 완전히 제거됩니다.
Recycle현재 사용되지 않는 PV 데이터를 삭제하고, 새 PVC 할당 시 PV 내부를 초기화하는 단순한 정책입니다. 사용 권장되지 않습니다.

0개의 댓글