본문으로 건너뛰기

Velero/MinIO 설치

Kubernetes 클러스터의 안정적인 백업 체계를 구축하기 위해 Velero와 MinIO를 설치하는 방법을 안내합니다.

왜 Velero와 MinIO가 필요한가요?

etcd snapshot만으로는 Kubernetes 리소스의 정의만 백업됩니다. 실제 애플리케이션 데이터(PersistentVolume에 저장된 데이터)를 함께 백업하려면 Velero가 필요합니다. MinIO는 이 백업 데이터를 저장하는 S3 호환 스토리지 역할을 합니다.


구성요소 이해하기

MinIO - 백업 저장소

MinIO는 S3 호환 오브젝트 스토리지로, Velero가 생성한 백업 데이터를 저장합니다.

MinIO를 선택하는 이유

AWS S3를 사용할 수 있지만, MinIO를 설치하면 외부 클라우드 의존 없이 온프레미스 환경에서도 백업 인프라를 구축할 수 있습니다.

  • S3 호환: AWS S3 API와 완전 호환됩니다. 기존 S3 도구를 그대로 사용할 수 있습니다.
  • 고가용성: 분산 모드로 데이터를 복제합니다. 단일 장애점 없이 안정적으로 운영할 수 있습니다.
  • 경량: 단일 바이너리로 설치됩니다. 빠른 배포와 간편한 관리가 가능합니다.
  • 웹 콘솔: 브라우저 기반 관리 UI를 제공합니다. 시각적으로 백업 파일을 확인할 수 있습니다.

Velero - 백업 엔진

Velero는 Kubernetes 리소스와 영구 볼륨을 백업하고 복원하는 오픈소스 도구입니다.

  • 클러스터 백업: 전체 또는 선택적 리소스를 백업합니다. 정기 백업이나 변경 전 스냅샷에 활용됩니다.
  • 스케줄 백업: Cron 기반으로 자동 백업을 수행합니다. 일일/주간 정기 백업에 사용됩니다.
  • 재해 복구: 백업에서 클러스터를 복원합니다. 장애 복구나 롤백에 활용됩니다.
  • 마이그레이션: 클러스터 간 워크로드를 이전합니다. 클러스터 업그레이드나 환경 이전에 사용됩니다.

사전 요구사항

설치를 시작하기 전에 다음 조건을 확인하세요.

  • Kubernetes 클러스터: KIWI에 등록되어 있어야 합니다. [런타임 환경] 페이지에서 확인할 수 있습니다.
  • 클러스터 관리자 권한: CRD 설치와 RBAC 생성 권한이 필요합니다. 관리자에게 문의하세요.
  • 영구 스토리지: MinIO용 PVC를 생성할 수 있어야 합니다. StorageClass가 존재하는지 확인하세요.
  • 저장 공간: 최소 100GB 이상을 권장합니다. 백업 대상 규모에 따라 조정하세요.
권한이 부족하다면?

[백업 관리] 메뉴가 보이지 않거나 접근이 거부된다면, 기관 관리자에게 권한을 요청하세요. 백업 인프라 설치에는 클러스터 관리자 수준의 권한이 필요합니다.


MinIO 설치

MinIO를 먼저 설치하여 백업 데이터를 저장할 스토리지를 준비합니다.

Step 1: 백업 관리 페이지 이동

  1. 좌측 메뉴에서 **[백업 관리]**를 클릭합니다 .
  2. 설정 탭을 클릭합니다 .
  3. 백업 인프라 설치 버튼을 클릭합니다 .

Step 2: MinIO 설치 옵션 설정

설치 마법사에서 MinIO 설치 단계로 진행한 후, 아래 옵션들을 설정합니다.

