Volume

dongbin_Shin·2022년 11월 15일
0

kubernetes

목록 보기
6/16

emptyDir

  • pod내의 container끼리 데이터를 공유하기 위한 volume
  • pod내에 생성되기 때문에 pod 삭제시 함께 삭제됨 → 일시적으로 사용하는 데이터만 저장
apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-1
spec:
  containers:
  - name: con-1
    image: something
    volumeMounts:
    - name: empty-dir # empty-dir로 mount
      mountPath: /mount1
  - name: con-2
    image: something
    volumeMounts:
    - name: empty-dir # empty-dir로 mount
      mountPath: /mount2
  volumes:
  - name: empty-dir # empty-dir
    emptyDir: {}

hostPath

  • node의 path를 volume으로써 사용
  • pod가 삭제되더라도 데이터는 유지
  • 주의 사항
    • pod 재생성시 기존 node가 아닌 다른 Node에 생성될 수 있음
      • 기존 volume에 mount 불가
      • 리눅스 시스템의 mount 기능을 이용해 pod가 만들어 질 때마다 해당 Node에 volume을 생성한 후 각 node의 volume끼리 mount 가능하지만 권장하지 않음
  • 각 node마다 해당 node를 위해 사용되는 파일(시스템 파일, 설정 파일)들을 pod들이 이와 같은 host의 데이터를 참조해야 할 때 사용
apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-2
spec:
  containers:
  - name: container
    image: somethig
    volumeMounts:
    - name: host-path
      mountPath: /mount1
  volumes:
  - name: host-path
    hostPath:
      path: /node-v
      type: DirectoryOrCreate

PVC/PV

  • git, AWS와 같이 원격 volume을 사용할 경우 연결
  • volume에 따라 pv 구성이 다름
    • volume과 직접 연결하는 pv, pv와 연결하는 pvc로 나누어 구성이 됨
  • pvc의 spec을 만족하는 pv와 연결됨
    • accessMode가 같고, pvc의 resource 이상인 pv와 연결
# PV
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-1
spec:
  capacity:
    storage: 1G
    accessModes:
      - ReadWriteOnce
  gitRepo:
    repository: github.com/xxx
    revision: master
    directory: .
# PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-1
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1G
  storageClassName: ""
# Pod
apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-3
spec:
  containers:
  - name: container
    image: something
    volumeMounts:
    - name: pvc-pv
      mountPath: /volume
  volumes:
  - name: pvc-pv
    persistentVolumeClaim:
      claimName: pvc-1

Dynamic Provisioning

  • PVC를 만들면 StorageClass를 사용해 자동으로 PV를 생성
  • 별도로 PV를 생성하고 PVC를 맞추어야 하는 등의 번거로움을 없앰
  • 지원해주는 솔루션을 설치하면 StorageClass, Service, Pod 등 오브젝트를 생성함
  • PVC의 StorageClassName
    • “”: localVolume과 연결된 적절한 PV와 연결
    • “{StorageClass의 이름}”: 해당 StorageClass와 연결
    • 명시 x: default StorageClass와 연결

PV Status & ReclaimPolicy

  • PV Status
    • Available: PV 생성 후 연결되지 않았을 때
    • Bound: PVC와 연결이 되었을 때 → Pod가 PVC와 연결이 되어 실제 사용할 때 volume이 생성되고 PV와 연결됨
    • Released: PV가 Volume과 연결된 상태에서 PVC와 연결이 끊어졌을 때
    • Failed: PV와 volume의 연결이 끊어졌을 때
  • ReclaimPolicy: PV가 Released 상태일 때 정책
    • Retain
      • 데이터 보존
      • PV 재사용 불가
      • Default
    • Delete
      • volume에 따라 데이터 삭제
      • PV 재사용 불가
      • StorageClass 사용시 Default
    • Recycle (deprecated)
      • 데이터 삭제
      • 재사용 가능
profile
멋있는 백엔드 개발자

0개의 댓글