본문으로 건너뛰기

볼륨(Volume)


정보

도커 스토리지, 도커 볼륨에 대한 사전 지식이 필요하다. 없다면 도커 스토리지, 도커 볼륨 글 참조

Volume

개념

  • 쿠버네티스에서의 Pod 또한 도커에서의 컨테이너와 마찬가지로 Container Layer에서 수정, 생성된 데이터는 Pod가 삭제될 경우 같이 삭제된다.
  • 이를 해결해기 위해서 PodVolume을 연결한다.

hostPath

apiVersion: v1
kind: Pod
metadata:
name: random-number-generator
spec:
containers:
- name: random-number
image: busybox
command: ["sh", "-c", "echo $RANDOM > /opt/number.out"]
volumeMounts:
- name: data-volume
mountPath: /opt
volumes:
- name: data-volume
hostPath:
path: /data
type: DirectoryOrCreate
  • Pod는 어떠한 랜덤한 숫자를 /opt/number.out에 저장한다.
  • Volume을 연결하지 않을 경우, Pod가 삭제됨과 동시에 이 랜덤한 숫자 또한 사라진다.
  • volumes
    • hostPath: Pod가 실행되는 노드의 디렉토리를 볼륨으로 사용 (권장 X)
      • path: 볼륨으로 사용할 노드의 디렉토리
      • type: 볼륨의 타입 (DirectoryOrCreate의 경우 해당 디렉토리가 없을 경우 생성하는 옵션)
  • volumeMounts
    • name: 연결할 볼륨 이름을 작성
    • mountPath: 연결할 컨테이너 내부의 디렉토리 위치
  • hostPath는 권장되지 않는다. 왜냐하면, Pod가 어떤 노드에서 실행될지 보장되지 않으며, 각 노드의 해당 디렉토리는 실제로 서로 다른 디렉토리이기 때문이다.

외부 Volume Storage

apiVersion: v1
kind: Pod
metadata:
name: random-number-generator
spec:
containers:
- name: random-number
image: busybox
command: ["sh", "-c", "echo $RANDOM > /opt/number.out"]
volumeMounts:
- name: data-volume
mountPath: /opt
volumes:
- name: data-volume
awsElasticBlockStore:
volumeID: <volume-id>
fsType: ext4
  • hostPath의 문제점을 해결하기 위해서 쿠버네티스는 다양한 스토리지 타입을 지원한다.
  • 네트워크/클러스터 스토리지
    • NFS, GlusterFS, CephFS
  • 퍼블릭 클라우드 스토리지
    • AWS EBS
    • Azure Disk / Azure File
    • Google Persistent DIsk

레퍼런스