Updated:

4 minute read

설명

  • https://openebs.io/
  • kubernetes native storage solution
  • CAS(Container Attached Storage) 패턴 사용
  • 노드에서 사용 가능한 로컬 혹은 복제 pv를 제공하고 관리
  • Local pv
    • Cassandra, MongoDB, Elastic 등과 같은 분산 워크로드에 선호
  • Replicated pv
    • Percona/MySQL, Jira, GitLab 등과 같은 상태 저장 워크로드에 선호


기능

  • https://openebs.io/docs/introduction/features
  • 컨테이너를 위한 컨테이너화 스토리지
    • CAS(Container Attached Storage) 패턴 사용
    • OpenEBS를 통해 프로비저닝된 볼륨은 항상 컨테이너화
    • 각 볼륨에는 전용 스토리지 컨트롤러 존재
  • 동기 복제
    • Jiva, cStor 및 Mayastor 스토리지 엔진을 이용하여 볼륨울 동기식으로 복제
    • 복제는 Kubernetes 영역에서 발생
  • 스냅샷 및 클론
    • Copy-On-Write 스냅샷
    • 표준 kubectl 명령을 사용하여 완전히 Kubernetes 기본 방식으로 수행
    • 증분 스냅샷 기능은 Kubernetes 클러스터와 다양한 클라우드 제공업체 또는 데이터 센터 전반에서 데이터 마이그레이션 및 이식성을 향상
  • 백업 및 복원
    • 오픈 소스 OpenEBS Velero 플러그인을 통해 Velero와 같은 Kubernetes 백업 및 복원 솔루션과 함께 작동
  • 워크로드 조정을 위한 Prometheus 메트릭
    • 볼륨 IOPS, 처리량, 대기 시간 및 데이터 패턴과 같은 세분화된 데이터 메트릭을 위해 계측


CAS(Container Attached Storage)

  • https://openebs.io/docs/concepts/cas
  • Kubernetes에 의해 조정되는 마이크로서비스 기반 스토리지 컨트롤러를 포함하는 소프트웨어
  • 데이터 자체는 컨테이너를 통해 액세스
  • 민첩성
    • CAS의 각 스토리지 볼륨에는 컨테이너화된 스토리지 컨트롤러와 해당하는 컨테이너화된 복제본 존재
    • 따라서 이러한 구성 요소 주변의 리소스를 유지 관리하고 조정하는 것이 민첩
  • 스토리지 정책의 세분성
    • 볼륨별로 모든 스토리지 정책을 구성 가능
  • 잠금 방지
    • 다른 클러스터로의 상태 저장 워크로드 이동을 무중단 방식으로 단순화
  • 클라우드 네이티브
    • Prometheus, Grafana, Fluentd, Weavescope, Jaeger 등과 같은 클라우드 네이티브 도구를 사용하여 스토리지 리소스를 프로비저닝, 모니터링 및 관리 가능
  • 낮은 폭발 반경
    • CAS 아키텍처는 워크로드별로 있고 구성 요소가 느슨하게 결합되어 있기 때문에 CAS는 일반적인 분산 스토리지 아키텍처보다 폭발 반경이 훨씬 작음
    • 노드에 장애가 발생하면 상태 비저장 컨테이너인 스토리지 컨트롤러가 두 번째 또는 세 번째 복제본이 실행되고 데이터를 계속 사용할 수 있는 노드에서 회전


아키텍처


스토리지 엔진

  • Local PV
    • https://openebs.io/docs/concepts/localpv
    • Kubernetes 로컬 볼륨 용 동적 PV 프로비저닝 도구를 제공
    • 로컬 볼륨은 디스크, 파티션 또는 디렉터리와 같은 탑재된 로컬 저장 장치
    • 단일 노드에서만 스토리지를 사용 가능
    • 동적 크기 변경 불가
    • 디스크 할당량 적용 불가
      • 기본 장치 또는 호스트 경로에는 PVC 또는 스토리지 클래스에서 요청한 것보다 더 많은 데이터 존재 가능
  • cStor
    • https://openebs.io/docs/concepts/cstor
    • 클라우드 네이티브 방식으로 기본 디스크 또는 클라우드 볼륨을 사용하여 iSCSI 블록 스토리지를 제공
    • 동기식 데이터 복제, 스냅샷, 클론, 데이터 씬 프로비저닝, 높은 데이터 복원력, 데이터 일관성, 용량 또는 성능의 주문형 증가와 같은 엔터프라이즈급 기능을 제공
  • Jiva
  • Mayastor
    • https://openebs.io/docs/concepts/mayastor
    • 선언적 데이터 플레인으로 Kubernetes를 확장하는 “컨테이너 연결 스토리지” 또는 CAS 솔루션으로, 상태 저장 애플리케이션을 위한 유연하고 지속적인 스토리지를 제공


