이야기박스
Kubernetes 6. Volume 본문
# 개요
Pod 내 Container 간의 Storage 공유 및 외부 Storage에 저장하는 방법
# Volume
Volume은 기본적으로 Pod에 종속적임
## Container와 Storage
* 각 Container는 각자의 filesystem 이용
* Container간의 Storage 공유가 없음
* Application에서 로그를 기록하더라도 LogRotator에서 이를 읽지 못하는 이슈 발생
## Volume 적용
* 리눅스를 이용하면 임의의 위치에 저장소 mount 가능
* 위 개념을 이용하여 동일 볼륨에 마운트하면 됨
* 파일 공유가 가능하기 때문에 서로 Sider-Container(?) 역할 수행이 가능
# Volume 사용
* 내부 Storage : hostPath, local, nfs
* 외부 Storage : gcePersistentDisk, awsElasticBlockStore, gitRepo (deprecated)
* 특수 목적 : projected (All-in-One Volume), configMap, secret, downwardAPI, serviceAccountToken
## emptyDir
pod와 lifecycle이 같음 --> pod 삭제 시 data도 소멸
* scratch space
* crash recovery를 위한 checkpoint 계산용
* container간 파일 송수신용
k8s에서는 Memory medium으로 사용하는 것을 권장 (가장 빠르고 쉽게 초기화 가능)
## gitRepo (deprecated)
emptyDir에 git repository를 clone하여 생성
git sync가 필요(?)
## hostPath (?)
host node의 file system에 있는 특정 file 또는 directory를 마운트
pod가 삭제되어도 data는 보존
특정 node의 file system에만 저장되므로 database에 부적합
* container에서 Docker 내부 접근이 필요한 경우
* container에서 cAdvisor를 사용하는 경우
## local (Local Persistent Volume)
hostPath와 다르게 local disk나 파티션을 pod로 마운트함
local을 사용하는 pod는 항상 같은 노드에서 동작하도록 보장
## gcePersistentDisk
GCE에 있는 Disk를 Volume으로 사용하는 것
pod가 제거되더라도 volume은 unmount 되는 것 뿐이라 데이터가 보존된다.
* pod 가 동작하는 모든 노드는 GCE VM에 있어야 함
* VM은 GCE Project와 같은 Zone에 있어야 함
Read-only로 마운트할 경우 동시에 다수의 컨슈머가 사용 가능하지만, read-write mode는 오직 한 컨슈머만이 가능
ReplicationController에 의해 관리되는 pod의 persistent disk 사용은 만약 read-only가 아니거나 replica count가 0 또는 1이 아니면 실패할 수 있음(?)
GCE Regional Persistent Disk 사용하면 같은 Region 내 2가지 zone에서 사용 가능(위 내용이랑 상반됨)
## awsElasticBlockStore
EBS Volume을 Pod에 마운트
* pod 노드는 EC2에 존재해야 함
* 인스턴스들은 같은 region & zone에 구성되어야 함
* Single EC2 Instance만 지원 (?)
## projected
몇몇 존재하고 있는 volume source들을 같은 directory로 매핑
지원 volume source 종류
* secret
* downardAPI
* configMap
* serviceAccountToken
모든 source는 같은 namespace pod로 존재
# Persistent Volume & Persistent Volume Chain
## PV
* cluster의 스토리지 일부
* 클러스터 노드와 같은 리소스
* 네임스페이스에 속하지 않음
* 파드와 독립적인 lifecycle가짐
## PVC
* storage에 대한 사용자의 요청
* PV resource 소비
* 특정 size나 access mode를 요청
## Lifecycle
* Provisioning : PV 할당
* Binding : PVC가 특정 모드로 PV에 바인딩
* Using : pod가 volume 사용
* Reclaiming : volume 사용 완료 후 상태 (retain, delete, recycle)
( 왜 recycle이 deprecated인지? --> Dynamic Provisioning 때문?)
# Storage Class
Dynamic Provisioning : PVC 설정에 맞는 PV 자동 생성
설정
* Reclaim Policy : Retain, Delete 제공
* Mount Options
* Volume Binding Mode
** Immediate : PVC가 만들어지는 도잇에 binding과 dynamic provisioning 발생
** WaitForFirstConsumer : PVC 사용하는 pod가 생성될 때까지 대기
'Computer & Data > Orchestration' 카테고리의 다른 글
Kubernetes 8. Accesing pod metadata and other resources from applications (0) | 2019.09.03 |
---|---|
Kubernetes 7. ConfigMap & Secret (0) | 2019.08.28 |
Kubernetes. Anthos (0) | 2019.07.31 |
Kubernetes 3. Pod (0) | 2019.05.18 |
Kubernetes 2. Docker (0) | 2019.05.06 |