본문 바로가기
프로젝트&&스터디/DOIK 스터디

1주차 - 쿠버네티스 주요 리소스 (쿠버네티스 스토리지)

by james_janghun 2022. 6. 24.

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이 잘 요청되어 있습니다.

 

 

이상으로 스토리지 학습과 실습을 마치겠습니다.