무지개곰
article thumbnail
반응형

1. 목차

볼륨

5장 리뷰

2. 볼륨

볼륨은 Pod의 컨테이너들이 데이터를 공유하고 데이터를 보존하는 데 사용되는 저장소

2.1. 볼륨의 종류

  • emptyDir
  • hostPath
  • PersistentVolume / PersistentVolumeClaim

2.2. emptyDir (공디렉터리)

데이터를 파드에 저장하는 볼륨으로, 생애 주기가 파드와 같아 컨테이너가 재 시작하는 경우 데이터를 잃지 않고 파드가 삭제되면 데이터를 잃는다.

 

 

매니페스트 예시

<code />
apiVersion: apps/v1 kind: Deployment metadata: name: sleep spec: selector: matchLabels: app: sleep template: metadata: labels: app: sleep spec: containers: - name: sleep image: kiamol/ch03-sleep volumeMounts: - name: data mountPath: /data volumes: - name: data emptyDir: {}

2.3. hostPath (호스트 경로)

데이터를 노드에 저장하는 볼륨으로, 파드가 재 시작되어도 데이터를 잃지 않는다.

 

 

매니페스트 예시

<code />
apiVersion: apps/v1 kind: Deployment metadata: name: sleep spec: selector: matchLabels: app: sleep template: metadata: labels: app: sleep spec: containers: - name: sleep image: kiamol/ch03-sleep volumeMounts: - name: node-root mountPath: /node-root volumes: - name: node-root hostPath: path: / type: Directory

2.4. PV와 PVC

클러스터 수준에서 영구적인 스토리지를 관리하는 데 사용되는 리소스

 

2.4.1. PV 생성

<bash />
kubectl apply -f https://raw.githubusercontent.com/gilbutITbook/kiamol/main/ch05/todo-list/persistentVolume.yaml

persistentVolume.yaml

<code />
apiVersion: v1 kind: PersistentVolume metadata: name: pv01 spec: capacity: storage: 50Mi accessModes: - ReadWriteOnce local: path: /volumes/pv01 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kiamol operator: In values: - ch05

2.4.2. PVC 생성

<bash />
kubectl apply -f https://raw.githubusercontent.com/gilbutITbook/kiamol/main/ch05/todo-list/postgres-persistentVolumeClaim.yaml

postgres-persistentVolumeClaim.yaml

<code />
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: postgres-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 40Mi storageClassName: ""

2.4.3. 실습

2.4.3.1. sleep 파드 생성 (hostPath 볼륨)

<bash />
kubectl apply -f https://raw.githubusercontent.com/gilbutITbook/kiamol/main/ch05/sleep/sleep-with-hostPath.yaml

2.4.3.2. local에 폴더 생성

<bash />
kubectl exec deploy/sleep -- mkdir -p /node-root/volumes/pv01

2.4.3.3. local 폴더 속 자료 확인

<bash />
kubectl exec deploy/sleep -- ls -l /node-root/volumes/pv01/pg_wal

2.4.3.4. 데이터베이스 파드 생성

<bash />
kubectl apply -f https://raw.githubusercontent.com/gilbutITbook/kiamol/main/ch05/todo-list/postgres/todo-db-secret.yaml -f https://raw.githubusercontent.com/gilbutITbook/kiamol/main/ch05/todo-list/postgres/todo-db.yaml

2.4.3.5. 연결 로그 확인

<bash />
kubectl logs -l app=todo-db --tail 1

2.4.3.6. pv01 속 파일 확인

<bash />
kubectl exec deploy/sleep -- sh -c 'ls -l /node-root/volumes/pv01| grep wal'

2.4.3.7. to-do 웹 파드 생성

<bash />
kubectl apply -f https://raw.githubusercontent.com/gilbutITbook/kiamol/main/ch05/todo-list/web/todo-web-configMap.yaml -f https://raw.githubusercontent.com/gilbutITbook/kiamol/main/ch05/todo-list/web/todo-web-secret.yaml -f https://raw.githubusercontent.com/gilbutITbook/kiamol/main/ch05/todo-list/web/todo-web.yaml

2.5. mountPath와 subPath

mountPath : 컨테이너 내에 볼륨을 mount 할 경로를 지정
subPath : 볼륨 내의 특정 디렉터리나 파일을 지정

예시

<code />
spec: containers: - name: my-container volumeMounts: - name: my-volume mountPath: /target/data subPath: source/data

my-volume의 /source/data의 내용을 my-container의 /target/data에 mount


3. 5장 리뷰

지금까지의 내용 중 가장 어렵게 느껴졌습니다.
뒤로 갈수록 난이도가 오르겠지만 실습용 to-do web에서 오류가 발생하여 더욱 어렵게 느껴졌습니다.
공부는 단순히 실습만 따라 하는 게 아니라 직접 활용하며 익혀가는 것이기에 기본 개념을 잡는다는 관점에서는 충분히 괜찮은 내용이기에 입문자에게는 좋은 책이라는 생각은 변하지 않습니다.
앞으로 프로젝트를 준비하고 배포할 때 활용하며 온전한 제 것으로 만들겠습니다.

반응형
profile

무지개곰

@무지개곰

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!