기본 설정

  • 설치 모드 (권장: Standalone)

    • Standalone: 단일 노드에 설치. 소규모 환경에 적합하고 설정이 간단합니다 .
    • Distributed: 여러 노드에 분산 설치. 고가용성이 필요한 대규모 운영 환경에 적합합니다 .
  • 네임스페이스 (권장: velero)

    • Velero와 동일한 네임스페이스에 설치하면 네트워크 통신이 간편합니다 .
  • 서비스 타입 (권장: ClusterIP)

    • ClusterIP: 클러스터 내부에서만 접근 (보안상 권장)
    • NodePort: 외부에서 노드 IP로 접근 필요 시
    • LoadBalancer: 클라우드 환경에서 외부 로드밸런서 사용 시

스토리지 설정

  • 스토리지 크기 (권장: 100Gi 이상)

    • 백업 대상 규모와 보존 기간을 고려하여 설정하세요
    • 나중에 확장이 어려우므로 여유있게 설정하는 것이 좋습니다 .
  • StorageClass

    • 클러스터의 기본 StorageClass를 사용하거나, 성능 요구사항에 맞는 클래스를 선택하세요
스토리지 크기 결정하기
  • 소규모 (리소스 50개 미만): 일일 백업 크기 약 100MB, 30일 보존 시 50GB 권장
  • 중규모 (리소스 50~500개): 일일 백업 크기 약 1GB, 30일 보존 시 200GB 권장
  • 대규모 (리소스 500개 이상): 일일 백업 크기 약 10GB, 30일 보존 시 1TB+ 권장

인증 설정

  • Access Key: MinIO 접근용 사용자 이름입니다. 자동 생성을 권장합니다.
  • Secret Key: MinIO 접근용 비밀번호입니다. 충분히 복잡한 값을 사용하세요.
인증 정보 보관

Access Key와 Secret Key는 안전한 곳에 별도로 보관하세요. 분실 시 MinIO에 접근할 수 없으며, Velero 연결 설정도 다시 해야 합니다.

Step 3: 설치 실행

  1. 설정을 확인하고 설치 버튼을 클릭합니다 .
  2. 설치 진행 상황이 화면에 표시됩니다 .
    • PVC 생성: 백업 데이터 저장 공간 확보
    • Deployment 생성: MinIO 서버 Pod 배포
    • Service 생성: 네트워크 엔드포인트 생성
    • Secret 생성: 인증 정보 저장
  3. "MinIO 설치가 완료되었습니다" 메시지가 나타나면 성공입니다 .

Step 4: MinIO 상태 확인

설치 완료 후 다음 정보를 확인합니다.

  • 상태: Running 상태여야 합니다. 문제 시 Pod 로그를 확인하세요.
  • 엔드포인트: http://minio.velero.svc:9000으로 연결됩니다. 문제 시 Service 생성을 확인하세요.
  • 콘솔 URL: http://minio-console.velero.svc:9001로 접근합니다. 선택적 기능입니다.

Velero 설치

MinIO 설치가 완료되면 Velero를 설치하여 백업 기능을 활성화합니다.

Step 1: Velero 설치 단계 진행

  1. MinIO 설치 완료 후 다음 버튼을 클릭합니다 .
  2. Velero 설치 마법사가 자동으로 시작됩니다 .

Step 2: 설치 옵션 설정

기본 설정

  • 네임스페이스 (권장: velero)

    • MinIO와 동일한 네임스페이스에 설치하면 관리가 편리합니다 .
  • 버전 (권장: 최신 안정 버전)

    • 특별한 호환성 요구사항이 없다면 최신 안정 버전을 선택하세요
    • 기존 백업을 복원해야 한다면 해당 백업을 생성한 Velero 버전과 호환성을 확인하세요

백업 스토리지 설정

MinIO를 먼저 설치했다면 연결 정보가 자동으로 채워집니다.

  • Provider: aws로 설정됩니다. S3 호환 스토리지(MinIO 포함)를 사용합니다.
  • Bucket: velero로 설정됩니다. 백업 데이터를 저장하는 버킷입니다.
  • S3 URL: http://minio.velero.svc:9000으로 설정됩니다. MinIO 엔드포인트입니다.
  • Region: minio로 설정됩니다. MinIO는 리전 개념이 없으므로 기본값을 사용합니다.
