[Kubernetes] 쿠버네티스 Volume의 종류와 특징

2023. 2. 17. 18:20·Cloud Engineering/Kubernetes ⚙️
목차
  1. 쿠버네티스 Volume
  2. 쿠버네티스 볼륨의 종류
  3. emptyDir
  4. HostPath
728x90

쿠버네티스 Volume

쿠버네티스에서 Pod는 이미지로부터 파일 시스템을 제공받아 사용한다. 따라서 Pod가 삭제되면 저장공간도 같이 삭제된다. 이러한 쿠버네티스 컨테이너 상태를, 데이터를 유지하지 않으므로 Stateless 하다고 한다.

따라서 쿠버네티스 클러스터 환경에서는 데이터를 영구적으로 보존하기 위해서 외부 볼륨을 사용할 수 있다. 상황에 따라 간단히 테스트 해보기 위한 간단한 볼륨을 사용할 수 도 있다.

 

쿠버네티스 볼륨의 종류

  • emptyDir : 아무 데이터도 없는 빈 디렉토리를 제공한다. 동일한 Pod 내에서 다른 컨테이너들끼리 공유하여 접근할 수 있는 공간이다. 
  • hostPath : 각 노드들마다 분리된 저장공간을 제공하는 볼륨이다. 
  • gitRepo : 현재는 depreciated 되었다.  Git Repository를 저장공간으로 사용하는 볼륨이다. 
  • Network Storage Volume : 네트워크에 연결된 스토리지를 저장공간으로 사용하도록 제공하는 볼륨이다. ex) iscsi, nfs ..
  • Cloud Storage : azureDisk, awsElasticBlockStore 등과 같은 클라우드 제공업체에서 클라우드 환경에서의 스토리지를 저장공간으로 사용하는 볼륨이다. 
  • 정적 / 동적 프로비저닝 볼륨 : persistentVolume과 persistentVolumeClaim을 설정하여 pod와 연결하여 저장공간으로 사용한다. 수동으로 설정하여 저장공간을 사용하는 정적 프로비저닝 볼륨과 개발자의 PVC 요청에 따라 동적으로 저장공간이 할당되는 동적 프로비저닝 볼륨이 있다. 

 

emptyDir

  • pod를 생성하는 파일에서 정의할 수 있으며, emptyDir은 말 그대로 아무 데이터도 없는 빈 디렉토리를 제공한다.
  • 동일한 Pod 내에서 다른 컨테이너들끼리 공유하여 접근할 수 있는 공간이다. (리눅스의 /tmp 디렉토리와 유사하다고 생각했음)
  • Pod가 삭제되면 emptyDir도 삭제된다. 따라서 테스트용 임시 저장소 개념으로 사용할 수 있다.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: myapp-rs-fortune
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp-rs-fortune
  template:
    metadata:
      labels:
        app: myapp-rs-fortune
    spec:
      containers:
      - name: web-server
        image: nginx:alpine
        volumeMounts:
        - name: web-fortune
          mountPath: /usr/share/nginx/html
          readOnly: true # 읽기만 가능 , 설정하지 않으면 read write 가능 
        ports:
        - containerPort: 80
      - name: html-generator
        image: ghcr.io/c1t1d0s7/fortune
        volumeMounts:
        - name: web-fortune
          mountPath: /var/htdocs
      volumes:
      - name: web-fortune
        emptyDir: {}

volumeMounts : 컨테이너와 볼륨 저장공간을 연결하는 부분이다. web-fortune이라는 emptyDir 볼륨을 생성하고 연결해주고 있다.

emptyDir: {} 빈괄호로 두면 host의 로컬 디스크를 사용한다.

HostPath

hostPath 볼륨은 각 노드마다 분리되어 있는 저장공간을 제공하는 볼륨이다. 서로 다른 노드들끼리 저장공간이 공유되고 있지 않다. 즉, 저장공간이 각 노드마다 분리되어 있는 것이다.

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: myapp-rs-hp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp-rs-hp
  template:
    metadata:
      labels:
        app: myapp-rs-hp
    spec:
      containers:
      - name: web-server
        image: nginx:alpine
        volumeMounts:
        - name: web-content
          mountPath: /usr/share/nginx/html
        ports:
        - containerPort: 80
      volumes:
      - name: web-content
        hostPath:
          type: Directory
          path: /srv/web_contents

