쿠버네티스의 볼륨은 Pod의 컴포넌트이므로 컨테이너와 마찬가지로 Pod의 스펙에 정의
볼륨은 독립적인 쿠버네티스 오브젝트가 아니며 스스로 생성하거나 삭제할 수 없다.
ㅁ 사용 가능한 볼륨 유형
- emptyDir: 일시적인 데이터를 저장하는 데 사용되는 비어있는 다순한 디렉터리
- hostPath: 워커노드의 파일 시스템에서 Pod로 디렉터리를 마운트하는 데 사용
- gitRepo: Git 스토리지의 내용을 체크아웃해 초기화된 볼륨
- nfs: Pod에 마운트된 NFS 공유
- gcePersistentDisk(구글 컴퓨트 엔진 영구 디스크), awsElastic-BlockStore(AWS EBS), azureDisk(마이크로소프트 애저 디스크 볼륨): 클라우드 제공자에 따라 전용 스토리지를 마운트하는데 사용
- cinder, cephfs, iscsi, flocker, glusterfs, quobyte, rbd, flexVolume, vsphere-Volume, photonPersistenDisk, scaleIO: 다른 유형의 네트워크 스토리지를 마운트하는 데 사용
- configMap, secret, downardAPI: 특정 쿠버네티스 리소스 및 클러스터 정보를 Pod에 노출하는 데 사용되는 특수한 유형의 보륨
- persistentVolumeClaim: 사전 또는 동적으로 프로비저닝된 영구 스토리지를 사용하는 방법
ㅁ emptyDir 볼륨 사용하기
- emptyDir 볼륨은 빈디렉터리로 시작
- Pod 내부에서 실행 중인 애플리케이션은 필요한 모든 파일을 작성할 수 있다.
- 볼륨의 수명이 포드와 연관되어 있기 때문에 포드를 삭제하면 볼륨의 내용이 손실
- emptyDir 볼륨은 동일한 Pod에서 실행 중인 컨테이너 간에 파일을 공유할 때 특히 유용
- 사용 가능한 메모리에 맞지 않는 대규모 데이터 세트를 정렬할 때 처럼 단일 컨테이너가 임시로 디스크에 데이터를 기록해야 하는 경우에도 사용 가능.
[동일한 볼륨을 공유하는 두 개의 컨테이너가 있는 Pod 생성]
apiVersion: v1
kind: Pod
metadata:
name: fortune
spec:
containers:
- image: luksa/fortune #첫번째 이미지는 html-generator
name: html-generator
volumeMounts: #html이라는 볼륨이 컨테이너의 /var/htdocs에 마운트
- name: html
mountPath: /var/htdocs
- image: nginx:alpine # 두번째 컨테이너는 웹 서버라고 하며 nginx:alpine 이미지를 실행
name: web-server
volumeMounts: # 위와 동일한 볼륨이 /usr/share/nginx/html에 읽기 전용으로 마운트
- name: html
mounthPath: /usr/share/nginx/html
readOnly: true
ports:
- containerPort: 80
protocol: TCP
volumes: # 위의 두 컨테이너에 마운트된 html이라는 단일 emptyDir 볼륨
- name: html
emptyDir: {}
ㅁ Git 스토리지를 볼륨의 시작점으로 사용
gitRepo 볼륨은 기본적으로 a를 복제하여 채워지는 emptyDir 볼륨
gitRepo 볼륨을 사용하는 Pod: gitrepo-volume-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: gitrepo-volume-pod
spec:
containers:
- image: nginx:alpine
name: web-server
voluemMounts:
- name: html
mountPath: /usr/share/nginx/html
readOnly: true
ports:
- containerPort: 80
protocol: TCP
volume:
- name: html
gitRepo: # gitRepo 볼륨을 생성하는 중
repository: https://github.com/luksa/kubia-website-example.git # 볼륨은 깃 스토리지로 복제될 것이다.
revision: master # 마스터 브랜치가 체크아웃될 것이다.
directory: . # 볼륨의 루트 디렉토리에 복제할 수 있다.
ㅁ Worker Node 파일 시스템에 액세스
[hostPath 볼륨 소개]
hostPath 볼륨은 노드의 파일 시스템에 있는 특정 파일 도는 디렉터리를 가리킴
- hostPath 볼륨은 영구 스토리지 유형
- gitRepo와 emptyDir볼륨은 포드가 해체될 때 삭제되지만 hostPath 볼륨의 내용은 삭제 되지 않음
ㅁ 영구 스토리지 사용
[포드 볼륨에서 GCE 영구 디스크 사용]
GCE(구글 컴퓨터 엔진)에서 클러스터 노드를 실행하는 예제를 실행한 경우 GCE 영구 디스크를 기본 스토리지 매커니즘으로 사용
$ gcloud container clusters list
NAME Zone MASTER_VERSION MASTER_IP ...
kubia europe-west1-b 1.2.5 104.155.84.137
위에 나온 GCloud Zone과 동일한 위치에 디스크 생성
$ gcloud compute disks create --size=1GiB --zone=europe-west1-b mongodb
gcePersistentDisk를 사용해 Pod 생성
mongodb-pod-gcepd.yaml
apiVersion: v1
kind: Pod
metadata:
name: mongodb
spec:
voluems:
- name: mongodb-data
gcePersistentDis: # 볼륨의 유형이 GCE 영구 디스크
pdName: mongodb. # 영구 디스크의 이름은 이전에 만든 실제 PD와 일치해야 함.
fsType: ext4 # 파일 시스템 유형이 ext4(리눅스 시스템 유형)
containers:
- image: mongo
name: mongodb
volumeMounts:
- name: mongodb-data
mountPath: /data/db # 몽고DB가 데이터를 저장하는 경로
ports:
- containerPort: 27017
protocol: TCP
[awsElasticBlockStore 볼륨 사용]
mongodb-pod-aws.yaml
apiVersion: v1
kind: Pod
metadata:
name: mongodb
spec:
voluems:
- name: mongodb-data
awsElasticBlockStore: # 볼륨의 유형이 AWS EBS 영구 디스크
volumeId: my-volume # 생성한 EBS 볼륨의 ID 지정.
fsType: ext4 # 파일 시스템 유형이 ext4(리눅스 시스템 유형)
containers:
.....
[NFS 볼륨 사용]
mongodb-pod-nfs.yaml
.....
volumes:
- name: mongodb-data
nfs:
server: 1.2.3.4
path: /some/path
'Kubenetes > Volumes' 카테고리의 다른 글
볼륨: PersistentVolume과 PersistentVolumeClaim (0) | 2021.02.06 |
---|