K8s 뉴비의 쿠버네티스 정복기 (4)

1 분 소요

3. 디스크 (볼륨/Volume)

볼륨이란 Pod에 종속되는 디스크 (컨테이너 단위 X)

Pod 단위이기 때문에, 그 Pod의 여러 컨테이너가 공유 가능

볼륨 종류

  • 볼륨은 여러가지가 존재 : 일반 외장디스크 / Public Cloud에서 제공되는 디스크 / Private Cloud에서 제공되는 디스크
  • emptyDir
    • Pod 생성시 생성 / 삭제시 삭제되는 임시 볼륨
    • 생명 주기는 Pod 단위
    • Memory에도 저장 가능
  • hostpath
    • 노드의 로컬 디스크 경로를 Pod에 마운트하여 사용
    • 같은 hostpath에 있는 볼륨은 여러 Pod 사이에서 공유되어 사용 (Node 기반)
    • Pod가 삭제되어도 hostpath에 있는 파일들은 삭제되지 않고, 다른 Pod가 마운트하게 되면, 남아있는 파일 엑세스 가능
    • Pod가 재시작되어서 다른 Node에서 기동될 경우, 이전 Node의 내용은 당연히 엑세스 불가능 (Node 기반)
  • gitRepo
    • 생성시 지정된 git repo 특정 리비전을 clone하여 내려받고, 디스크 볼륨 생성
    • 물리적으로는 emptyDir이 생성
    • html 처럼 정적 언어이거나 스크립트 언어 기반의 코드는 gitRepo 볼륨으로 쉽게 배포 가능
  • PersistentVolume and PersistentVolumeClaim
    • k8s는 인프라에 대한 복잡성을 추상화하여 간단하게 하고, 개발자들이 손쉽게 필요한 인프라(컨테이너, 디스크, 네트워크)를 설정할 수 있도록 하는 개념을 가지고 있음
    • 그래서, 인프라 종속 부분은 시스템 관리자가 하게하고, 개발자는 이에 대한 이해없이 간단하게 사용하라! => PV / PVC
    • 실제 물리 디스크 생성 후 PV로 k8s에 등록하고, PVC를 지정하여 관리자가 생성한 PV와 연결
    • 주의 : 볼륨은 생성 후에, 직접 삭제하지 않으면 삭제 안됨 : PV 생명주기는 Pod의 생성 / 삭제 관련없이 별도로 관리
    • PersistentVolume(PV)
      • 물리 디스크를 k8s에 정의
      • Capacity : 용량
      • VolumeMode : default or raw
      • Reclaim Policy : PV는 연결된 PVC 삭제 후 다른 PVC로 재사용 가능한데, 이전 디스크 내용 지울지 유지할지 정책 설정 (Retain/Recycle/Delete)
      • AccessMode : PV에 대한 동시에 Pod에서 접근할 수 있는 정책 정의
        • ReadWriteOnce(RWO) : PV는 1개 Pod만 마운트 / 1개 Pod에서만 읽고 쓰기 가능
        • ReadOnlyMany(ROM) : 여러개 Pod에 마운트 가능, 읽기 가능 / 쓰기는 불가능
        • ReadWriteMany(RWM) : 여러개 마운트 가능 / 여러개 동시에 읽고 쓰기 가능
      • PV의 라이프사이클
        • 생성되면 Avaliable 상태 => 이 상태에서 PVC에 바인딩 되면 Bound 상태로 바뀌고 사용됨
        • 바인딩 된 PVC가 삭제되면 PV가 삭제되는 것이 아니라 Released 상태가 됨 : Avaliable이 아니면 사용 불가하고, 보관 상태 됨
      • PV 생성(Provisioning)
        • 위의 내용을 .yaml 파일로 수동 생성도 할 수 있지만, 필요시 자동 생성 가능(Dynamic Provisioning)
    • PersistentVolumeClaim(PVC)
      • Pod의 볼륨과 PV를 바인딩하는 관계 선언
      • PV 만들고 PVC .yaml로 바인딩 가능
    • Dynamic Provisioning
      • PVC만 정의하면 이에 맞는 물리 디스크 생성 및 PV 생성 자동화
      • 디스크 생성시 필요한 타입 정의 가능 : storageClass (미지정시 디폴트)
      • 그냥 PVC 정의하고 필요한 Pod에 바로 바인딩하면 끝!
    • Storage Class
      • AWS EVS 디스크 / 구글 Persistent Disk
      • PVC 정의시 storageClassName에 적으면 PVC와 바인딩됨

출처 - 조대협님 블로그 (https://bcho.tistory.com/1255)

댓글남기기