updated_at: 2025-05-27 12:15

Storage

  • Volume Types
    • Ephemeral Volumes (일시 볼륨)
      • emptyDir : 일시적인 데이터를 저장하는 데 사용되는 간단한 빈 디렉터리, 파드가 생성/삭제 될때 동시에 생성/삭제 되는 임시 볼륨이다. 파드내에서 컨테이너끼리 공유하는 공간으로 사용한다.
      • configMap
      • downwardAPI
      • secret
      • projected
    • Persistent Volumes (영구 볼륨)
      • cephfs
      • csi
      • fc(fibre channel)
      • flexVolume
      • flocker
      • hostPath: 워커 노드의 파일 시스템을 파드의 디렉터리로 마운트하는데 사용
      • iscsi
      • local
      • nfs
      • PersistentVolumeClaim
      • quobyte
      • rbd
      • scaleIO
      • storageos
    • 클라우드 제공자의 전용 스토리지를 마운트
      • gcePersistentDisk(GCE Persistent Disk)
      • awsElasticBlockStore(AWS EBS Volume)
      • azureDist(MS Azure Disk Volume)
    • 다른 유형의 네트워크 스토리지를 마운트
      • cinder
      • cephfs
      • iscsi
      • glusterfs
      • quobyte
      • rbd
      • flexVolume
      • vsphereVolume
      • photonPersistentDisk
    • 쿠버네티스 리소스나 클러스터 정보를 파드에 노출하는 데 사용되는 특별한 유형의 볼륨
      • configMap
      • secret
      • downwardAP
    • 사전에 혹은 동적으로 프로비저닝된 퍼시스턴트 스토리지를 사용하는 방법
      • persistentVolumeClaim

Ephemeral Volumes

emptyDir

파드내에서 컨테이너끼리 공유하는 공간으로 사용되며 파드가 삭제될때 함께 사라진다.

..........
spec:
  containers:        
  - name: web-page
    image: nginx 
    volumeMounts:
    - mountPath: /usr/share/nginx/html 
      name: empty-directory \
  - name: html-builder 
    image: alpine 
    volumeMounts:
    - mountPath: /html-dir 
      name: empty-directory 
  volumes:
  - name: empty-directory 
    emptyDir: {}

Persistent Volumes

hostPath

파드에서 마운트해서 사용하는 것은 emptyDir과 동일하지만,
emptyDir 볼륨이 같은 파드에서 공유할 수 있는 반면에 hostPath 볼륨은 다른 파드에서도 공유 가능합니다.
emptyDir 볼륨 데이터는 임시적이라 파드가 삭제되면 파드 볼륨내 데이터도 삭제되는데,
hostPath 볼륨 데이터는 해당 파드가 삭제되어도 hostPath 볼륨 데이터는 삭제되지 않아 다른 파드에서 계속 사용할 수 있습니다.
노드로 배포가 되는데, 노드가 호스트이다. 즉, 노드에 있는 디렉토리를 사용할 수 있다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-hostpath
  labels:
    app: deploy-hostpath
spec:
  replicas: 3
  selector:
    matchLabels:
      app: deploy-hostpath 
  template:
    metadata:
      labels:
        app: deploy-hostpath 
    spec:
      containers:
      - name: host-mon
        image: sysnet4admin/sleepy
        volumeMounts:
        - mountPath: /host-log  
          name: hostpath-directory 
      volumes:
      - name: hostpath-directory 
        hostPath:
          path: /var/log

nfs

네트워크 파일 시스템

spec:
  containers:
  - name: chk-log 
    image: sysnet4admin/chk-log
    volumeMounts:
    - name: nfs-vol
      mountPath: /audit
  volumes:
  - name: nfs-vol
    nfs:
      server: 192.168.1.10
      path: /nfs_shared/nfs-vol

Persistent Volumes 과 Persistent Volume Claim

Persistent Volumes

PV는 Volume 자체를 의미합니다.
매번 Pod 정의 파일에 Volume을 지정하면, 많은 포드를 배포할 때마다 각각의 Pod에 저장소를 구성해야 합니다.
변경 사항이 있을 때마다 모든 Pod에 수정 사항을 작성하는 대신, 중앙에서 관리하는 것이 더 효율적입니다.
Persistent Volume을 사용하여 큰 저장소 풀을 생성하고, 필요에 따라 각 Pod에서 이를 사용할 수 있도록 설정할 수 있습니다.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-vol1
spec:
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 1Gi
  hostPath:
    path: /tmp/data

외부 클라우드 저장소를 사용하려면 다음과 같이 설정할 수 있다.

..........
spec:
  ..........
  capacity:
    storage: 1Gi
  awsElasticBlockStore: // 위의 hostPath 위치에 아래와 같이 설정
    volumeID: <volume-id>
    fsType: ext4

Persistent Volume Claim

위와 같이 persistent volume 을 만들었다면 필요시 이 볼륨에 대한 요청을 하여야 합니다.
이 요청을 담당하는 것이 Persistent Volume Claim 으로 PersistentVolume PersistentVolumeClaim은 쌍으로 움직인다고 보시면 됩니다.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Mi

PV 와 PVC의 매칭

PV와 PVC가 accessModes 가 일치하고 PV의 storage용량이 충분하면 쿠버네티스에서는 자동으로 매칭해 줍니다. PVC는 하나의 PV와 연결이 되는데 용량외에도 ufficient Capacity, Access Modes, Volume Modes, Storage Class 등을 체크합니다.

수동으로 매칭

수동으로 PVC를 특정 PV를 사용하고 싶을때는 labels를 활용하면 됩니다.

kind: PersistentVolume
metadata:
  labels:
    name: my-pv
---
kind: PersistentVolumeClaim
spec:
  selector:
    matchLabels:
      name: my-pv

Access Modes

접근모드

ReadWriteOnce

RWO. 볼륨은 읽기/쓰기 모드에서 단일 작업자 노드로 적용 가능, 하나의 워커 노드에 마운트되면 다른 노드는 마운트할 수 없음

ReadOnlyMany

ROX. 볼륨은 읽기 전용 모드로 여러 작업자 노드에 동시에 적용 가능 \

ReadWriteMany

RWX. 볼륨은 동시에 여러 작업자 노드에 읽기/쓰기 모드로 적용 가능

ReadWriteOncePod

RWOP. 하나의 Pod만 읽기/쓰기 모드로 적용 가능, Kubernetes 1.22+ 버전부터 지원

persistentVolumeReclaimPolicy

반환정책

Retain(보존)

PVC 삭제 시에도 PV 보존

Delete(삭제)

PVC 삭제 시에 PV를 함께 삭제

Recycle(재활용)

더이상 사용되지 않음

volumes 에서 PVC 호출

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: myfrontend
      image: nginx
      volumeMounts:
        - mountPath: "/var/www/html"
          name: mypd
  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: myclaim

volumeClaimTemplates

평점을 남겨주세요
평점 : 5.0
총 투표수 : 1

질문 및 답글