hostPath를 설정하는 부분에서, host가 되는 node에 해당 path가 존재헤야 한다. 즉, /srv/web_contents 라는 디렉토리가 있는 노드에 pod 이 배치될 때만 hostPath Volume 을 사용할 수 있는 것이다. 

node 1에만 /srv/web_contents 디렉토리를 생성한경우에, 레플리카 셋을 생성한 후 결과는 다음과 같다. (사용자의 환경마다 다를 것이다)

vagrant@kube-control1:~/work/20230217$ kubectl get pods -o wide
NAME                READY   STATUS              RESTARTS   AGE     IP             NODE         NOMINATED NODE   READINESS GATES
myapp-rs-hp-9ncfj   1/1     Running             0          5m49s   192.168.9.82   kube-node1   <none>           <none>
myapp-rs-hp-f8h66   0/1     ContainerCreating   0          5m49s   <none>         kube-node3   <none>           <none>

myapp-rs-hp-9ncfj 는 node1에 배치되었다. 따라서  /srv/web_contents 디렉토리를 생성한 node1에서는 연결이 되어 정상 동작하는 상태이지만, node3에 배치된 myapp-rs-hp-f8h66 Pod는 정상 동작하지 않고 있다. 

 

 

728x90

'Cloud Engineering > Kubernetes ⚙️' 카테고리의 다른 글

[Kubernetes] Persistent Volume 과 Persistent Volume Claim  (0) 2023.02.20
[Kubernetes] Ingress 컨트롤러  (0) 2023.02.19
[Kubernetes] Service 의 종류  (0) 2023.02.16
[Kubernetes] Jobs (잡)과 CronJob  (0) 2023.02.13
[Kubernetes] DaemonSet (데몬셋)  (0) 2023.02.13
  1. 쿠버네티스 Volume
  2. 쿠버네티스 볼륨의 종류
  3. emptyDir
  4. HostPath
'Cloud Engineering/Kubernetes ⚙️' 카테고리의 다른 글
  • [Kubernetes] Persistent Volume 과 Persistent Volume Claim
  • [Kubernetes] Ingress 컨트롤러
  • [Kubernetes] Service 의 종류
  • [Kubernetes] Jobs (잡)과 CronJob
minjiwoo
minjiwoo
Data Engineering과 Cloud Native 기술에 대해 Dive Deep 하는 플랫폼 엔지니어가 되는 것을 목표로 하고 있습니다. 경험과 공부한 내용을 기록하며 지속가능한 엔지니어가 되는 것이 꿈입니다.
minjiwoo
minji's engineering note
minjiwoo
전체
오늘
어제
  • 분류 전체보기 (613) N
    • Data Engineering (42)
      • Apache Spark (11)
      • Databricks & Delta Lake (9)
      • Airflow (3)
      • SQL (6)
      • Trouble Shooting (2)
      • Hadoop (2)
      • MLOps (1)
    • Cloud Engineering (104)
      • AWS (23)
      • Linux 🐧 (29)
      • Docker 🐳 (21)
      • Kubernetes ⚙️ (20)
      • Ansible (10)
    • Computer Science (87)
      • 네트워크 (9)
      • 운영체제 (25)
      • 정보처리기사 (48)
      • CS 기술 면접 스터디 (3)
    • Programming Languages (27)
      • Python (17)
      • C와 C++ (10)
    • Backend (5)
      • Django (2)
    • 프로젝트 (2)
      • 테크포임팩트 (2)
    • iOS (11)
      • 레이블러리 (2)
    • Algorithm (PS) (275)
      • LeetCode (6)
    • 개발일기 (30) N
      • 내돈내산 후기🎮 (3)
      • 개발자 취준생 (5) N
      • Today I Learned (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Hi there

인기 글

태그

  • dfs
  • 빅데이터
  • 백준
  • dp
  • 쿠버네티스
  • AWS
  • 알고리즘
  • 코딩테스트
  • Databricks
  • docker
  • 클라우드
  • 데이터엔지니어
  • 카카오코딩테스트
  • 프로그래머스
  • BFS
  • EC2
  • Leetcode
  • linux
  • ansible
  • 리눅스
  • Kubernetes
  • 스파크
  • 데이터브릭스
  • Swift
  • python
  • SPARK
  • 백트래킹
  • 파이썬
  • 운영체제
  • 데이터엔지니어링

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
minjiwoo
[Kubernetes] 쿠버네티스 Volume의 종류와 특징
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.