버킷 이름 변경하기

기본 버킷 이름 velero 대신 다른 이름을 사용하고 싶다면 직접 수정할 수 있습니다. 단, 버킷 이름은 소문자, 숫자, 하이픈만 사용할 수 있습니다.

볼륨 스냅샷 설정 (선택적이지만 권장)

이 옵션을 활성화하면 PersistentVolume에 저장된 실제 데이터도 함께 백업됩니다.

  • 활성화: PV 스냅샷 백업 기능 사용 여부
  • Provider (권장: CSI)
    • CSI: 최신 Kubernetes 환경에서 권장
    • 클라우드 제공자: AWS EBS, GCP PD 등 클라우드 환경에서 선택
볼륨 스냅샷을 활성화해야 하는 이유

볼륨 스냅샷 없이 백업하면 Kubernetes 리소스 정의만 백업됩니다. 데이터베이스나 파일 스토리지 등 실제 데이터를 복구하려면 반드시 볼륨 스냅샷을 활성화하세요.

Step 3: 설치 실행

  1. 설정을 확인하고 설치 버튼을 클릭합니다 .
  2. 설치 진행 상황이 화면에 표시됩니다 .
    • CRD 설치: Velero 커스텀 리소스 정의
    • ServiceAccount 및 RBAC 생성: 권한 설정
    • Deployment 생성: Velero 서버 Pod 배포
    • BackupStorageLocation 생성: MinIO 연결 설정
  3. "Velero 설치가 완료되었습니다" 메시지가 나타나면 성공입니다 .

Step 4: 설치 확인

설치가 정상적으로 완료되었는지 확인합니다.

  • Velero Pod: Running 상태여야 합니다. 문제 시 kubectl get pods -n velero 명령으로 확인하세요.
  • BackupStorageLocation: Available 상태여야 합니다. 문제 시 MinIO 연결 상태를 확인하세요.
  • MinIO 버킷: velero 버킷이 존재해야 합니다. MinIO 콘솔에서 확인할 수 있습니다.
설치 성공 여부 빠르게 확인하기

설치 후 [백업 관리] 페이지의 설정 탭에서 모든 상태가 "정상"으로 표시되면 성공입니다.


외부 스토리지 연결

기존 S3 호환 스토리지를 사용하는 경우:

AWS S3 연결

  1. 백업 인프라 설치에서 외부 스토리지 선택
  2. S3 정보 입력:
    • Provider: aws
    • Bucket: 버킷 이름
    • Region: AWS 리전
    • Access Key ID: AWS 자격증명
    • Secret Access Key: AWS 자격증명

