볼륨(Volume)
Volumes
On-disk files in a container are ephemeral, which presents some problems for non-trivial applications when running in containers. One problem is the loss of files when a container crashes. The kubelet restarts the container but with a clean state. A second
kubernetes.io
- 컨테이너는 Pod에 바인딩 되는 볼륨을 마운트하고 마치 로컬 파일시스템에 있는 것처럼 스토리지에 접근한다.
| 임시 볼륨 | 로컬불륨 | 네트워크볼륨 | 네트워크볼륨 (클라우드 종속적) |
|
| 목적 | 컨테이너와 데이터공유 목적 | Node기반의 데이터공유 목적 |
클러스터 외부에 있는 자원과의 데이터공유 목적 | |
| 종류 | emptyDir |
hostpath local |
iSCSI NFS cephFS glusterFS ... |
gcePersistentDisk awsEBS azureFile ... |
emptyDir
- 하나의 포드안에서 두개이상의 컨테이너가 데이터를 공유
- Pod와 생명주기를 같이한다.

kubernetes.io/docs/concepts/storage/volumes/#emptydir
Volumes
On-disk files in a container are ephemeral, which presents some problems for non-trivial applications when running in containers. One problem is the loss of files when a container crashes. The kubelet restarts the container but with a clean state. A second
kubernetes.io
emptyDir 테스트
apiVersion: v1
kind: Pod
metadata:
name: web-empty
spec:
containers:
- image: nginx
name: web
ports:
- containerPort: 80
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
- image: redis
name: redis
ports:
- containerPort: 80
volumeMounts:
- name: html
mountPath: /usr/share/
volumes:
- name: html
emptyDir: {}
- container web(/usr/share/nginx/html) container redis(/usr/share/)가 mount 된다.
hostPath

hostPath 테스트
apiVersion: v1
kind: Pod
metadata:
labels:
run: web
name: web
spec:
volumes:
- name: html
hostPath:
path: /webdata
containers:
- image: nginx
name: web
ports:
- containerPort: 80
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
- Node의 /webdata 패스와 pod의 /usr/share/nginx/html mount
NFS

apiVersion: v1
kind: Pod
metadata:
name: web-nfs
spec:
containers:
- image: nginx
name: web
ports:
- containerPort: 80
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
volumes:
- name: html
nfs:
name: 10.2.3.22
path: /shared/nfs
GCE 영구 디스크를 동일한 리전에 생성
- # gcloud compute disks create --size=10GiB --zone=asia-northeast1-c mongodb
PV(PersistentVolume) & PVC(PersistentVolumeClaim)

- 스토리지 관리자가 storage Pool(PV)를 등록하고 애플리케이선 운영자가 PVC를 통해서 스토리지를 요청하는 구조
- 애플리케이션 운영자가 애플리케이션의 구동에 필요한 스토리지 스펙을 PVC를 가지고 K8s에 요청
- 애플리케이션 운영자와 스토리지 관리자의 역할을 분리시킬 수 있는 이점이 있다.
PV(PersistentVolume)
- 관리자가 프로비저닝하거나 스토리지 클래스를 사용하여 동적으로 프로비저닝한 클러스터의 스토리지이다
- 볼륨 자체를 뜻하며 클러스터 안에서 자원으로 다룸
- Pod와는 별도로 관리되는 생명주기가 있음
- kubernetes.io/ko/docs/concepts/storage/persistent-volumes/
퍼시스턴트 볼륨
이 페이지에서는 쿠버네티스의 퍼시스턴트 볼륨 에 대해 설명한다. 볼륨에 대해 익숙해지는 것을 추천한다. 소개 스토리지 관리는 컴퓨트 인스턴스 관리와는 별개의 문제다. 퍼시스턴트볼륨 서
kubernetes.io
PV & PVC yaml
---
# PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0003
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: slow
nfs:
path: /tmp
server: 172.17.0.2
---
# PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 8Gi
storageClassName: slow
selector:
matchLabels:
release: "stable"
matchExpressions:
- {key: environment, operator: In, values: [dev]}
---
# POD
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: myfrontend
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim:
claimName: myclaim
PVC(PersistentVolumeClaim)
- 퍼시스턴트볼륨클레임 (PVC)은 사용자의 스토리지에 대한 요청이다

GCE PV & PVC 테스트
apiVersion: v1
kind: Pod
metadata:
name: mongodb
spec:
containers:
- image: mongo
name: mongodb
volumeMounts:
- mountPath: /data/db
name: mongodb
volumes:
- name: mongodb
persistentVolumeClaim:
claimName: mongo-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongo-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: ""
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongo-pv
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
- ReadOnlyMany
persistentVolumeReclaimPolicy: Retain
gcePersistentDisk:
pdName: mongodb
fsType: ext4
---
Storage classes
kubernetes.io/docs/concepts/storage/storage-classes/#gce-pd
Storage Classes
This document describes the concept of a StorageClass in Kubernetes. Familiarity with volumes and persistent volumes is suggested. Introduction A StorageClass provides a way for administrators to describe the "classes" of storage they offer. Different clas
kubernetes.io
- PV를 직접 만드는 대신 사용자가 원하는 PV 유형을 선택하도록 오브젝트 정의
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: storage
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
fstype: ext4
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongo-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: storage
---
apiVersion: v1
kind: Pod
metadata:
name: mongodb
spec:
containers:
- image: mongo
name: mongodb
volumeMounts:
- mountPath: /data/db
name: mongodb
volumes:
- name: mongodb
persistentVolumeClaim:
claimName: mongo-pvc
---

- # kubectl get sc

- # kubectl get pv
- #kubectl edit pv pvc-4a87cccb-70b6-46c2-a6be-4497c3c3ffd0
- 정책변경가능
'클라우드 > K8s' 카테고리의 다른 글
| K8s 오토스케일링 (0) | 2022.04.03 |
|---|---|
| K8s DNS (0) | 2022.04.03 |
| K8s 인증과 권한관리 (0) | 2022.04.03 |
| Pod 스케줄링 (0) | 2022.04.03 |
| K8s Secret (0) | 2022.03.31 |