K8s는 다양한 유형의 볼륨을 지원하며, 볼륨 유형과 상관없이 파드내의 컨테이너가 재시작되어도 데이터는 보존된다.
임시(ephemeral) 볼륨 유형은 파드가 삭제되면 함께 삭제되지만, 퍼시스턴스(persistent) 볼륨은 삭제되지 않는다.
K8s Volume으로 사용할 스토리지 정의 → volumes 정의
volumes:
- name: test-volume
hostPath:
path: /data
컨테이너 별로 해당 volume 마운트 → volumeMounts 정의
volumeMounts:
- mountPath: /test-pd
name: test-volume
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: registry.k8s.io/test-webserver
name: test-container
volumeMounts:
- mountPath: /test-pd
name: test-volume
volumes:
- name: test-volume
hostPath:
# 호스트의 디렉터리 위치
path: /data
# 이 필드는 선택 사항이다
type: DirectoryhostPath 볼륨을 쓸 수 있도록 호스트의 파일 권한을 수정해야함.path : 볼륨 디렉터리 또는 파일 위치type : volume 타입을 정확히 명시
| 값 | 행동 |
|---|---|
| 빈 문자열 (기본값)은 이전 버전과의 호환성을 위한 것으로, hostPath 볼륨은 마운트 하기 전에 아무런 검사도 수행되지 않는다. | |
| DirectoryOrCreate | 만약 주어진 경로에 아무것도 없다면, 필요에 따라 Kubelet이 가지고 있는 동일한 그룹과 소유권, 권한을 0755로 설정한 빈 디렉터리를 생성한다. |
| Directory | 주어진 경로에 디렉터리가 있어야 함 |
| FileOrCreate | 만약 주어진 경로에 아무것도 없다면, 필요에 따라 Kubelet이 가지고 있는 동일한 그룹과 소유권, 권한을 0644로 설정한 빈 파일을 생성한다. |
| File | 주어진 경로에 파일이 있어야 함 |
| Socket | 주어진 경로에 UNIX 소캣이 있어야 함 |
| CharDevice | 주어진 경로에 문자 디바이스가 있어야 함 |
| BlockDevice | 주어진 경로에 블록 디바이스가 있어야 함 |
hostPath와 유사하나, 특정 노드에 할당될 수 있도록 nodeAffinity 를 사용하는 것이 다른 특징volumeBindingMode 을 WaitForFirstConsumer 으로 설정하여 사용하는 것을 권장한다. WaitForFirstConsumer 으로 설정하면 볼륨바인딩이 해당 volume을 사용한 파드가 생성된 후 실행되도록 연기되는데, 이를 통해 파드에 대한 constraints (such as node resource requirements, node selectors, Pod affinity, and Pod anti-affinity… )가 고려된 후 PVC 바인딩이 실행된다.emptyDir 의 데이터가 영구적으로 삭제되는 반면, 컨테이너가 크래시되는 경우는 노드에서 파드를 제거하지 않는 이상 제거되지 않는다.emptyDir 와는 다르게, nfs 볼륨의 내용은 유지되고 볼륨은 그저 마운트 해제만 됨.volumeBindingMode : 볼륨이 언제 바운딩 될지 시기를 설정하는 옵션.Immediate : 디폴트 값으로, PVC가 생성되는 즉시 바인딩. PV가 바인딩 된 후 해당 노드에서 pod를 스케줄링 할 수 없다면, pod가 스케줄링되지 못함. 즉 unschedulable Pod를 만든다. 예를 들어 node A의 local 디스크를 사용하는 volume이 미리 바인딩되어있는데, 알고보니 해당 pod는 node B에 무조건 할당되어야하는 파드여서 파드가 생성되지 못하는 상황이 발생WaitForFirstConsumer : PVC를 사용할 파드가 생성될때까지 바인딩을 지연. 이를 통해 unschedulable Pod만들어지는 것을 막을 수 있으며, WaitForFirstConsumer를 사용하는 것이 권장됨provisioner : PV(볼륨)를 생성할 스토리지 종류. AWSElasticBlockStore, AzureFile 등 다양한 프로비저너가 존재parameters : provisioner가 동적으로 볼륨을 생성할 때 필요한 옵션PersistentVolume 오브젝트를 생성하는 것. → 즉 관리자가 직접 프로비저닝.