DevOps & SRE/Docker & kubernetes

[쿠버네티스 공부] Volume의 종류

seungh0 2021. 2. 11. 18:18
반응형
그저 사이드 플젝에서 한 번 써보고 싶어서... 쿠버네티스를 공부를 하면서 정리하는 글입니다.

쿠버네티스

Volume

emptyDir

emptyDir

  • 파드 단위로 마운트되는 볼륨
  • 같은 파드내의 컨테이너들끼리 데이터를 공유
  • 파드 내의 마운트된 볼륨을 통해서 자신의 로컬처럼 데이터를 공유할 수 있음.
  • 하지만, 파드 생성시 만들어지고 파드 삭제시 없어지므로 일시적인 데이터를 보관해야 한다.
apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-1
spec:
  containers:
    - name: container1
      image: ...
      volumeMounts:
        - name: empty-dir
          mountPath: /mnt-1
    - name: container2
      image: ...
      volumeMounts:
        - name: empty-dir
          mountPath: /mnt-2
  volumes:
    - name: empty-dir
      emptyDir: {}

hostPath

hostPath

  • 노드 단위 마운트되는 볼륨
  • 파드들이 죽어도 hostPath의 볼륨의 데이터는 사라지지 않는다.
  • 하지만 파드 입장에서 재생성될때, 같은 노드에 재생성된다는 보장이 없음.
  • 대처법으로 노드 추가시 마다 마운트를 걸어줘서 해결할 수 있지만, 쿠버네티스 자체에서 해주는 역할이 아니고 관리자가 직접 마운트 해줘야 하는 단점이 있음(자동화 X)
  • 보통 각각의 노드에는 각 노드 자신을 위해서 사용되는 파일들이 있음. (시스템 파일 혹은 설정 파일 등) 이러한 것들을 위해 주로 사용한다.
apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-2
spec:
  containers:
    - name: ...
      image: ...
      volumeMounts:
        - name: host-path
          mountPath: /mnt-1
  volumes:
    - name: host-path
      hostPath:
        path: /node-mnt # 사전에 해당 노드에 경로가 있어야 한다.
        type: Directory

PVC/PV

PVC/PV

  • 파드의 영속성 있는 볼륨을 제공.
  • k8s에서 볼륨을 사용하는 구조는 PV(PersistentVolume)과 PVC(PersistentVolumeCliam) 2개로 구성 되어 있다.
  • PV에는 로컬 및 외부 원격 볼륨 등 다양하게 존재한다.
  • 관리자가 미리 PV라는 볼륨을 만들어 두면, 사용자는 PVC를 만들면 k8s가 PVC에 맞는 적절한 볼륨을 연결해주는 형태이다.
  • k8s는 볼륨을 파드에 직접 할당하는 방식이 아니라, 중간에 PVC를 둠으로써 파드와 파드가 사용할 스토리지를 분리하였다. (파드 입장에서는 자신이 어떤 스토리지(로컬, 원격 등)을 사용하고 있는지 알지 못해도 된다.)

PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-01
spec:
  capacity:
    storage: 1G
  accessModes:
    - ReadWriteOnce
  local:
    path: /node-mnt
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - { key: kubernetes.io/hostname, operator: In, values: [k8s-node1] }

PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-01
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1G
  storageClassName: ""

이렇게 만든 PVC를 파드를 생성할때 마운트 할 수 있다.

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-3
spec:
  containers:
    - name: container
      image: ...
      volumeMounts:
        - name: pvc-pv
          mountPath: /mnt3
  volumes:
    - name: pvc-pv
      persistentVolumeClaim:
        claimName: pvc-01

출처: www.inflearn.com/course/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EA%B8%B0%EC%B4%88

https://arisu1000.tistory.com/27849

반응형