반응형
Volume
- Volume은 Kubernetes 스토리지의 추상화 개념
- 컨테이너는 Pod에 바인딩 되는 볼륨을 마운트하고 마치 로컬 파일시스템에 있는 것처럼 스토리지에 접근.
- Docker의 볼륨과 유사한 개념.
- https://momobob.tistory.com/40
[Docker] 컨테이너의 데이터 공유를 위한 방법, 볼륨, 바인드 마운트
docker 컨테이너에서 쓰여진 데이터들은 기본적으로 컨테이너가 삭제될 때, 함께 제거된다. Docker는 데이터를 유지 혹은 컨테이너간 공유하기 위해서 세가지 옵션을 제공함. 1. BIND MOUNT 2. VOLUME 3. TM
momobob.tistory.com
Volume Type
1. EmptyDir Volume
- 볼륨을 통해 파드내에서 컨테이너 간 데이터 공유
- emptyDir 볼륨은 빈 디렉토리로 시작
- Pod 내부에서 실행중인 애플리케이션은 필요한 모든 파일을 작성
- Pod를 삭제하면 볼륨의 내용이 손실됨
- 동일한 Pod에서 실행되는 컨테이너 간에 파일을 공유할 때 응용
- volume-empty.yaml
apiVersion: v1
kind: Pod
metadata:
name: web
spec:
containers:
- image: nginx:1.14
name: nginx
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
volumes:
- name: html
emtpryDir: {}
2. HostParh Volume
- 노드(호스트)의 파일시스템의 디렉토리나 파일을 컨테이너에 마운트
- 노드에 디렉토리나 파일을 생성하여 마운트 가능
- hostPath는 type지시어를 이용해 mount 구성의 요구를 추가할 수 있음
volums:
- name: html
hostPath:
path: /hostdir_or_file
type: DirectoryOrCreate
- type
- DirectoryOrCreate : 주어진 경로에 아무것도 없다면, 필요에 따라 kubelet의 소유군, 권한을 0755로 설정한 빈 디렉터리를 생성.(default)
- Directory : 주어진 경로에 디렉터리가 있어야 함.
- FileOrCreate : 주어진 경로에 아무것도 없다면, 필요에 따라 kublet의 소유권, 권한 0755로 설정한 빈 file을 생성.
- File : 주어진 경로에 파일이 있어야 함.
- hostPath.yml
apiVersion: v1
kind: Pod
metadata:
name: web
spec:
volumes:
- name: html
hostPath:
path: /webdata
containers:
- image: nginx:1.14
name: nginx
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
Persistent Volume과 Persistent Volume Claim
- Kubernetes Volumes 운영환경 분리
- 관리자 : 스토리지 구성
- 개발자 : 필요한 만큼 요구
- PersistentVolumes & PersistentVolumeClaims
- Dynamic Provisioning
- 온-디맨드 방식으로 스토리지 볼륨을 생성
- 사용자가 스토리지를 요청하면 자동으로 프로비저닝
- 하나 이상의 StorageClass 오브젝트를 사전 생성
- 주로 퍼블릭 클라우드에서는 각각의 프로비저너을 제공
- AWS : EKS
- Azue : AKS
- GCP : GKE
- 온프레미스 환경에서는 필수항목은 아님
- StorageClass
- 스토리지의 "classes"를 설명
- 쿠버네티스는 StorageClass의 내용을 일절 신경쓰지 않음. 프로비저너만 사용
- StorageClass 에는 해당 StorageClass에 속하는 PV를 동적으로 프로비저닝 할 때 사용되는 Provisioner, parameters와 reclaimPolicy 필드가 포함됨.
- reclaimPolicy 가 지정되지 않으면 기본값은 Delete
- 스토리지 클래스에 속하는 볼륨을 설명하는 parameters
Persistent Volume
PersistentVolume (PV)은 관리자가 프로비저닝했거나 스토리지 클래스를 사용하여 동적으로 프로비저닝한 클러스터의 스토리지이다.
- pv-hostpath 생성 예
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-hostpath
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
hostPath:
path: /tmp/k8s-pv
반응형
예제1
아래 조건의 persistent volume을 생성하시오
- name : pv001
- size 1Gi
- access mode : ReadWriteMany
- volume type : hostPath이고
- path : /tmp/app-config
풀이
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv001
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
hostPath:
path: /tmp/app-config
Persistent Volume Claim
PersistentVolumeClaim (PVC)은 사용자의 스토리지 요청이다.
클레임은 특정 크기 및 액세스 모드를 요청할 수 있다.
- pvc생성 예
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-hostpath
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 1Gi
storageClassName: manual
예제2
아래 조건의 persistent volume claim을 생성하시오
- name: pv-volume
- class: app-hostpath-sc
- capacity: 10Mi
- accessModes: ReadWriteMany 액세스 권한을 가지도록 구성합니다.
pv-volume를 mount하는 Pod 를 생성하시오.
- name: web-server-pod
- image: nginx
- mount path: /usr/share/nginx/html
풀이
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-hostpath
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
storageClassName: app-hostpath-sc
persistentVolumeReclaimPolicy: Delete
hostPath:
path: /tmp/k8s-pv
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pv-volume
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Mi
storageClassName: app-hostpath-sc
apiVersion: v1
kind: Pod
metadata:
name: web-server-pod
spec:
containers:
- name: web-server
image: nginx
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: pv-volume
volumes:
- name: pv-volume
persistentVolumeClaim:
claimName: pv-volume
끝.
Thank you!
반응형
'Tools > Kubernetes' 카테고리의 다른 글
[CKA 도전 시리즈] 15. CKA 시험 후기 (0) | 2023.03.22 |
---|---|
[CKA 도전 시리즈] 14. Troubleshooting (0) | 2023.03.01 |
[CKA 도전 시리즈] 12. Ingress / Core DNS (0) | 2023.02.20 |
[CKA 도전 시리즈] 11. Network Policy (0) | 2023.02.13 |
[CKA 도전 시리즈] 10. Service ClusterIP (0) | 2023.02.07 |