Storage
- Volume Types
- Ephemeral Volumes (일시 볼륨)
- emptyDir : 일시적인 데이터를 저장하는 데 사용되는 간단한 빈 디렉터리, 파드가 생성/삭제 될때 동시에 생성/삭제 되는 임시 볼륨이다. 파드내에서 컨테이너끼리 공유하는 공간으로 사용한다.
- configMap
- downwardAPI
- secret
- projected
- Persistent Volumes (영구 볼륨)
- cephfs
- csi
- fc(fibre channel)
- flexVolume
- flocker
- hostPath: 워커 노드의 파일 시스템을 파드의 디렉터리로 마운트하는데 사용
- iscsi
- local
- nfs
- PersistentVolumeClaim
- quobyte
- rbd
- scaleIO
- storageos
- 클라우드 제공자의 전용 스토리지를 마운트
- gcePersistentDisk(GCE Persistent Disk)
- awsElasticBlockStore(AWS EBS Volume)
- azureDist(MS Azure Disk Volume)
- 다른 유형의 네트워크 스토리지를 마운트
- cinder
- cephfs
- iscsi
- glusterfs
- quobyte
- rbd
- flexVolume
- vsphereVolume
- photonPersistentDisk
- 쿠버네티스 리소스나 클러스터 정보를 파드에 노출하는 데 사용되는 특별한 유형의 볼륨
- configMap
- secret
- downwardAP
- 사전에 혹은 동적으로 프로비저닝된 퍼시스턴트 스토리지를 사용하는 방법
- persistentVolumeClaim
- Ephemeral Volumes (일시 볼륨)
Ephemeral Volumes
emptyDir
파드내에서 컨테이너끼리 공유하는 공간으로 사용되며 파드가 삭제될때 함께 사라진다.
..........
spec:
containers:
- name: web-page
image: nginx
volumeMounts:
- mountPath: /usr/share/nginx/html
name: empty-directory \
- name: html-builder
image: alpine
volumeMounts:
- mountPath: /html-dir
name: empty-directory
volumes:
- name: empty-directory
emptyDir: {}
Persistent Volumes
hostPath
파드에서 마운트해서 사용하는 것은 emptyDir과 동일하지만,
emptyDir 볼륨이 같은 파드에서 공유할 수 있는 반면에 hostPath 볼륨은 다른 파드에서도 공유 가능합니다.
emptyDir 볼륨 데이터는 임시적이라 파드가 삭제되면 파드 볼륨내 데이터도 삭제되는데,
hostPath 볼륨 데이터는 해당 파드가 삭제되어도 hostPath 볼륨 데이터는 삭제되지 않아 다른 파드에서 계속 사용할 수 있습니다.
노드로 배포가 되는데, 노드가 호스트이다. 즉, 노드에 있는 디렉토리를 사용할 수 있다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-hostpath
labels:
app: deploy-hostpath
spec:
replicas: 3
selector:
matchLabels:
app: deploy-hostpath
template:
metadata:
labels:
app: deploy-hostpath
spec:
containers:
- name: host-mon
image: sysnet4admin/sleepy
volumeMounts:
- mountPath: /host-log
name: hostpath-directory
volumes:
- name: hostpath-directory
hostPath:
path: /var/log
nfs
네트워크 파일 시스템
spec:
containers:
- name: chk-log
image: sysnet4admin/chk-log
volumeMounts:
- name: nfs-vol
mountPath: /audit
volumes:
- name: nfs-vol
nfs:
server: 192.168.1.10
path: /nfs_shared/nfs-vol
Persistent Volumes 과 Persistent Volume Claim
Persistent Volumes
PV는 Volume 자체를 의미합니다.
매번 Pod 정의 파일에 Volume을 지정하면, 많은 포드를 배포할 때마다 각각의 Pod에 저장소를 구성해야 합니다.
변경 사항이 있을 때마다 모든 Pod에 수정 사항을 작성하는 대신, 중앙에서 관리하는 것이 더 효율적입니다.
Persistent Volume을 사용하여 큰 저장소 풀을 생성하고, 필요에 따라 각 Pod에서 이를 사용할 수 있도록 설정할 수 있습니다.
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-vol1
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 1Gi
hostPath:
path: /tmp/data
외부 클라우드 저장소를 사용하려면 다음과 같이 설정할 수 있다.
..........
spec:
..........
capacity:
storage: 1Gi
awsElasticBlockStore: // 위의 hostPath 위치에 아래와 같이 설정
volumeID: <volume-id>
fsType: ext4
Persistent Volume Claim
위와 같이 persistent volume 을 만들었다면 필요시 이 볼륨에 대한 요청을 하여야 합니다.
이 요청을 담당하는 것이 Persistent Volume Claim 으로 PersistentVolume PersistentVolumeClaim은 쌍으로 움직인다고 보시면 됩니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Mi
PV 와 PVC의 매칭
PV와 PVC가 accessModes 가 일치하고 PV의 storage용량이 충분하면 쿠버네티스에서는 자동으로 매칭해 줍니다. PVC는 하나의 PV와 연결이 되는데 용량외에도 ufficient Capacity, Access Modes, Volume Modes, Storage Class 등을 체크합니다.
수동으로 매칭
수동으로 PVC를 특정 PV를 사용하고 싶을때는 labels를 활용하면 됩니다.
kind: PersistentVolume
metadata:
labels:
name: my-pv
---
kind: PersistentVolumeClaim
spec:
selector:
matchLabels:
name: my-pv
Access Modes
접근모드
ReadWriteOnce
RWO. 볼륨은 읽기/쓰기 모드에서 단일 작업자 노드로 적용 가능, 하나의 워커 노드에 마운트되면 다른 노드는 마운트할 수 없음
ReadOnlyMany
ROX. 볼륨은 읽기 전용 모드로 여러 작업자 노드에 동시에 적용 가능 \
ReadWriteMany
RWX. 볼륨은 동시에 여러 작업자 노드에 읽기/쓰기 모드로 적용 가능
ReadWriteOncePod
RWOP. 하나의 Pod만 읽기/쓰기 모드로 적용 가능, Kubernetes 1.22+ 버전부터 지원
persistentVolumeReclaimPolicy
반환정책
Retain(보존)
PVC 삭제 시에도 PV 보존
Delete(삭제)
PVC 삭제 시에 PV를 함께 삭제
Recycle(재활용)
더이상 사용되지 않음
volumes 에서 PVC 호출
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