이야기박스

Kubernetes 6. Volume 본문

Computer & Data/Orchestration

Kubernetes 6. Volume

박스님 2019. 8. 21. 14:57
반응형

# 개요

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