새싹 하이브리드 클라우드/Kubernetes
Kubernetes - Storage
mingming_96
2023. 11. 23. 13:07
Volume
- 파드의 컨테이는 이미지로부터 파일 시스템을 제공받습니다. 그러나 파드가 종료되면 파드 내에 변경된 데이터는 더이상 사용할 수 없게됩니다.
- 쿠버네티스의 파드는 새로 생성된 데이터를 보존하기 위해 외부 저장소 볼륨을 생성하고, 이런 볼륨을 컨테이너에 마운트해 사용합니다.
- 기본적인 볼륨의 라이프사이클은 파드의 라이프사이클과 같아 파드가 생성되면 볼륨도 같이 생성되고, 파드가 삭제되면 볼륨도 같이 삭제됩니다.
- persistentVolume 및 PersistentVolumeClaim 을 사용해 파드의 라이프사이클과 다르게 따로 볼륨만의 사이클을 분리할 수 있습니다. 파드가 제거되고 다시 생성되더라도 기존 볼륨을 사용할 수 있게 됩니다.
Volume Type
1. emptyDir : 임시로 데이터를 저장하는 빈 볼륨
2. gitRepo : 내부적으로 emptyDir 기능을 이용하여, 초기에 Git 레포지토리의 내용을 채워서 제공하는 볼륨
3. hostPath : 쿠버네티스 클러스터 노드의 파일 시스템을 제공하는 볼륨
4. 네트워크 스토리지 볼륨 : cephfs, cinder, fs, flexVolume, flocker, nfs 등
5. 클라우드스토리지 볼륨 : awsEBS, azureDisk, azureFile
6. 특수 유형 볼륨 : configMap, secret
emtpyDir Volume
아무 데이터도 없는 빈 디렉터리를 제공해주는 볼륨입니다. 파드가 생성하는 데이터를 저장할 수 있으며 파드 내의 컨테이너 간에 데이터를 공유할 때 유용하게 사용할 수 있습니다.
emptyDir template
---
apiVersion: v1
kind: Pod
metadata:
name: empty-pod
label
vol: emptyDir
spec:
containers:
- name:
image:
volumeMounts:
- name: <VOL-NAME>
mountPath: <PATH>
volumes:
- name: <VOL-NAME>
emptyDir: {}
pod.spec.volumes. emptyDir
- emptyDir 타입의 볼륨 정의
- {} : 값을 비워두면 호스트의 로컬 디스크를 이용
pod.spec.containers.volumeMounts : 컨테이너 마운트 할 볼륨 선언
pod.spec.containers.volumeMounts.mountPath : 컨테이너 내의 마운트 포인트
gitRepo Volume
EmptyDir 볼륨에 지정한 Git Repogitory의 파일을 채워서 제공해주는 볼륨입니다.
gitRepo template
---
apiVersion: v1
kind: Pod
metadata:
name: gitRepo-pod
label
vol: gitRepo
spec:
containers:
- name:
image:
volumeMounts:
- name: <VOL-NAME>
mountPath: <PATH>
volumes:
- name: <VOL-NAME>
gitRepo:
repository: <GIT-REPO-URL>
revision: <BRANCH>
directory: <PATH>
pod.spec.volumes.gitRepo.repository : Git 저장소의 주소
pod.spec.volumes.gitRepo.revision : Git 저장소의 브랜치
pod.spec.volumes.gitRepo.directory : 저장소의 특정 경로 지정
hostPath Volume
파드가 동작하는 쿠버네티스 클러스터의 노드의 로컬 파일 시스템 및 파일 및 디렉터리를 파드가 사용할 수 있는 볼륨으로 제공해줍니다.
hostPath template
---
apiVersion: v1
kind: Pod
metadata:
name: hostPath-pod
label
vol: hostPath
spec:
containers:
- name:
image:
volumeMounts:
- name: <VOL-NAME>
mountPath: <PATH>
volumes:
- name: <VOL-NAME>
hostPath:
type: <TYPE>
path: <PATH>
pod.spec.volumes.hostPath.type : 볼륨의 종류 지정
- DirectoryOrCreate : 지정된 경로의 디렉터리 사용 ( 없으면 생성 )
- Directory: 지정된 경로의 디렉터리 사용 ( 해당 경로가 존재해야 합니다 )
- FileOrCreate : 지정된 경로의 파일 사용 ( 없으면 생성 )
- File : 지정된 경로의 UNIX 소켓 사용 ( 존재해야 합니다 )
pod.spec.volumes.hostPath.path : 공유할 볼륨의 호스트 경로 지정