볼륨
볼륨 (Volumes)
컨테이너의 디스크에 있는 파일은 일시적이에요 — 컨테이너가 충돌하면 kubelet이 컨테이너를 다시 시작하지만, 그 과정에서 컨테이너에 기록된 파일은 손실됩니다. 또 컨테이너가 다시 시작될 때는 새로 시작된 컨테이너가 이전 컨테이너가 기록한 파일을 알지 못합니다. 컨테이너를 복제하면 파일을 공유하지 못합니다.
출처: 문서
본문
쿠버네티스에서 볼륨은 파드가 가진 디렉터리로, 파드의 각 컨테이너가 접근할 수 있습니다. 이 다양한 접근 방식은 파일을 보존하거나(files), 컨테이너 간 파일 공유를 허용하고, 애플리케이션을 이식 가능하게 만듭니다. 컨테이너 안에 파일을 저장하는 대신 쿠버네티스 볼륨을 사용하면, 파드가 다시 시작되거나 새 컨테이너가 시작될 때 데이터를 보존할 수 있습니다.
파드 내 볼륨은 컨테이너 안에 있는 파일보다 우선합니다. 파드가 시작되고 컨텍스트가 다시 시작되면 파드 내 볼륨은 사라지지 않습니다. 파드가 삭제되어도 볼륨은 유지됩니다. 볼륨의 수명은 파드와 같습니다. 즉 파드가 계속 존재하는 한 볼륨도 존재합니다. 파드가 사라지면 볼륨도 함께 사라집니다. 파드 수명 동안 파드는 원하는 만큼 볼륨을 사용할 수 있지만, 하나 이상의 볼륨이 필요할 수도 있고, 아닐 수도 있습니다.
쿠버네티스 볼륨의 핵심 동작은 노드, 클러스터, 또는 클라우드 공급자에 관계없이 데이터를 보존하는 것입니다. 여러 storage provider에 대한 더 전문적인 지식이 필요하거나 클러스터 전체에 걸쳐 페르시스턴스(persistence)를 보장해야 한다면 PersistentVolumes를 사용하세요.
쿠버네티스는 파드 안의 컨테이너에 여러 유형의 볼륨을 지원합니다. 볼륨 유형은 다음과 같습니다:
awsElasticBlockStore
awsElasticBlockStore 볼륨은 스토리지 볼륨을 파드에 마운트하는 데 사용됩니다. 이 볼륨은 클러스터의 파드가 삭제되거나 다시 스케줄링되면 마운트 해제되기 전에 기존 EBS 볼륨을 인식합니다. 그 볼륨의 데이터가 보존됩니다.
쿠버네티스가 여러 노드에 있는 파드를 마운트하는 데 사용하는 EBS 볼륨인 awsElasticBlockStore에 대한 지침을 따라야 합니다. 이는 EBS 볼륨이 단일 파드에서만 마운트될 수 있기 때문입니다. 노드가 EBS 볼륨을 마운트할 수 없다면(예: 리전 가용성, IAM 정책 등) 그 볼륨을 테스트할 수 없습니다.
azureDisk
azureDisk 볼륨 유형은 Microsoft Azure Data Disk를 파드에 마운트합니다.
azureFile
azureFile 볼륨 유형은 Microsoft Azure File(smb share)를 파드에 마운트합니다.
cephfs
cephfs 볼륨을 사용하면 기존 CephFS 볼륨을 파드에 마운트할 수 있습니다. 파드가 종료될 때 볼륨과 pod가 시작될 때의 내용물이 그대로 보존됩니다. CephFS 볼륨은 여러 작성자가 동시에 마운트할 수 있습니니다.
시작하기 전에 Ceph 서버가 실행 중이고 공유(share)가 내보내기(exported)되어 있는지 확인하세요.
cinder
cinder 볼륨 유형은 OpenStack Cinder 볼륨을 파드에 마운트하는 데 사용됩니다. cinder 볼륨은 오래된 것으로, 해당 기능은 cinder-csi-driver로 옮겨졌습니다.
configMap
configMap는 구성 데이터를 파드에 주입하는 방법을 제공합니다. configMap에 저장된 데이터는 configMap 유형의 볼륨에서 참조된 다음 파드에서 실행되는 컨테이너에 사용될 수 있습니다.
csi
CSI가 StorageClass 확장 인터페이스를 구현한 볼륨입니다. 이 볼륨 유형은 오래된 여러 볼륨 유형에서와 같은 방식으로 동작하도록 설계되었습니다. 외부 CSI 드라이버와 협력하여 볼륨을 마운트·언마운트, 노출, 스냅샷 사용을 통해 파드 간 CSI 볼륨을 사용할 수 있습니다.
downwardAPI
downwardAPI 볼륨은 애플리케이션에 downward API 데이터를 사용할 수 있게 해줍니다. 보통 환경 변수가 파일로 쓰여 파드 필드를 소비하는 데 사용합니다.
emptyDir
emptyDir 볼륨은 파드이 노드에 할당될 때 처음 만들어집니다. 파드가 실행되는 동안 볼륨이 항상 존재합니다. 이름에서 알 수 있듯이 emptyDir 볼륨은 처음에 비어 있습니다. 파드 안의 모든 컨테이너는 emptyDir 볼륨에 동일한 파일을 읽고 쓸 수 있습니다(모든 컨테이너가 파드에 동일한 볼륨에 마운트할 수 있음). 파드가 어떤 이유로든 제거되면 emptyDir 볼륨의 데이터는 영구적으로 삭제됩니다.
emptyDir 볼륨의 마운트는 크기 제한이 없습니다. emptyDir 볼륨의 큰 페이지 파일은 메모리 합성을 위해 페이지를 스왑할 수 있습니다. 기본적으로 emptyDir 볼륨은 컨테이너에 사용 가능한 스토리지로 어떤 상한도 없이 configurable size limit을 지정할 수 있습니다.
fc
fc 볼륨 유형을 사용하면 기존 파이버 채널(fibre channel) 블록 스토리지 볼륨을 파드에 마운트할 수 있습니다. 파드가 종료될 때 볼륨과 파드가 시작될 때의 내용물은 그대로 보존됩니다.
gcePersistentDisk
gcePersistentDisk 볼륨은 Google Compute Engine(GCE) 영구 디스크(persistent disk)를 파드에 마운트합니다. 파드가 종료될 때 볼륨과 파드가 시작될 때의 내용물은 그대로 보존됩니다.
연결된 디스크를 사용하는 (read-only 또는 read-write) 파드가 이 디스크를 동시에 사용할 수 없듯이, GCE 영구 디스크의 사용은 필요에 따라 노드를 제한합니다. read-only 디스크를 사용하는 파드가 그 디스크에 마운트할 파일시스템(filesystem)을 사용할 만큼 여러 주체가 사용할 수 있습니다.
glusterfs
glusterfs 볼륨 유형을 사용하면 기존 GlusterFS 볼륨을 파드에 마운트할 수 있습니다. 파드가 종료될 때 볼륨과 파드가 시작될 때의 내용물은 그대로 보존됩니다.
hostPath
hostPath 볼륨은 노드의 파일시스템의 file 또는 directory를 파드에 마운트합니다.
hostPath 볼륨은 많은 것에 유용하지만, 여기에는 다음이 포함됩니다:
- Docker 스토리지 드라이버와 같은 /var/lib/docker로 실행되는 컨테이너 런타임을 파드에서 사용하려는 경우
- 클러스터에서 돌아가는 cAdvisor와 같은 시스템 에이전트를 실행하고 싶은 경우
hostPath 볼륨은 PersistentVolume에 유시게 저장할 수 없습니다. hostPath 볼륨은 대부분 PersistentVolume을 필요로 하는 것이 아니라 컨테이너에서 사용할 수 있는 인터페이스(다른 파드에서 사용)를 제공하기 때문에 유지할 수 없습니다.
iscsi
iscsi 볼륨 유형을 사용하면 기존 iSCSI 블록 스토리지 볼륨을 파드에 마운트할 수 있습니다. 파드가 종료될 때 볼륨과 파드가 시작될 때의 내용물은 그대로 보존됩니다.
RFC 7143에 기반한 iSCSI 볼륨 설계는 쿠버네티스 코어의 매니지드 파이버 채널을 지원하고 CHAP 인증을 제공합니다.
local
local 볼륨 유형은 로컬 디스크(storage) 장치(디스크, 파티션, 또는 디렉터리)를 파드에 마운트합니다.
로컬 볼륨은 PersistentVolume을 만들 때 사용할 수 있습니다. local 볼륨은 Static으로만 사용할 수 있습니다.
nfs
nfs 볼륨 유형을 사용하면 기존 NFS(Network File System) 공유를 파드에 마운트할 수 있습니다. 파드가 종료될 때 볼륨과 파드가 시작될 때의 내용물은 그대로 보존됩니다. NFS 볼륨은 여러 작성자가 동시에 마운트할 수 있습니다.
pvc
pvc(PersistentVolumeClaim) 볼륨 유형은 PersistentVolume을 파드로 마운트하는 데 사용됩니다. PersistentVolumeClaim은 PersistentVolume과 동일한 라벨 선택자를 사용하고 스토리지 볼륨 유형에 관계없이 파드에 볼륨을 제공하는 방법입니다.
portworxVolume
portworxVolume는 파드의 이식성(portability)을 위해 Portworx에서 제공하는 클라우드 스토리지 볼륨입니다.
projected
projected 볼륨 유형은 여러 기존 볼륨 소스를 같은 디렉터리로 프로젝션(project)합니다.
rbd
rbd 볼륨 유형을 사용하면 Rados Block Device를 파드에 마운트할 수 있습니다. 파드가 종료될 때 볼륨과 파드가 시작될 때의 내용물은 그대로 보존됩니다.
secret
secret 볼륨은 하나 이상의 비밀(secret)을 파드에 주입하기 위한 볼륨 유형입니다. 볼륨에 저장된 비밀을 참조한 뒤 파드에서 실행되는 컨테이너에 사용할 수 있습니다.
vsphereVolume
vsphereVolume 볼륨 유형을 사용하면 vSphere VMDK 볼륨을 파드에 마운트할 수 있습니다. 이것은 pod-specification의 backed volume을 채습니다. 파드가 종료될 때 볼륨과 파드가 시작될 때의 내용물은 그대로 보존됩니다.
더 알아보기 (Learn more)
- Persistent Volumes에 대해 알아보세요.
- 동적 볼륨 프로비저닝에 대해 알아보세요.
- 영구 볼륨 클레임에 대해 알아보세요.