볼륨(Volume)
Volume
개념
- 쿠버네티스에서의
Pod또한 도커에서의 컨테이너와 마찬가지로 Container Layer에서 수정, 생성된 데이터는Pod가 삭제될 경우 같이 삭제된다. - 이를 해결해기 위해서
Pod에Volume을 연결한다.
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가 삭제됨과 동시에 이 랜덤한 숫자 또한 사라진다.volumeshostPath:Pod가 실행되는 노드의 디렉토리를 볼륨으로 사용 (권장 X)path: 볼륨으로 사용할 노드의 디렉토리type: 볼륨의 타입 (DirectoryOrCreate의 경우 해당 디렉토리가 없을 경우 생성하는 옵션)
volumeMountsname: 연결할 볼륨 이름을 작성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
레퍼런스
- https://kubernetes.io/docs/concepts/storage/volumes/
- https://kubernetes.io/docs/tasks/configure-pod-container/configure-volume-storage/
- https://unofficial-kubernetes.readthedocs.io/en/latest/concepts/storage/volumes/
- https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#volume-v1-core
- Udemy - Certified Kubernetes Administrator (CKA) with Practice Tests (Mumshad)