반응형
Volume
- Volume은 Kubernetes 스토리지의 추상화 개념
- 컨테이너는 Pod에 바인딩 되는 볼륨을 마운트하고 마치 로컬 파일시스템에 있는 것처럼 스토리지에 접근.
- Docker의 볼륨과 유사한 개념.
- https://momobob.tistory.com/40
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 |