Kubernetes - 스토리지 볼륨 스냅샷

2026. 2. 16. 10:11·Container & DevOps

스냅샷이 필요한 이유

쿠버네티스에서 애플리케이션은 대부분 PVC(PersistentVolumeClaim) 를 통해 스토리지를 사용한다.

하지만 단순히 PVC를 사용한다고 해서 자동으로 백업/복구 기능이 제공되는 것은 아니다.

운영 환경에서는 다음이 반드시 필요하다.

  • 데이터 변경 전 시점 저장
  • 장애 발생 시 롤백
  • 마이그레이션 대비 백업
  • 테스트용 복제 데이터 생성

이때 사용하는 것이 볼륨 스냅샷(Volume Snapshot) 이다.

CSI란?

CSI(Container Storage Interface)는 쿠버네티스와 외부 스토리지 시스템을 연결하는 표준 인터페이스이다.

CSI를 사용하면 다음과 같은 장점이 존재한다.

  • 쿠버네티스 코어를 수정하지 않아도 된다.
  • 스토리지 기능을 플러그인 방식으로 확장할 수 있다.
  • 프로비저닝, 확장, 스냅샷 기능을 표준화한다

즉, CSI를 통해 스토리지 벤더 또는 오픈소스 솔루션은 쿠버네티스에서 동일한 방식으로 동작할 수 있다.

Rook-Ceph 구조 이해하기

Ceph란 무엇인가

Ceph는 분산 스토리지 시스템이다.

제공하는 스토리지 타입은 다음과 같다.

  • 블록 스토리지 (RBD)
  • 파일 스토리지 (CephFS)
  • 오브젝트 스토리지 (RGW)

여러 노드의 디스크(OSD)를 묶어 하나의 논리적 스토리지 풀을 만든다.

Operator 개념

오퍼레이터는 쿠버네티스에서 특정 애플리케이션의 패키징과 설치, 관리를 손쉽게 할 수 있도록 쿠버네티스 API 확장 기능을 사용하는 컨트롤러다. 특징은 다음과 같다.

  • CRD(Custom Resource Definition)를 사용한다
  • 리소스의 상태를 계속 감시한다
  • 사용자가 정의한 원하는 상태(desired state)를 유지한다

예를 들어 CephCluster 리소스를 생성하면 오퍼레이터가 이를 감지하고 Ceph 클러스터를 자동으로 구성한다.

Rook이란 무엇인가

Rook은 쿠버네티스에서 Ceph를 쉽게 운영하기 위한 오퍼레이터 기반 프레임워크이다.

Rook은 다음 항목들을 자동화할 수 있다.

  • Ceph 설치
  • 디스크 OSD 구성
  • 모니터/매니저 구성
  • 장애 복구
  • 스케일링

즉, Rook은 쿠버네티스 네이티브 Ceph 운영 자동화 도구다.

Rook-Ceph Operator 설치

루크-셰프 오퍼레이터를 설치한 후 셰프를 설치해준다. 설치는 루크 공식 가이드를 참고했다.

cf. 루크 공식 가이드: https://rook.io/docs/rook/latest/Getting-Started/quickstart/#prerequisites

 

먼저, Rook 저장소를 클론해준다.

git clone --single-branch --branch master https://github.com/rook/rook.git
cd rook/deploy/examples

 

CRD, 공통 리소스, 오퍼레이터를 이어서 설치해준다.

kubectl apply -f crds.yaml
kubectl apply -f common.yaml
kubectl apply -f operator.yaml

위와 같이 정상적으로 오퍼레이터가 설치됐고, 이어서 셰프 클러스터를 설치한다.

CephCluster 생성

Rook CephCluster라는 별도의 CRD로 CephCluster를 설치한다. CephCluster YAML에는 Ceph 설치 요구사항을 선언할 수 있다.

예시로 다음과 같은 것들이 들어간다.

  • 모니터(MON) 개수
  • 사용할 노드/디스크 조건
  • 네트워크 설정
  • 대시보드/모니터링 옵션
  • 스토리지 엔진 설정(OSD 구성 방식)

