심심한 개발자의 취미생활

볼륨, 마운트, 클레임을 이용한 데이터 퍼시스턴시

  • 쿠버네티스에는 클러스터 전체에서 사용 가능한 스토리지를 제공하는 내장 기능이 없다.

쿠버네티스에서 컨테이너 파일 시스템이 구축 되는 과정

  • 파드 속 컨테이너의 파일 시스템은 여러가지 출처를 합쳐 구성된다. 먼저 컨테이너 이미지가 파일 시스템의 초기 내용을 제공하고, 이 위에 컨테이너가 기록 가능한 레이어가 얹혀진다. 이미지에 들어 있던 파일을 수정한다거나 새로운 파일을 기록하는 작업이 바로 이 레이어에서 일어난다.

공디렉토리 볼륨

  • 컨테이너 안에서 빈 디렉토리로 초기화되는 유형의 볼륨인 공 디렉토리

호스트경로 볼륨

  • 노드의 디스크를 가리키는 볼륨

전체에서 접근 가능하도록 데이터 저장하기: 영구 볼륨과 클레임

  • 쿠버네티스 볼륨 유형 중에는 분산 스토리지 시스템의 지원을 받는 것이 여럿 있다.

    • AKS 클러스터 (애저 파일스, 애저 디스크)
    • EKS 클러스터 (일래스틱 블록 스토어)
    • 온프레미스 환경 (NFS, 글러스터FS)
  • 이들 시스템은 필수 설정이 각기 다른데, 이런 설정을 파드 정의에 기술할 수 도 있다. 하지만 이 경우 특정 스토리지 솔류션에 대한 의존도가 높아지기 때문에 쿠버네티스에서는 이를 대체하기 위해 스토리지 솔루션과의 결합을 느슨하게 유지하는 유연성있는 수단을 제공한다.

  • 파드: 컴퓨팅 계층의 추상

  • 서비스: 네트워크 계층의 추상

  • 영구볼륨, 영구볼륨클레임: 스토리지 계층의 추상

영구볼륨

영구 볼륨은 사용 가능한 스토리지의 조각을 정의한 쿠버네티스 리소스이다. 영구 볼륨은 클러스터 관리자가 만드는데, 각각의 영구 볼륨에는 이를 구현하는 스토리지 시스템에 대한 볼륨 정의가 들어 있다.

영구볼륨클레임

파드가 영구볼륨을 직접 사용하지 못한다. 영구 볼륨 클레임이란 것을 사용하여 볼륨 사용을 요청해야 한다. 영구볼륨클레임은 파드가 사용하는 스토리지의 추상이다. 애플리케이션에서 사용할 스토리지를 요청하는 역할을 한다. 쿠버네티스에서 영구볼륨클레임은 요구 조건이 일치하는 영구볼륨과 함께 쓰인다. 다만 상세한 볼륨 정보는 영구볼륨에 맡긴다.

스토리지 유형과 동적 볼륨 프로비저닝

  • 정적 볼륨 프로비저닝

    • 정적 볼륨 프로비저닝 방식은 명시적으로 영구볼륨과 영구볼륨클레임을 생성하여 연결하는 방식이다. 정적 볼륨 프로비저닝 방식은 코든 쿠버네티스 클러스너에서 사용할 수 있다는 장점이며, 스토리지 접근 제약이 큰 조직에서 선호하는 방식이다.
  • 동적 볼륨 프로비저닝

    • 동적 볼륨 프로비저닝은 영구볼륨클레임만 생성하면 그에 맞는 영구볼륨을 클러스터에서 동적으로 생성해 주는 방식이다. 클러스터에는 다양한 요구 사항에 대응할 수 있는 여러 가지 스토리지 유형을 설정할 수 있는데, 이 유형 중에서 기본 유형을 다시 지정할 수 있다. 영구 볼륨 클레임의 정의에서는 이 스토리지 유형만 지정하면 된다.
  • 스토리지 유형은 표준 쿠버네티스 리소스로 생성되는데, 스토리지 유형의 정의에 다음 세 가지 필드로 이 스토리지가 어떻게 동작할지 지정한다.

    • provisioner
      • 영구볼륨이 필요해질 때 영구볼륨을 만드는 주체.
      • 플랫폼에 따라 관리 주체가 달라진다.
      • 예를 들어 기본 상태의 AKS는 함께 통합된 애저 파일스가 스토리지를 만든다.
    • reclaimPolicy
      • 연결되었던 클레임이 삭제되었을 때 남아 있는 볼륨을 어떻게 처리할지 지정한다. 볼륨을 함께 삭제할 수도 있고, 그대로 남겨 둘 수도 있다.
    • volumeBindingMode
      • 영구볼륨클레임이 생성되자마자 바로 영구볼륨을 생성해서 연결할지, 아니면 해당 클레임을 사용하는 파드가 생성될 때 영구볼륨을 생성할지 선택할 수 있다.