쿠버네티스-Volume 기초 개념(EmptyDir, HostPath, PVC/PV)


쿠버네티스-Volume (EmptyDir, HostPath, PVC/PV)


K8s 에서 Volume 은 각 파드에 스토리지를 연결하여 전략적으로 구성 하는 기능 입니다.


EmptyDir

Pod 내에 서만 사용 할 수 있는 볼륨 영역 입니다. 해당 볼륨은 Pod 내에서 사용 할 수 있고 Pod 내의 컨테이너 간에는 공유가 가능 합니다.
다만 Pod가 삭제 되면 함께 삭제 되는 영역 이므로 주의 해야 합니다.


예시) emptry-dir 를 생성 하여 container1 과 container2 에 각각 /mount1,2 디렉토리로 마운트를 하여 해당 볼륨을 사용하도록 구성 

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-1
spec:
  containers:
  - name: container1
    image: test/init
    volumeMounts:
    - name: empty-dir
      mountPath: /mount1
  - name: container2
    image: test/init
    volumeMounts:
    - name: empty-dir
      mountPath: /mount2
  volumes:
  - name : empty-dir
    emptyDir: {}

HostPath

HosPath 볼륨은 단일 노드에서만 공유 되는 영역 입니다. Node Path 로 생성 되기 때문에 Pod 가 삭제 되어도
유지 할 수 있지만 다른 노드에는 공유 할 수 없습니다.

활용 : 각 노드 별로 설정 되어야하는 시스템 정보 혹은 환경 변수 설정시 활용


예시) node 에 /node_v 볼륨을 생성 하여 container 의 /mount1 디렉토리로 마운트 하여 사용

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-3
spec:
  nodeSelector:
    kubernetes.io/hostname: k8s-node1
  containers:
  - name: container
    image: test/init
    volumeMounts:
    - name: host-path
      mountPath: /mount1
  volumes:
  - name : host-path
    hostPath:
      path: /node-v
      type: DirectoryOrCreate

PVC(Persistent Volume Claim) / PV(Persistent Volume)

Pvc 와 Pv 는 외부 스토리지(Aws, Azure, nfs) 등을 사용 하여 K8s(Admin) 이 미리 외부 스토리지를 연결 및 구성을 하고

구성된 외부 스토리지 볼륨 내에서 할당 받아 사용 하는 볼륨 입니다. 그래서 Pvc는 유저 영역 Pv는 Admin 영역으로 나누어 관리 됩니다.

외부 스토리지를 사용 하기 때문에 노드별 공유가 가능 하고 데이터베이스 저장소 등에 활용이 가능합니다.


* PV

예시) 2G의 외부 스토리지를 생성 하여 PV 구성을 함.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-01
spec:
  capacity:
    storage: 2G
  accessModes:
  - ReadWriteOnce
  local:
    path: /node-v
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - {key: kubernetes.io/hostname, operator: In, values: [k8s-node1]}

---

* PVC

예시) 구성된 PV 볼륨 내에서 1G의 스토리지를 사용 하도록 구성 함.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-01
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1G
  storageClassName: ""

---

* POD

예시) 생성된 PVC 볼륨(pvc-01)을 POD 에 설정 하여 /mount1 디렉토리로 마운트 함.

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-1
spec:
  containers:
  - name: container
    image: test/init
    volumeMounts:
    - name: pvc-pv
      mountPath: /mount1
  volumes:
  - name : pvc-pv
    persistentVolumeClaim:
      claimName: pvc-01

Back to blog