그리고 오퍼레이터는 이걸 보고 다음을 자동 생성한다.

  • MON: 클러스터 상태/쿼럼(다수결) 유지 담당이다
    • 보통 3개를 둔다(홀수 권장이다)
  • MGR: 모니터링/관리 기능 담당이다
  • OSD: 실제 디스크에 데이터를 저장하는 데몬이다
    • ex. osd 6개 출력 -> 디스크 6개가 OSD로 편입됨을 의미.

다음 명령어를 통해 Ceph 클러스터를 생성한다.

cd /home/pkg/rook/deploy/examples
kubectl apply -f cluster.yaml

위와 같이 성공적으로 파드들이 생성된 것을 확인할 수 있다.

 

생성된 파드들의 구조는 크게 다음과 같은 5계층 구조로 이루어져 있다.

 

  • Operator 계층
  • Monitor 계층 (MON)
  • Manager 계층 (MGR)
  • OSD 계층 (스토리지 실제 데이터 저장)
  • CSI 계층 (쿠버네티스 연동 인터페이스)

Operator 계층

pod/rook-ceph-operator-7c8d9fcff4-h8qrw

쿠버네티스의 뇌 역할을 한다. Ceph 자체는 컨테이너로 뜨지만, 그 생명주기를 관리하는 것이 Operator다.

다음과 같은 역할들을 수행한다.

 

  • Ceph 클러스터 전체를 관리하는 컨트롤러이다.
  • CephCluster CR을 감시한다.
  • MON, MGR, OSD, CSI 생성/삭제를 제어한다.
  • 장애 발생 시 리소스 재배치를 담당한다.

MON 계층

rook-ceph-mon-a
rook-ceph-mon-b
rook-ceph-mon-c

Ceph의 컨트롤 플레인이다. 3개 이상 구성하는 이유는 quorum 때문이다. 3개 중 2개 이상 살아있어야 클러스터가 유지된다.

다음과 같은 역할들을 수행한다.

 

  • 클러스터 멤버 관리
  • OSD 상태 관리
  • quorum 유지
  • 클러스터 맵 관리

MGR 계층 (통계 / 모니터링 담당)

rook-ceph-mgr-a
rook-ceph-mgr-b

 

Active/Standby 구조이다. 하나는 Active, 하나는 대기한다.

다음과 같은 역할을 수행한다.

  • 클러스터 상태 수집
  • Dashboard 제공
  • Prometheus exporter 기능
  • 성능 메트릭 수집

OSD 준비 Job

1회성 Job이다. Completed 상태가 정상이다.

다음과 같은 역할을 수행한다.

  • 노드의 디스크 탐색
  • 블록 디바이스 초기화
  • OSD 생성 준비
'Container & DevOps' 카테고리의 다른 글
  • Kubernetes - Helm을 이용한 MariaDB StatefulSet 구성
  • kubernetes - Storage/OpenEBS
  • kubernetes - 사용자 SSL/TLS 인증서 적용
  • Kubernetes - Ingress 테스트용 애플리케이션 설치 및 설정 테스트
SummerToday
SummerToday
summertoday 님의 블로그 입니다.
  • SummerToday
    SummerToday
    SummerToday
  • 전체
    오늘
    어제
  • 인기 글

  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 관리자
    • 분류 전체보기 (62)
      • OS & Network (4)
      • Cloud (11)
      • Container & DevOps (41)
      • Database (4)
      • Develop (0)
      • IaC (2)
  • 태그

    tailscale
    CI/CD
    CloudWatch
    argocd
    gitops
    cloud
    Eni
    계정 관리
    Grafana
    K8S
    점프 계정
    Galera Cluster
    EIP
    MariaDB
    openebs
    s2s vpn
    container
    aws
    Kubernetes
    AmazonSNS
  • hELLO· Designed By정상우.v4.10.3
SummerToday
Kubernetes - 스토리지 볼륨 스냅샷
상단으로

티스토리툴바