1. 스토리지 소개
- 쿠버네티스에 사용되는 스토리지는 emptyDir / hostPath / PV가 있습니다. 하나씩 가볍게 살펴보겠습니다.
2. emptyDir
- Pod 생성시 기본적으로 설치되는 볼륨으로 해당 pod의 볼륨입니다.
- pod가 삭제되면 바로 같이 삭제되므로 일시적인 사용에만 적절합니다.
3. hostPath
- node 볼륨이라고 이해하면 쉽습니다.
- 해당 node에 설치되는 볼륨으로 같은 node를 공유하는 pod끼리 공유가 가능합니다.
- hostPath는 pod볼륨이므로 pod로 생성됩니다.
- hostPath를 만드는 yaml은 아래와 같습니다.
cat <<EOT> hostpath.yaml
apiVersion: v1
kind: Pod
metadata:
name: hostpath-pod
spec:
terminationGracePeriodSeconds: 3
nodeSelector:
kubernetes.io/hostname: k8s-w1
containers:
- name: my-container
image: busybox
args: [ "tail", "-f", "/dev/null" ]
volumeMounts:
- name: hostpath-volume
mountPath: /doik-pod-v
volumes:
- name: hostpath-volume
hostPath:
path: /doik-v
type: DirectoryOrCreate
EOT
현재 생성된 hostPath의 내부를 보면 기본적인 파일시스템 구조를 이루고 있습니다.
해당 hostPath에 파일을 하나 넣어보겠습니다. txt 파일이 잘 생성됨을 확인할 수 있습니다.
4. PV / PVC
- PV는 Persistent Volume으로 NFS, 퍼블릭클라우드의 스토리지 서비스 등의 다양한 볼륨 형태를 PV로 등록하여 사용 가능합니다. 이는 Admin이 지정하게 됩니다.
- PVC(Persistent Volume Claim)는 Admin이 지정한 PV를 요청하는 요청서로 이해할 수 있습니다. 개발자(사용자)는 해당 컨테이너에 알맞은 PV를 양식에 맞게 작성하는 것이 PVC입니다.
5. Storage Class
- SC방식에도 클라우드, local-path를 사용하는 다양한 방법이 있습니다. 우리는 local-path를 이용해서 실습을 진행합니다.
deploy-sc에서는 첫번째로 PVC에 storageClass로 local-path를 작성합니다. 그리고 date-pod를 deploy하는데, 이는 1초마다 현재 시간을 로그로 남기는 pod입니다. deploy에 pod-pv-claim을 마운트 시키는 것을 yaml에서 확인할 수 있습니다.
cat <<EOT> deploy-sc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pod-pv-claim
spec:
storageClassName: local-path
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: date-pod
labels:
app: date
spec:
replicas: 1
selector:
matchLabels:
app: date
template:
metadata:
labels:
app: date
spec:
terminationGracePeriodSeconds: 3
containers:
- name: date-pod
image: busybox
args: [/bin/sh, -c, 'i=0; while true; do echo "$i: $(date)" >> /doik-pod-pv/date.log; i=$((i+1)); sleep 1; done']
volumeMounts:
- name: pod-persistent-volume
mountPath: /doik-pod-pv
volumes:
- name: pod-persistent-volume
persistentVolumeClaim:
claimName: pod-pv-claim
EOT
아래 그림처럼 storagesclass local-path가 생겼으며, pod-pv-claim이 잘 bound 되어 있습니다.
date-pod를 상세히 살펴보면 mounts 정보에 doik-pod-pv에 잘 기록되고 있으며, volumes에 pod-pv-claim이 잘 요청되어 있습니다.
이상으로 스토리지 학습과 실습을 마치겠습니다.
'프로젝트&&스터디 > DOIK 스터디' 카테고리의 다른 글
2주차 - 오퍼레이터 & MySQL 오퍼레이터 (설치 및 장애테스트) (0) | 2022.06.25 |
---|---|
2주차 - 오퍼레이터 & MySQL 오퍼레이터 (0) | 2022.06.24 |
1주차 - Deploying PHP Guestbook application with Redis (도전과제) (0) | 2022.06.24 |
1주차 - 쿠버네티스 주요 리소스(statefulset, headless 서비스) (0) | 2022.06.24 |
1주차 - 쿠버네티스 주요 리소스(쿠버네티스 네트워크) (0) | 2022.06.24 |