기존 MinIO 연결

  1. 외부 스토리지 선택
  2. MinIO 정보 입력:
    • Provider: aws (S3 호환)
    • S3 URL: MinIO 엔드포인트 (예: http://minio.example.com:9000)
    • Bucket: 버킷 이름
    • Access Key: MinIO 접근 키
    • Secret Key: MinIO 시크릿 키
    • s3ForcePathStyle: true (필수)

백업 스케줄 설정

기본 스케줄 생성

  1. 백업 관리 페이지에서 스케줄 탭을 클릭합니다 .
  2. 스케줄 추가 버튼을 클릭합니다 .
  3. 스케줄 설정:
  • 이름: 스케줄을 식별할 이름입니다. 목적을 알 수 있는 명확한 이름을 사용하세요. (예: daily-backup, weekly-full-backup)
  • Cron 표현식: 백업 실행 시간을 지정하는 Cron 표현식입니다. 예를 들어 0 2 * * *는 매일 오전 2시에 실행됩니다. 서비스 영향이 적은 시간대를 선택하세요.
  • TTL (보존 기간): 백업을 보존할 기간입니다. 시간 단위로 지정합니다. (예: 720h = 30일, 168h = 7일) 기간이 지난 백업은 자동 삭제됩니다.
  • 대상: 백업할 리소스 범위입니다. 전체 클러스터 또는 특정 네임스페이스/리소스를 선택적으로 백업할 수 있습니다.

권장 스케줄

환경별 권장 백업 전략:

  • 운영 환경: 매일 백업(7일 보존)과 매주 백업(4주 보존)을 병행합니다. 일일 백업으로 최근 변경사항을 보호하고, 주간 백업으로 장기 복구 지점을 확보합니다.
  • 개발 환경: 매주 1회 백업하고 2주간 보존합니다. 개발 환경은 재구성이 비교적 쉬우므로 최소한의 백업으로 충분합니다.
  • 테스트 환경: 필요시에만 수동 백업하고 1주간 보존합니다. 테스트 환경은 일반적으로 재생성이 쉬우므로 정기 백업이 필수적이지 않습니다.

설치 상태 확인

KIWI 대시보드

백업 관리 > 설정 탭에서:

  • MinIO 상태: Running / Error
  • Velero 상태: Running / Error
  • 스토리지 사용량: 사용된 용량 / 전체 용량
  • 최근 백업: 마지막 백업 시간

kubectl로 확인

# Velero Pod 상태
kubectl get pods -n velero

# BackupStorageLocation 상태
kubectl get backupstoragelocations -n velero

# 백업 목록
kubectl get backups -n velero

# 스케줄 목록
kubectl get schedules -n velero

문제 해결

MinIO 설치 실패

  • PVC가 Pending 상태인 경우: 클러스터에 적절한 StorageClass가 없거나 저장 공간을 할당할 수 없습니다. kubectl get storageclass 명령으로 사용 가능한 StorageClass를 확인하고, 필요시 생성하세요.
  • Pod가 CrashLoopBackOff 상태인 경우: MinIO가 스토리지에 접근하지 못합니다. kubectl describe pvc로 PVC 상태를 확인하고, PV가 올바르게 바인딩되었는지 점검하세요.
  • 메모리 부족 오류가 발생하는 경우: MinIO Pod에 할당된 리소스가 부족합니다. 설치 옵션에서 리소스 제한을 늘리거나, 노드의 가용 리소스를 확인하세요.

Velero 설치 실패

  • CRD 설치가 실패하는 경우: Velero CRD(Custom Resource Definition)를 생성할 권한이 없습니다. KIWI가 사용하는 ServiceAccount에 클러스터 관리자 권한이 있는지 확인하세요.
  • BackupStorageLocation이 Unavailable 상태인 경우: Velero가 MinIO에 연결하지 못합니다. MinIO Pod가 Running 상태인지 확인하고, Access Key와 Secret Key가 올바른지 점검하세요.
  • Plugin 오류가 발생하는 경우: Velero 버전과 플러그인 버전이 호환되지 않습니다. Velero 릴리스 노트에서 호환되는 플러그인 버전을 확인하고 재설치하세요.

백업 실패

  • PartiallyFailed 상태인 경우: 일부 리소스의 백업이 실패했습니다. velero backup describe <backup-name> --details 명령으로 상세 로그를 확인하고 실패한 리소스를 점검하세요.
  • 스토리지 부족 오류가 발생하는 경우: MinIO 스토리지 용량이 가득 찼습니다. 오래된 백업을 삭제하거나 PVC 용량을 확장하세요.
  • 타임아웃이 발생하는 경우: 백업 대상 데이터가 너무 커서 제한 시간 내에 완료되지 못했습니다. Velero 설정에서 타임아웃 값을 증가시키거나, 백업 범위를 축소하세요.

MinIO 콘솔 접근

MinIO 웹 콘솔에 접근하여 버킷과 오브젝트를 관리할 수 있습니다.

접근 방법 1: 포트 포워딩

kubectl port-forward svc/minio-console -n velero 9001:9001
# 브라우저에서 http://localhost:9001 접근

접근 방법 2: NodePort 또는 Ingress

설치 시 서비스 타입을 NodePort 또는 LoadBalancer로 설정하면 외부에서 직접 접근 가능합니다.

로그인 정보

  • Username: Access Key (설치 시 설정)
  • Password: Secret Key (설치 시 설정)

업그레이드

MinIO 업그레이드

  1. 백업 관리 > 설정에서 MinIO 업그레이드 클릭
  2. 새 버전 선택
  3. 업그레이드 실행

주의: 업그레이드 중 백업 작업이 중단될 수 있습니다.

Velero 업그레이드

  1. 백업 관리 > 설정에서 Velero 업그레이드 클릭
  2. 새 버전 선택
  3. CRD 업그레이드 여부 확인
  4. 업그레이드 실행

제거

Velero 제거

  1. 백업 관리 > 설정에서 Velero 제거 클릭
  2. 제거 옵션 선택:
    • CRD 포함 제거: 모든 백업 데이터 삭제
    • CRD 유지: 백업 데이터 보존
  3. 제거 실행

MinIO 제거

  1. Velero 제거 후 MinIO 제거 클릭
  2. 확인 대화상자에서 제거 클릭

경고: MinIO 제거 시 저장된 모든 백업 데이터가 삭제됩니다.


베스트 프랙티스

백업 인프라를 효과적으로 운영하기 위한 권장 사항입니다.

스토리지 계획

클러스터 규모에 따라 적절한 스토리지 용량을 확보하세요.

  • 소규모 (리소스 50개 미만): 일일 백업 크기 약 100MB, 30일 보존 시 50GB 권장
  • 중규모 (리소스 50~500개): 일일 백업 크기 약 1GB, 30일 보존 시 200GB 권장
  • 대규모 (리소스 500개 이상): 일일 백업 크기 약 10GB 이상, 30일 보존 시 1TB+ 권장
스토리지 확장 계획

스토리지 용량은 나중에 확장하기 어려우므로, 현재 필요량의 2배 이상을 확보하는 것이 좋습니다. 클러스터가 성장하면 백업 크기도 함께 증가합니다.

백업 전략

안정적인 백업 체계를 위해 다음 전략을 권장합니다.

  • 일일 백업: 운영 데이터를 보호합니다. 매일 새벽 시간대에 실행하는 것을 권장합니다.
  • 주간 전체 백업: 장기 보존용입니다. 매주 일요일에 실행하는 것을 권장합니다.
  • 변경 전 백업: 중요 변경 작업 전에 수동으로 백업합니다. 업그레이드나 마이그레이션 전에 필수입니다.
  • 다중 스토리지: 재해 복구를 위해 백업을 복제합니다. 다른 데이터센터에 복제하는 것을 권장합니다.

보안 권장사항

백업 데이터 보안

백업 파일에는 Secret, ConfigMap 등 민감한 정보가 포함될 수 있습니다. 다음 보안 조치를 적용하세요.

  1. 자격증명 관리: MinIO Access Key와 Secret Key를 안전한 비밀번호 관리자에 보관하세요
  2. 백업 암호화: 민감한 환경에서는 백업 암호화 옵션을 활성화하세요
  3. 네트워크 정책: NetworkPolicy를 사용하여 MinIO 접근을 Velero Pod로만 제한하세요
  4. 복원 테스트: 분기별로 복원 테스트를 수행하여 백업이 실제로 작동하는지 검증하세요

다음 단계

백업 인프라 설치가 완료되었습니다. 다음 가이드를 참고하여 백업과 복원을 수행하세요.

  • etcd 백업: Kubernetes 클러스터 상태를 etcd snapshot으로 백업
  • Docker 백업: Docker 환경의 컨테이너와 볼륨 백업
  • 복원: 백업 데이터를 사용하여 시스템 복구