쿠버네티스 PV·PVC 개념 및 설정

ZER0·2022년 11월 8일
1

Kubernetes

목록 보기
31/39
post-thumbnail

1. 개념

  • 영속성을 보장할 수 없는 파드에 데이터를 저장할 경우 언제든 데이터가 사라질 가능성 존재
  • 따라서 파드의 생명주기와 무관하게 저장이 유지되는 데이터 저장소가 필요한데 이런 요구사항을 만족하기 위한 개념이 PV(PersistentVolume)와 PVC(PersistentVolumeClaim)
  • PV : 데이터를 저장할 볼륨. 볼륨을 생성하고 이를 클러스터에 등록한 것
  • PVC : 필요한 저장 공간·RW모드 등 요청사항을 기술한 명세로서 PV에 전달하는 요청. PV와 바인딩을 하는 목적으로 사용

2. PV 생성

  • demo-pv라는 PV 생성
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    apiVersion: v1
     
    kind: PersistentVolume
     
    metadata:
      name: demo-pv
     
    spec:
      capacity:
        storage: 100Mi
      accessModes:
        - ReadWriteMany
      hostPath:
        path: "/pv/log"
      persistentVolumeReclaimPolicy: Retain
    cs
  • capacity : 볼륨 크기
  • accessModes : 볼륨 RW 모드
    • ReadWriteOnce : 하나의 노드에서만 RW 가능
    • ReadOnlyMany : 여러 노드에서 R 가능
    • ReadWriteMany : 여러 노드에서 RW 가능
  • persistentVolumeReclaimPolicy : PV 릴리즈(사용 종료) 시 볼륨에 저장된 데이터 삭제 옵션
    • Retain : PVC가 삭제되어도 PV(볼륨)의 데이터를 보존. 하지만 해당 PV를 다른 PVC가 사용하지 못하고, 재사용하기 위해서는 수동으로 PV를 반환해야 함
    • Delete : PVC가 삭제되면 PV(볼륨)의 데이터를 비롯해 PV(볼륨) 자체를 삭제
    • Recycle : PVC가 삭제되면 PV(볼륨)의 데이터만 삭제하고 볼륨 자체는 보존하여 곧바로 다른 PVC에 사용 가능. 하지만 현재는 deprecated되어 사용을 권하지 않음

3. PVC 생성

  • demo-pvc라는 PVC 생성
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: demo-pvc
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 50Mi
    cs
  • accessModes : 사용하고자 하는 PV의 accessModes와 동일한 옵션을 사용해야 bound 가능
  • requests : 사용을 원하는 볼륨의 요구조건을 명시
    • storage : 사용하고자 하는 최소한의 크기로서 명시한 용량보다 큰 PV도 상관 없음

4. PV, PVC 정보 확인

  • 목록 및 상태 확인 : kubectl get persistentvolume | persistentvolumeclaims
  • 세부정보 확인 : kubectl describe persistentvolume [PV_이름] | [PVC_이름]

5. 애플리케이션(파드, 디플로이먼트)에서 볼륨 또는 PVC 마운트

  • 볼륨 마운트
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    apiVersion: v1
     
    kind: Pod
     
    metadata:
      name: webapp
     
    spec:
      containers:
      - name: webapp
        image: nginx
        volumeMounts:
        - name: log-vol
          mountPath: "/log"
      volumes:
      - name: log-vol
        hostPath:
          path: "/var/log/webapp"
    cs
  • PVC 마운트
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    apiVersion: v1
     
    kind: Pod
     
    metadata:
      name: webapp
     
    spec:
      containers:
      - name: webapp
        image: nginx
        volumeMounts:
        - name: log-vol
          mountPath: "/log"
      volumes:
      - name: log-vol
        persistentVolumeClaim:
          claimName: demo-pvc
    cs

참고

  1. https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/
profile
Security Compliance Engineer

0개의 댓글