쿠버네티스의 파드도 컨테이너와 마찬가지로 삭제/생성을 반복하므로 데이터를 별도 볼륨에 저장할 필요가 있다.
1. Volumes & Mounts
- 가장 간단하게 호스트 디렉터리를 마운트하는 방법
spec:
containers:
- image: alpine
name: alpine
volumeMounts:
- mountPath: /opt
name: data-volume
volumes:
- name: data-volume
hostPath:
path: /data
type: Directory
위와 같은 방법으로는 여러 노드의 클러스터 구성에서 사용이 불가능하다. 각 호스트마다 데이터가 공유되지 않기 떄문이다. 실제 클러스터 환경에서 운영하려면 스토리지 솔루션을 사용해야 한다.
- NFS
- GlusterFS
- AWS EBS
volumes:
- name: data-volume
awsElasticBlockStore:
volumeID: <volume-id>
fsType: ext4
2. Persistent Volumes
볼륨을 파드 정의 문서로 매번 관리하다 보면 스토리지 솔루션이 변경될 때마다 모든 문서를 변경해야 하는 문제가 발생한다. Persistent Volume은 Volume을 중앙에서 클러스터 풀 형태로 관리할 수 있게 해준다.
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-vol1
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 1Gi
awsElasticBlockStore:
volumeID: <volume-id>
fsType: ext4
3. Persistent Volume Claims
관리자가 PV를 생성하면 사용자는 PVC를 생성하여 사용할 볼륨을 요청한다. 각 PVC는 하나의 PV에 바인딩 될 수 있다. 쿠버네티스는 PVC의 볼륨 사이즈와 옵션값에 맞는 PV를 찾아 바인딩 해준다. 만약 PVC에 비해 큰 PV만 남아있다면 매칭될 수 있다. PV와 PVC는 1대1 관계이므로 PV 사이즈가 커서 PVC에 할당하고 남더라도 다른 PVC가 추가 할당 될 수 없다. 할당할 수 있는 PV가 없으면 PVC는 pending 상태가 된다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Mi
생성된 pvc를 확인하거나 삭제할 수 있고 삭제 시 옵션은 몇 가지가 있다. 기본값은 Retain이며 PVC는 삭제해도 PV는 남아서 관리자가 직접 삭제해야 한다.
- persistentVolumeReclaimPolicy
- Retain : PVC만 삭제
- Delete : PVC를 삭제하면 PV도 같이 자동 삭제
- Recycle : PV 내 데이터만 삭제 후 다시 PVC에 할당 가능한 상태로 변환
- 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
4. Storage Class
PV 정의문서를 보면 알 수 있듯이 PV를 생성하기 전에 먼저 볼륨을 사용할 수 있게 생성해야 한다. PV 생성 시에 필요한 볼륨을 자동으로 생성하게 한다면 편리할 것이다. 이것이 Storage Class이다. 일반적으로 클라우드 벤더들이 제공하는 스토리지 서비스가 스토리지 타입, 복제 지원 여부 등으로 등급을 나눠서 제공하는데 이 등급별로 미리 정의 해놓은 다음 PVC를 생성할 때 사용하는 것이다.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: silver
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
replication-type: none
'Kubernetes' 카테고리의 다른 글
[Kubernetes] Namespace (0) | 2021.02.21 |
---|---|
[Kubernetes] Authentication (0) | 2021.02.01 |
[Kubernetes] Network Policy (0) | 2021.01.19 |
[Kubernetes] 권한 관리(RBAC) (0) | 2020.12.30 |
[Kubernetes] 백업, 복구 (0) | 2020.12.23 |