스토리지 엔진 선택 가이드라인

  • https://openebs.io/docs/concepts/casengines
  • hostpath Local PV
    • 어플리케이션이 자체적으로 복제 및 가용성을 관리하고 스토리지 계층에서 복제가 필요하지 않은 경우
    • Jiva 또는 cStor보다 높은 성능을 원하는 경우
    • 지정된 어플리케이션에 대해 전용 로컬 디스크를 사용할 수 없거나 지정된 어플리케이션에 전용 스토리지가 필요하지 않은 경우에 권장
  • device Local PV
    • 어플리케이션이 자체적으로 복제를 관리하고 스토리지 계층에서 복제가 필요하지 않은 경우
    • Jiva 또는 cStor보다 높은 성능을 원하는 경우
    • 디스크에 가까운 성능이 필요하고 공유 볼륨의 노이즈 이웃 효과를 피해야 하는 경우
  • ZFS or LVM Local PV
    • 어플리케이션이 자체적으로 복제를 관리하고 스토리지 계층에서 복제가 필요하지 않은 경우
    • Jiva 또는 cStor보다 높은 성능을 원하는 경우
    • 스냅샷, 볼륨 확장, 여러 스토리지 장치의 스토리지 풀링과 같은 기능과 함께 디스크에 가까운 성능이 필요할 때
  • cStor
    • 데이터의 동기식 복제를 원하고 노드에 여러 디스크가 있는 경우
    • 각 노드에 있는 로컬 또는 네트워크 디스크의 공통 풀에서 여러 어플리케이션의 스토리지를 관리하는 경우
    • Kubernetes 기본 스토리지 서비스를 구축하려는 경우
    • 스토리지 수준 스냅샷 및 복제 기능이 필요한 경우
    • 엔터프라이즈급 스토리지 보호 기능이 필요한 경우
    • 기본 저장 장치가 NVMe SSD가 아니고 애플리케이션에 고성능이 필요하지 않은 경우
  • Jiva
    • 데이터의 동기식 복제를 원하고 단일 로컬 디스크 또는 클라우드 디스크와 같은 단일 관리 디스크가 있고 스냅샷 또는 복제 기능이 필요하지 않은 경우
  • Mayastor
    • NVMe SSD를 사용하는 고성능 스토리지가 필요하고 클러스터가 NVMeoF를 사용할 수 있는 경우
    • 노드 장애로부터 보호하기 위해 복제 또는 가용성 기능이 필요한 경우
    • 차세대 컴퓨팅 및 스토리지 기술을 위해 설계되었으며 현재 개발 중


NDM(Node Disk Manager)

  • https://openebs.io/docs/concepts/ndm
  • 블록 장치를 CPU, 메모리 및 네트워크와 같은 다른 리소스와 마찬가지로 모니터링 및 관리해야 하는 리소스로 취급
  • 각 노드에서 실행되고 필터를 기반으로 연결된 블록 장치를 감지하고 블록 장치 사용자 지정 리소스로 Kubernetes에 로드하는 데몬셋


설치

  • kubectl apply -f https://openebs.github.io/charts/openebs-operator.yaml


제거


기본 스토리지 클래스 변경

  • kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'


볼륨 생성

  • 과정
    • Replicated PV일 경우 pool 생성 -> StorageClass 생성 -> PersistentVolumeClaim 생성 -> PersistentVolume 생성
  • Local PV Hostpath
  • Local PV Device
  • cStor
    • https://openebs.io/docs/user-guides/cstor
    • 전제조건
      • 모든 노드에 iSCSI initiator 필요
        • dnf install iscsi-initiator-utils
      • 파일 시스템이 없고 마운트되지 않은 디스크를 노드에 연결 필요
      • kubectl apply -f https://openebs.github.io/charts/cstor-operator.yaml
    • blockdevices 목록
      • kubectl get blockdevices.openebs.io -n openebs
    • replicaCount는 최대 5까지 허용하며 CSPIs(cStor Pool Instances)보다 작아야 함
    • test yaml
    • 확인
      • 출력
        • kubectl exec openebs-cstor-test -- cat /mnt/store/test.txt
      • pod에서 해당 pvc로 volume이 생성 되었는지 여부
        • kubectl describe pod openebs-cstor-test
          • ClaimName: cstor-pvc
  • Jiva
  • Mayastor


PersistentVolumeClaim 확인

  • kubectl get persistentvolumeclaims


PersistentVolumes 확인

  • kubectl get persistentvolumes