Repository files navigation

KubeMigrate

KubeMigrate는 Kubernetes 클러스터 간 백업 및 복구 검증을 위한 종합적인 API 서버입니다.
멀티 클러스터 환경에서 Velero 기반 백업/복원 관리, Helm 및 MinIO 연동을 지원하며, 스토리지 클래스 비교 검증, 백업 무결성 확인, 복구 검증 등의 기능을 제공합니다.

Go VersionLicenseBuild Status

주요 기능

  • Kubernetes 관리: 클러스터 리소스 조회 및 관리 (통합 API)
  • Velero 통합: 백업/복원 작업 모니터링 및 관리 (비동기 처리)
  • Helm 지원: URL 기반 차트 설치, 업그레이드, 관리 (비동기 처리)
  • MinIO 연동: 객체 스토리지 버킷 및 파일 관리
  • RESTful API: 일관된 API 디자인으로 쉬운 통합
  • Swagger 문서: 자동 생성된 API 문서
  • Bruno 컬렉션: 포함된 API 테스트 도구
  • 고성능: LRU 캐시 및 워커 풀을 통한 최적화
  • 비동기 처리: Job Manager를 통한 장시간 작업 관리
  • 모니터링: 메모리 사용량 및 성능 모니터링
  • 보안: 포괄적인 보안 미들웨어 및 입력 검증
  • TTL 캐시: 만료 기반 캐시 관리로 메모리 효율성 향상

문서

클라이언트 라이브러리

Go SDK

설치 및 실행

사전 요구사항

  • Go 1.21 이상
  • Kubernetes 클러스터 접근 권한
  • Helm
  • MinIO
  • Velero CRD

설치 방법

# 레포지토리 클론
git clone https://github.com/taking/kubemigrate.git

실행 방법

# kubemigrate 폴더 이동cd kubemigrate
# 서버 실행
make runWithSwagger

빌드 및 기타

# 의존성 업데이트
make deps
# 빌드
make build-compressed
# 코드 포맷팅
make format
# 린트 검사
make lint
# Swagger 업데이트
make swagger

Docker를 이용한 실행

# Docker 이미지 빌드
make docker-build
# 컨테이너 실행
make docker-run
# 또는 docker-compose 사용
make compose-up

개발

프로젝트 구조

kubemigrate/
├── cmd/ # 메인 애플리케이션
├── internal/ # 내부 패키지
│ ├── api/ # API 핸들러 (kubernetes, minio, helm, velero)
│ │ ├── helm/ # Helm API 핸들러 + 서비스
│ │ ├── kubernetes/ # Kubernetes API 핸들러 + 서비스
│ │ ├── minio/ # MinIO API 핸들러 + 서비스
│ │ └── velero/ # Velero API 핸들러 + 서비스
│ ├── handler/ # 공통 핸들러 (BaseHandler)
│ ├── validator/ # 검증 로직 (ValidationManager)
│ ├── response/ # 응답 처리 (ResponseManager)
│ ├── job/ # 작업 관리 (JobManager, WorkerPool)
│ ├── installer/ # 설치 로직 (VeleroInstaller)
│ ├── cache/ # 캐시 관리 (LRU Cache with TTL)
│ ├── logger/ # 로깅
│ ├── middleware/ # 미들웨어 (보안, CORS, 입력 검증)
│ ├── server/ # 서버 설정
│ └── mocks/ # Mock 클라이언트
├── pkg/ # 공개 패키지
│ ├── client/ # 클라이언트 인터페이스
│ │ ├── helm/ # Helm 클라이언트
│ │ ├── kubernetes/ # Kubernetes 클라이언트
│ │ ├── minio/ # MinIO 클라이언트
│ │ └── velero/ # Velero 클라이언트
│ ├── config/ # 설정 관리 (ConfigManager)
│ ├── types/ # 타입 정의 (kubernetes, minio, helm, velero)
│ └── utils/ # 유틸리티
├── docs/ # 문서 (Swagger)
├── docker/ # Docker 설정
├── .bruno/ # Bruno API 컬렉션
└── example/ # 사용 예제

Layered Architecture

┌──────────────────────────────────────────────────────────────┐
│ Presentation Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────┐ │
│ │ Kubernetes│ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Handler │ │ Handler │ │ Handler │ │ Handler │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────┘ │
└──────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ Business Layer │
│ ┌─────────────┐ ┌────────────┐ ┌───────────┐ ┌────────────┐ │
│ │ Kubernetes │ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Service │ │ Service │ │ Service │ │ Service │ │
│ └─────────────┘ └────────────┘ └───────────┘ └────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Common Services │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐ │ │
│ │ │ Job │ │ Installer │ │ Response │ │ │
│ │ │ Manager │ │ Service │ │ Manager │ │ │
│ │ └─────────────┘ └─────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ Data Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌───────────┐ ┌───────────┐ │
│ │ Kubernetes │ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Client │ │ Client │ │ Client │ │ Client │ │
│ └─────────────┘ └─────────────┘ └───────────┘ └───────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Infrastructure │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌────────────────────┐ │ │
│ │ │ Config │ │ Cache │ │ Validation │ │ │
│ │ │ Manager │ │ Manager │ │ Manager │ │ │
│ │ └─────────────┘ └─────────────┘ └────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘

환경 변수 설정

환경 변수설명기본값
SERVER_HOST서버 주소localhost
SERVER_PORT서버 포트9091
READ_TIMEOUT요청 읽기 타임아웃30s
WRITE_TIMEOUT응답 쓰기 타임아웃30s
IDLE_TIMEOUT연결 유지 타임아웃120s
HEALTH_CHECK_TIMEOUT헬스체크 요청 타임아웃5s
REQUEST_TIMEOUT일반 API 요청 타임아웃30s
LOG_LEVEL로그 레벨info
LOG_FORMAT로그 포맷json

API 구조

공통 엔드포인트

  • GET / : 서버 기본 정보
  • GET /api/v1/health : API 서버 상태 확인

Kubernetes API (/api/v1/kubernetes)

  • POST /health : Kubernetes 클러스터 연결 확인
  • GET /:kind : 통합 리소스 조회 (pods, services, deployments 등)
  • GET /:kind/:name : 특정 리소스 조회

Velero API (/api/v1/velero)

  • POST /health : Velero 연결 확인
  • POST /install : Velero 설치 및 MinIO 연동 (비동기)
  • GET /backups : Backup 목록 조회
  • POST /backups : Backup 생성
  • POST /backups/:backupName/validate : Backup 검증
  • GET /backups/:backupName : Backup 상세 조회
  • DELETE /backups/:backupName : Backup 삭제
  • GET /restores : Restore 목록 조회
  • POST /restores/:restoreName/validate : Restore 검증
  • GET /restores/:restoreName : Restore 상세 조회
  • DELETE /restores/:restoreName : Restore 삭제
  • GET /repositories : BackupRepository 조회
  • GET /storage-locations : BackupStorageLocation 조회
  • GET /volume-snapshot-locations : VolumeSnapshotLocation 조회
  • GET /pod-volume-restores : PodVolumeRestore 조회
  • GET /status/:jobId : 작업 상태 조회
  • GET /logs/:jobId : 작업 로그 조회

Helm API (/api/v1/helm)

  • POST /health : Helm 연결 확인
  • POST /charts : Helm 차트 설치 (URL 기반, 비동기)
  • GET /charts : 차트 목록 조회
  • GET /charts/:name : 특정 차트 상세 조회
  • GET /charts/:name/status : 차트 설치 상태 확인
  • PUT /charts/:name : 차트 업그레이드 (비동기)
  • GET /charts/:name/history : 차트 히스토리 조회
  • GET /charts/:name/values : 차트 값 조회
  • DELETE /charts/:name : 차트 제거 (비동기)
  • GET /status/:jobId : 작업 상태 조회
  • GET /logs/:jobId : 작업 로그 조회

MinIO API (/api/v1/minio)

  • POST /health : MinIO 연결 확인

버킷 관리

  • GET /buckets : 버킷 목록 조회
  • GET /buckets/:bucket : 버킷 존재 확인
  • POST /buckets/:bucket : 버킷 생성
  • DELETE /buckets/:bucket : 버킷 삭제

객체 관리

  • GET /buckets/:bucket/objects : 객체 목록 조회
  • POST /buckets/:bucket/objects/:objectName : 객체 업로드
  • GET /buckets/:bucket/objects/:objectName : 객체 다운로드
  • GET /buckets/:bucket/objects/:objectName : 객체 정보 조회
  • POST /buckets/:srcBucket/objects/:srcObject/copy/:dstBucket/:dstObject : 객체 복사
  • DELETE /buckets/:bucket/objects/:objectName : 객체 삭제

Presigned URL

  • GET /buckets/:bucket/objects/:objectName/presigned-get : Presigned GET URL 생성
  • PUT /buckets/:bucket/objects/:objectName/presigned-put : Presigned PUT URL 생성

사용 예제

Helm 차트 설치 (URL 기반)

curl -X POST "http://localhost:9091/api/v1/helm/charts" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig" }' \
-G \
--data-urlencode "releaseName=wordpress-test" \
--data-urlencode "chartURL=oci://registry-1.docker.io/bitnamicharts/wordpress" \
--data-urlencode "version=27.0.10" \
--data-urlencode "namespace=wordpress-test"

MinIO 객체 업로드

curl -X POST "http://localhost:9091/api/v1/minio/buckets/my-bucket/objects/test-file.txt" \
-F "file=@/path/to/local/file.txt" \
-F 'config={"endpoint":"192.168.1.100:9000","accessKey":"admin","secretKey":"password","useSSL":false}'

Kubernetes 리소스 조회

curl -X GET "http://localhost:9091/api/v1/kubernetes/:kind" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig", "namespace": "default" }'

Velero 백업 목록 조회

curl -X GET "http://localhost:9091/api/v1/velero/backups" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig" }'

Velero 설치 (비동기)

curl -X POST "http://localhost:9091/api/v1/velero/install?namespace=default&force=false" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig", "minio": { "endpoint": "192.168.1.100:9000", "accessKey": "admin", "secretKey": "password", "useSSL": false } }'

작업 상태 조회

curl -X GET "http://localhost:9091/api/v1/velero/status/{jobId}"

API 테스트

프로젝트에는 Bruno API 컬렉션이 포함되어 있어 쉽게 API를 테스트할 수 있습니다:

  1. Bruno 설치: Bruno 공식 사이트에서 다운로드
  2. 컬렉션 열기: .bruno/ 폴더를 Bruno에서 열기
  3. 환경 변수 설정: {{base_url}}, {{base64_local_kubeconfig}} 등 설정
  4. API 테스트: 각 서비스별로 분류된 요청들을 실행

Bruno 컬렉션 구조

.bruno/
├── 1_kube/ # Kubernetes API 테스트
├── 2_minio/ # MinIO API 테스트 ├── 3_helm/ # Helm API 테스트
└── velero/ # Velero API 테스트

최신 개선사항

에러 처리 개선

  • MinIO와 Velero API에서 발생하던 중복 에러 응답 문제 해결
  • 공통 에러 처리 함수로 일관된 에러 메시지 제공

설정 관리 통합

  • 중복된 설정 파싱 코드 제거
  • ConfigParser 인터페이스 기반 통합 파서 구현
  • 코드 재사용성 및 유지보수성 향상

성능 최적화

  • LRU 캐시에 TTL(Time To Live) 기능 추가
  • 만료된 항목 자동 정리 기능
  • 메모리 효율성 향상

보안 강화

  • 포괄적인 보안 미들웨어 구현
  • 보안 헤더 설정 (XSS, CSRF, HSTS 등)
  • CORS 정책 구현
  • 입력 데이터 정화 및 검증

테스트 커버리지 개선

  • 새로운 설정 파서들에 대한 포괄적인 테스트 추가
  • 에러 처리 로직 테스트 추가
  • 전체 프로젝트 테스트 통과 확인

라이선스

MIT License - 자세한 내용은 LICENSE 파일을 참조하세요.

기여하기

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

About

Kubernetes 백업·복구 및 멀티 클러스터 마이그레이션 관리 도구

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

KubeMigrate

KubeMigrate는 Kubernetes 클러스터 간 백업 및 복구 검증을 위한 종합적인 API 서버입니다.
멀티 클러스터 환경에서 Velero 기반 백업/복원 관리, Helm 및 MinIO 연동을 지원하며, 스토리지 클래스 비교 검증, 백업 무결성 확인, 복구 검증 등의 기능을 제공합니다.

Go VersionLicenseBuild Status

주요 기능

  • Kubernetes 관리: 클러스터 리소스 조회 및 관리 (통합 API)
  • Velero 통합: 백업/복원 작업 모니터링 및 관리 (비동기 처리)
  • Helm 지원: URL 기반 차트 설치, 업그레이드, 관리 (비동기 처리)
  • MinIO 연동: 객체 스토리지 버킷 및 파일 관리
  • RESTful API: 일관된 API 디자인으로 쉬운 통합
  • Swagger 문서: 자동 생성된 API 문서
  • Bruno 컬렉션: 포함된 API 테스트 도구
  • 고성능: LRU 캐시 및 워커 풀을 통한 최적화
  • 비동기 처리: Job Manager를 통한 장시간 작업 관리
  • 모니터링: 메모리 사용량 및 성능 모니터링
  • 보안: 포괄적인 보안 미들웨어 및 입력 검증
  • TTL 캐시: 만료 기반 캐시 관리로 메모리 효율성 향상

문서

클라이언트 라이브러리

Go SDK

설치 및 실행

사전 요구사항

  • Go 1.21 이상
  • Kubernetes 클러스터 접근 권한
  • Helm
  • MinIO
  • Velero CRD

설치 방법

# 레포지토리 클론
git clone https://github.com/taking/kubemigrate.git

실행 방법

# kubemigrate 폴더 이동cd kubemigrate
# 서버 실행
make runWithSwagger

빌드 및 기타

# 의존성 업데이트
make deps
# 빌드
make build-compressed
# 코드 포맷팅
make format
# 린트 검사
make lint
# Swagger 업데이트
make swagger

Docker를 이용한 실행

# Docker 이미지 빌드
make docker-build
# 컨테이너 실행
make docker-run
# 또는 docker-compose 사용
make compose-up

개발

프로젝트 구조

kubemigrate/
├── cmd/ # 메인 애플리케이션
├── internal/ # 내부 패키지
│ ├── api/ # API 핸들러 (kubernetes, minio, helm, velero)
│ │ ├── helm/ # Helm API 핸들러 + 서비스
│ │ ├── kubernetes/ # Kubernetes API 핸들러 + 서비스
│ │ ├── minio/ # MinIO API 핸들러 + 서비스
│ │ └── velero/ # Velero API 핸들러 + 서비스
│ ├── handler/ # 공통 핸들러 (BaseHandler)
│ ├── validator/ # 검증 로직 (ValidationManager)
│ ├── response/ # 응답 처리 (ResponseManager)
│ ├── job/ # 작업 관리 (JobManager, WorkerPool)
│ ├── installer/ # 설치 로직 (VeleroInstaller)
│ ├── cache/ # 캐시 관리 (LRU Cache with TTL)
│ ├── logger/ # 로깅
│ ├── middleware/ # 미들웨어 (보안, CORS, 입력 검증)
│ ├── server/ # 서버 설정
│ └── mocks/ # Mock 클라이언트
├── pkg/ # 공개 패키지
│ ├── client/ # 클라이언트 인터페이스
│ │ ├── helm/ # Helm 클라이언트
│ │ ├── kubernetes/ # Kubernetes 클라이언트
│ │ ├── minio/ # MinIO 클라이언트
│ │ └── velero/ # Velero 클라이언트
│ ├── config/ # 설정 관리 (ConfigManager)
│ ├── types/ # 타입 정의 (kubernetes, minio, helm, velero)
│ └── utils/ # 유틸리티
├── docs/ # 문서 (Swagger)
├── docker/ # Docker 설정
├── .bruno/ # Bruno API 컬렉션
└── example/ # 사용 예제

Layered Architecture

┌──────────────────────────────────────────────────────────────┐
│ Presentation Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────┐ │
│ │ Kubernetes│ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Handler │ │ Handler │ │ Handler │ │ Handler │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────┘ │
└──────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ Business Layer │
│ ┌─────────────┐ ┌────────────┐ ┌───────────┐ ┌────────────┐ │
│ │ Kubernetes │ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Service │ │ Service │ │ Service │ │ Service │ │
│ └─────────────┘ └────────────┘ └───────────┘ └────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Common Services │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐ │ │
│ │ │ Job │ │ Installer │ │ Response │ │ │
│ │ │ Manager │ │ Service │ │ Manager │ │ │
│ │ └─────────────┘ └─────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ Data Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌───────────┐ ┌───────────┐ │
│ │ Kubernetes │ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Client │ │ Client │ │ Client │ │ Client │ │
│ └─────────────┘ └─────────────┘ └───────────┘ └───────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Infrastructure │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌────────────────────┐ │ │
│ │ │ Config │ │ Cache │ │ Validation │ │ │
│ │ │ Manager │ │ Manager │ │ Manager │ │ │
│ │ └─────────────┘ └─────────────┘ └────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘

환경 변수 설정

환경 변수설명기본값
SERVER_HOST서버 주소localhost
SERVER_PORT서버 포트9091
READ_TIMEOUT요청 읽기 타임아웃30s
WRITE_TIMEOUT응답 쓰기 타임아웃30s
IDLE_TIMEOUT연결 유지 타임아웃120s
HEALTH_CHECK_TIMEOUT헬스체크 요청 타임아웃5s
REQUEST_TIMEOUT일반 API 요청 타임아웃30s
LOG_LEVEL로그 레벨info
LOG_FORMAT로그 포맷json

API 구조

공통 엔드포인트

  • GET / : 서버 기본 정보
  • GET /api/v1/health : API 서버 상태 확인

Kubernetes API (/api/v1/kubernetes)

  • POST /health : Kubernetes 클러스터 연결 확인
  • GET /:kind : 통합 리소스 조회 (pods, services, deployments 등)
  • GET /:kind/:name : 특정 리소스 조회

Velero API (/api/v1/velero)

  • POST /health : Velero 연결 확인
  • POST /install : Velero 설치 및 MinIO 연동 (비동기)
  • GET /backups : Backup 목록 조회
  • POST /backups : Backup 생성
  • POST /backups/:backupName/validate : Backup 검증
  • GET /backups/:backupName : Backup 상세 조회
  • DELETE /backups/:backupName : Backup 삭제
  • GET /restores : Restore 목록 조회
  • POST /restores/:restoreName/validate : Restore 검증
  • GET /restores/:restoreName : Restore 상세 조회
  • DELETE /restores/:restoreName : Restore 삭제
  • GET /repositories : BackupRepository 조회
  • GET /storage-locations : BackupStorageLocation 조회
  • GET /volume-snapshot-locations : VolumeSnapshotLocation 조회
  • GET /pod-volume-restores : PodVolumeRestore 조회
  • GET /status/:jobId : 작업 상태 조회
  • GET /logs/:jobId : 작업 로그 조회

Helm API (/api/v1/helm)

  • POST /health : Helm 연결 확인
  • POST /charts : Helm 차트 설치 (URL 기반, 비동기)
  • GET /charts : 차트 목록 조회
  • GET /charts/:name : 특정 차트 상세 조회
  • GET /charts/:name/status : 차트 설치 상태 확인
  • PUT /charts/:name : 차트 업그레이드 (비동기)
  • GET /charts/:name/history : 차트 히스토리 조회
  • GET /charts/:name/values : 차트 값 조회
  • DELETE /charts/:name : 차트 제거 (비동기)
  • GET /status/:jobId : 작업 상태 조회
  • GET /logs/:jobId : 작업 로그 조회

MinIO API (/api/v1/minio)

  • POST /health : MinIO 연결 확인

버킷 관리

  • GET /buckets : 버킷 목록 조회
  • GET /buckets/:bucket : 버킷 존재 확인
  • POST /buckets/:bucket : 버킷 생성
  • DELETE /buckets/:bucket : 버킷 삭제

객체 관리

  • GET /buckets/:bucket/objects : 객체 목록 조회
  • POST /buckets/:bucket/objects/:objectName : 객체 업로드
  • GET /buckets/:bucket/objects/:objectName : 객체 다운로드
  • GET /buckets/:bucket/objects/:objectName : 객체 정보 조회
  • POST /buckets/:srcBucket/objects/:srcObject/copy/:dstBucket/:dstObject : 객체 복사
  • DELETE /buckets/:bucket/objects/:objectName : 객체 삭제

Presigned URL

  • GET /buckets/:bucket/objects/:objectName/presigned-get : Presigned GET URL 생성
  • PUT /buckets/:bucket/objects/:objectName/presigned-put : Presigned PUT URL 생성

사용 예제

Helm 차트 설치 (URL 기반)

curl -X POST "http://localhost:9091/api/v1/helm/charts" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig" }' \
-G \
--data-urlencode "releaseName=wordpress-test" \
--data-urlencode "chartURL=oci://registry-1.docker.io/bitnamicharts/wordpress" \
--data-urlencode "version=27.0.10" \
--data-urlencode "namespace=wordpress-test"

MinIO 객체 업로드

curl -X POST "http://localhost:9091/api/v1/minio/buckets/my-bucket/objects/test-file.txt" \
-F "file=@/path/to/local/file.txt" \
-F 'config={"endpoint":"192.168.1.100:9000","accessKey":"admin","secretKey":"password","useSSL":false}'

Kubernetes 리소스 조회

curl -X GET "http://localhost:9091/api/v1/kubernetes/:kind" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig", "namespace": "default" }'

Velero 백업 목록 조회

curl -X GET "http://localhost:9091/api/v1/velero/backups" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig" }'

Velero 설치 (비동기)

curl -X POST "http://localhost:9091/api/v1/velero/install?namespace=default&force=false" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig", "minio": { "endpoint": "192.168.1.100:9000", "accessKey": "admin", "secretKey": "password", "useSSL": false } }'

작업 상태 조회

curl -X GET "http://localhost:9091/api/v1/velero/status/{jobId}"

API 테스트

프로젝트에는 Bruno API 컬렉션이 포함되어 있어 쉽게 API를 테스트할 수 있습니다:

  1. Bruno 설치: Bruno 공식 사이트에서 다운로드
  2. 컬렉션 열기: .bruno/ 폴더를 Bruno에서 열기
  3. 환경 변수 설정: {{base_url}}, {{base64_local_kubeconfig}} 등 설정
  4. API 테스트: 각 서비스별로 분류된 요청들을 실행

Bruno 컬렉션 구조

.bruno/
├── 1_kube/ # Kubernetes API 테스트
├── 2_minio/ # MinIO API 테스트 ├── 3_helm/ # Helm API 테스트
└── velero/ # Velero API 테스트

최신 개선사항

에러 처리 개선

  • MinIO와 Velero API에서 발생하던 중복 에러 응답 문제 해결
  • 공통 에러 처리 함수로 일관된 에러 메시지 제공

설정 관리 통합

  • 중복된 설정 파싱 코드 제거
  • ConfigParser 인터페이스 기반 통합 파서 구현
  • 코드 재사용성 및 유지보수성 향상

성능 최적화

  • LRU 캐시에 TTL(Time To Live) 기능 추가
  • 만료된 항목 자동 정리 기능
  • 메모리 효율성 향상

보안 강화

  • 포괄적인 보안 미들웨어 구현
  • 보안 헤더 설정 (XSS, CSRF, HSTS 등)
  • CORS 정책 구현
  • 입력 데이터 정화 및 검증

테스트 커버리지 개선

  • 새로운 설정 파서들에 대한 포괄적인 테스트 추가
  • 에러 처리 로직 테스트 추가
  • 전체 프로젝트 테스트 통과 확인

라이선스

MIT License - 자세한 내용은 LICENSE 파일을 참조하세요.

기여하기

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

About

Kubernetes 백업·복구 및 멀티 클러스터 마이그레이션 관리 도구

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

KubeMigrate

KubeMigrate는 Kubernetes 클러스터 간 백업 및 복구 검증을 위한 종합적인 API 서버입니다.
멀티 클러스터 환경에서 Velero 기반 백업/복원 관리, Helm 및 MinIO 연동을 지원하며, 스토리지 클래스 비교 검증, 백업 무결성 확인, 복구 검증 등의 기능을 제공합니다.

Go VersionLicenseBuild Status

주요 기능

  • Kubernetes 관리: 클러스터 리소스 조회 및 관리 (통합 API)
  • Velero 통합: 백업/복원 작업 모니터링 및 관리 (비동기 처리)
  • Helm 지원: URL 기반 차트 설치, 업그레이드, 관리 (비동기 처리)
  • MinIO 연동: 객체 스토리지 버킷 및 파일 관리
  • RESTful API: 일관된 API 디자인으로 쉬운 통합
  • Swagger 문서: 자동 생성된 API 문서
  • Bruno 컬렉션: 포함된 API 테스트 도구
  • 고성능: LRU 캐시 및 워커 풀을 통한 최적화
  • 비동기 처리: Job Manager를 통한 장시간 작업 관리
  • 모니터링: 메모리 사용량 및 성능 모니터링
  • 보안: 포괄적인 보안 미들웨어 및 입력 검증
  • TTL 캐시: 만료 기반 캐시 관리로 메모리 효율성 향상

문서

클라이언트 라이브러리

Go SDK

설치 및 실행

사전 요구사항

  • Go 1.21 이상
  • Kubernetes 클러스터 접근 권한
  • Helm
  • MinIO
  • Velero CRD

설치 방법

# 레포지토리 클론
git clone https://github.com/taking/kubemigrate.git

실행 방법

# kubemigrate 폴더 이동cd kubemigrate
# 서버 실행
make runWithSwagger

빌드 및 기타

# 의존성 업데이트
make deps
# 빌드
make build-compressed
# 코드 포맷팅
make format
# 린트 검사
make lint
# Swagger 업데이트
make swagger

Docker를 이용한 실행

# Docker 이미지 빌드
make docker-build
# 컨테이너 실행
make docker-run
# 또는 docker-compose 사용
make compose-up

개발

프로젝트 구조

kubemigrate/
├── cmd/ # 메인 애플리케이션
├── internal/ # 내부 패키지
│ ├── api/ # API 핸들러 (kubernetes, minio, helm, velero)
│ │ ├── helm/ # Helm API 핸들러 + 서비스
│ │ ├── kubernetes/ # Kubernetes API 핸들러 + 서비스
│ │ ├── minio/ # MinIO API 핸들러 + 서비스
│ │ └── velero/ # Velero API 핸들러 + 서비스
│ ├── handler/ # 공통 핸들러 (BaseHandler)
│ ├── validator/ # 검증 로직 (ValidationManager)
│ ├── response/ # 응답 처리 (ResponseManager)
│ ├── job/ # 작업 관리 (JobManager, WorkerPool)
│ ├── installer/ # 설치 로직 (VeleroInstaller)
│ ├── cache/ # 캐시 관리 (LRU Cache with TTL)
│ ├── logger/ # 로깅
│ ├── middleware/ # 미들웨어 (보안, CORS, 입력 검증)
│ ├── server/ # 서버 설정
│ └── mocks/ # Mock 클라이언트
├── pkg/ # 공개 패키지
│ ├── client/ # 클라이언트 인터페이스
│ │ ├── helm/ # Helm 클라이언트
│ │ ├── kubernetes/ # Kubernetes 클라이언트
│ │ ├── minio/ # MinIO 클라이언트
│ │ └── velero/ # Velero 클라이언트
│ ├── config/ # 설정 관리 (ConfigManager)
│ ├── types/ # 타입 정의 (kubernetes, minio, helm, velero)
│ └── utils/ # 유틸리티
├── docs/ # 문서 (Swagger)
├── docker/ # Docker 설정
├── .bruno/ # Bruno API 컬렉션
└── example/ # 사용 예제

Layered Architecture

┌──────────────────────────────────────────────────────────────┐
│ Presentation Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────┐ │
│ │ Kubernetes│ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Handler │ │ Handler │ │ Handler │ │ Handler │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────┘ │
└──────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ Business Layer │
│ ┌─────────────┐ ┌────────────┐ ┌───────────┐ ┌────────────┐ │
│ │ Kubernetes │ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Service │ │ Service │ │ Service │ │ Service │ │
│ └─────────────┘ └────────────┘ └───────────┘ └────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Common Services │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐ │ │
│ │ │ Job │ │ Installer │ │ Response │ │ │
│ │ │ Manager │ │ Service │ │ Manager │ │ │
│ │ └─────────────┘ └─────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ Data Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌───────────┐ ┌───────────┐ │
│ │ Kubernetes │ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Client │ │ Client │ │ Client │ │ Client │ │
│ └─────────────┘ └─────────────┘ └───────────┘ └───────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Infrastructure │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌────────────────────┐ │ │
│ │ │ Config │ │ Cache │ │ Validation │ │ │
│ │ │ Manager │ │ Manager │ │ Manager │ │ │
│ │ └─────────────┘ └─────────────┘ └────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘

환경 변수 설정

환경 변수설명기본값
SERVER_HOST서버 주소localhost
SERVER_PORT서버 포트9091
READ_TIMEOUT요청 읽기 타임아웃30s
WRITE_TIMEOUT응답 쓰기 타임아웃30s
IDLE_TIMEOUT연결 유지 타임아웃120s
HEALTH_CHECK_TIMEOUT헬스체크 요청 타임아웃5s
REQUEST_TIMEOUT일반 API 요청 타임아웃30s
LOG_LEVEL로그 레벨info
LOG_FORMAT로그 포맷json

API 구조

공통 엔드포인트

  • GET / : 서버 기본 정보
  • GET /api/v1/health : API 서버 상태 확인

Kubernetes API (/api/v1/kubernetes)

  • POST /health : Kubernetes 클러스터 연결 확인
  • GET /:kind : 통합 리소스 조회 (pods, services, deployments 등)
  • GET /:kind/:name : 특정 리소스 조회

Velero API (/api/v1/velero)

  • POST /health : Velero 연결 확인
  • POST /install : Velero 설치 및 MinIO 연동 (비동기)
  • GET /backups : Backup 목록 조회
  • POST /backups : Backup 생성
  • POST /backups/:backupName/validate : Backup 검증
  • GET /backups/:backupName : Backup 상세 조회
  • DELETE /backups/:backupName : Backup 삭제
  • GET /restores : Restore 목록 조회
  • POST /restores/:restoreName/validate : Restore 검증
  • GET /restores/:restoreName : Restore 상세 조회
  • DELETE /restores/:restoreName : Restore 삭제
  • GET /repositories : BackupRepository 조회
  • GET /storage-locations : BackupStorageLocation 조회
  • GET /volume-snapshot-locations : VolumeSnapshotLocation 조회
  • GET /pod-volume-restores : PodVolumeRestore 조회
  • GET /status/:jobId : 작업 상태 조회
  • GET /logs/:jobId : 작업 로그 조회

Helm API (/api/v1/helm)

  • POST /health : Helm 연결 확인
  • POST /charts : Helm 차트 설치 (URL 기반, 비동기)
  • GET /charts : 차트 목록 조회
  • GET /charts/:name : 특정 차트 상세 조회
  • GET /charts/:name/status : 차트 설치 상태 확인
  • PUT /charts/:name : 차트 업그레이드 (비동기)
  • GET /charts/:name/history : 차트 히스토리 조회
  • GET /charts/:name/values : 차트 값 조회
  • DELETE /charts/:name : 차트 제거 (비동기)
  • GET /status/:jobId : 작업 상태 조회
  • GET /logs/:jobId : 작업 로그 조회

MinIO API (/api/v1/minio)

  • POST /health : MinIO 연결 확인

버킷 관리

  • GET /buckets : 버킷 목록 조회
  • GET /buckets/:bucket : 버킷 존재 확인
  • POST /buckets/:bucket : 버킷 생성
  • DELETE /buckets/:bucket : 버킷 삭제

객체 관리

  • GET /buckets/:bucket/objects : 객체 목록 조회
  • POST /buckets/:bucket/objects/:objectName : 객체 업로드
  • GET /buckets/:bucket/objects/:objectName : 객체 다운로드
  • GET /buckets/:bucket/objects/:objectName : 객체 정보 조회
  • POST /buckets/:srcBucket/objects/:srcObject/copy/:dstBucket/:dstObject : 객체 복사
  • DELETE /buckets/:bucket/objects/:objectName : 객체 삭제

Presigned URL

  • GET /buckets/:bucket/objects/:objectName/presigned-get : Presigned GET URL 생성
  • PUT /buckets/:bucket/objects/:objectName/presigned-put : Presigned PUT URL 생성

사용 예제

Helm 차트 설치 (URL 기반)

curl -X POST "http://localhost:9091/api/v1/helm/charts" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig" }' \
-G \
--data-urlencode "releaseName=wordpress-test" \
--data-urlencode "chartURL=oci://registry-1.docker.io/bitnamicharts/wordpress" \
--data-urlencode "version=27.0.10" \
--data-urlencode "namespace=wordpress-test"

MinIO 객체 업로드

curl -X POST "http://localhost:9091/api/v1/minio/buckets/my-bucket/objects/test-file.txt" \
-F "file=@/path/to/local/file.txt" \
-F 'config={"endpoint":"192.168.1.100:9000","accessKey":"admin","secretKey":"password","useSSL":false}'

Kubernetes 리소스 조회

curl -X GET "http://localhost:9091/api/v1/kubernetes/:kind" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig", "namespace": "default" }'

Velero 백업 목록 조회

curl -X GET "http://localhost:9091/api/v1/velero/backups" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig" }'

Velero 설치 (비동기)

curl -X POST "http://localhost:9091/api/v1/velero/install?namespace=default&force=false" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig", "minio": { "endpoint": "192.168.1.100:9000", "accessKey": "admin", "secretKey": "password", "useSSL": false } }'

작업 상태 조회

curl -X GET "http://localhost:9091/api/v1/velero/status/{jobId}"

API 테스트

프로젝트에는 Bruno API 컬렉션이 포함되어 있어 쉽게 API를 테스트할 수 있습니다:

  1. Bruno 설치: Bruno 공식 사이트에서 다운로드
  2. 컬렉션 열기: .bruno/ 폴더를 Bruno에서 열기
  3. 환경 변수 설정: {{base_url}}, {{base64_local_kubeconfig}} 등 설정
  4. API 테스트: 각 서비스별로 분류된 요청들을 실행

Bruno 컬렉션 구조

.bruno/
├── 1_kube/ # Kubernetes API 테스트
├── 2_minio/ # MinIO API 테스트 ├── 3_helm/ # Helm API 테스트
└── velero/ # Velero API 테스트

최신 개선사항

에러 처리 개선

  • MinIO와 Velero API에서 발생하던 중복 에러 응답 문제 해결
  • 공통 에러 처리 함수로 일관된 에러 메시지 제공

설정 관리 통합

  • 중복된 설정 파싱 코드 제거
  • ConfigParser 인터페이스 기반 통합 파서 구현
  • 코드 재사용성 및 유지보수성 향상

성능 최적화

  • LRU 캐시에 TTL(Time To Live) 기능 추가
  • 만료된 항목 자동 정리 기능
  • 메모리 효율성 향상

보안 강화

  • 포괄적인 보안 미들웨어 구현
  • 보안 헤더 설정 (XSS, CSRF, HSTS 등)
  • CORS 정책 구현
  • 입력 데이터 정화 및 검증

테스트 커버리지 개선

  • 새로운 설정 파서들에 대한 포괄적인 테스트 추가
  • 에러 처리 로직 테스트 추가
  • 전체 프로젝트 테스트 통과 확인

라이선스

MIT License - 자세한 내용은 LICENSE 파일을 참조하세요.

기여하기

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

About

Kubernetes 백업·복구 및 멀티 클러스터 마이그레이션 관리 도구

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

KubeMigrate

KubeMigrate는 Kubernetes 클러스터 간 백업 및 복구 검증을 위한 종합적인 API 서버입니다.
멀티 클러스터 환경에서 Velero 기반 백업/복원 관리, Helm 및 MinIO 연동을 지원하며, 스토리지 클래스 비교 검증, 백업 무결성 확인, 복구 검증 등의 기능을 제공합니다.

Go VersionLicenseBuild Status

주요 기능

  • Kubernetes 관리: 클러스터 리소스 조회 및 관리 (통합 API)
  • Velero 통합: 백업/복원 작업 모니터링 및 관리 (비동기 처리)
  • Helm 지원: URL 기반 차트 설치, 업그레이드, 관리 (비동기 처리)
  • MinIO 연동: 객체 스토리지 버킷 및 파일 관리
  • RESTful API: 일관된 API 디자인으로 쉬운 통합
  • Swagger 문서: 자동 생성된 API 문서
  • Bruno 컬렉션: 포함된 API 테스트 도구
  • 고성능: LRU 캐시 및 워커 풀을 통한 최적화
  • 비동기 처리: Job Manager를 통한 장시간 작업 관리
  • 모니터링: 메모리 사용량 및 성능 모니터링
  • 보안: 포괄적인 보안 미들웨어 및 입력 검증
  • TTL 캐시: 만료 기반 캐시 관리로 메모리 효율성 향상

문서

클라이언트 라이브러리

Go SDK

설치 및 실행

사전 요구사항

  • Go 1.21 이상
  • Kubernetes 클러스터 접근 권한
  • Helm
  • MinIO
  • Velero CRD

설치 방법

# 레포지토리 클론
git clone https://github.com/taking/kubemigrate.git

실행 방법

# kubemigrate 폴더 이동cd kubemigrate
# 서버 실행
make runWithSwagger

빌드 및 기타

# 의존성 업데이트
make deps
# 빌드
make build-compressed
# 코드 포맷팅
make format
# 린트 검사
make lint
# Swagger 업데이트
make swagger

Docker를 이용한 실행

# Docker 이미지 빌드
make docker-build
# 컨테이너 실행
make docker-run
# 또는 docker-compose 사용
make compose-up

개발

프로젝트 구조

kubemigrate/
├── cmd/ # 메인 애플리케이션
├── internal/ # 내부 패키지
│ ├── api/ # API 핸들러 (kubernetes, minio, helm, velero)
│ │ ├── helm/ # Helm API 핸들러 + 서비스
│ │ ├── kubernetes/ # Kubernetes API 핸들러 + 서비스
│ │ ├── minio/ # MinIO API 핸들러 + 서비스
│ │ └── velero/ # Velero API 핸들러 + 서비스
│ ├── handler/ # 공통 핸들러 (BaseHandler)
│ ├── validator/ # 검증 로직 (ValidationManager)
│ ├── response/ # 응답 처리 (ResponseManager)
│ ├── job/ # 작업 관리 (JobManager, WorkerPool)
│ ├── installer/ # 설치 로직 (VeleroInstaller)
│ ├── cache/ # 캐시 관리 (LRU Cache with TTL)
│ ├── logger/ # 로깅
│ ├── middleware/ # 미들웨어 (보안, CORS, 입력 검증)
│ ├── server/ # 서버 설정
│ └── mocks/ # Mock 클라이언트
├── pkg/ # 공개 패키지
│ ├── client/ # 클라이언트 인터페이스
│ │ ├── helm/ # Helm 클라이언트
│ │ ├── kubernetes/ # Kubernetes 클라이언트
│ │ ├── minio/ # MinIO 클라이언트
│ │ └── velero/ # Velero 클라이언트
│ ├── config/ # 설정 관리 (ConfigManager)
│ ├── types/ # 타입 정의 (kubernetes, minio, helm, velero)
│ └── utils/ # 유틸리티
├── docs/ # 문서 (Swagger)
├── docker/ # Docker 설정
├── .bruno/ # Bruno API 컬렉션
└── example/ # 사용 예제

Layered Architecture

┌──────────────────────────────────────────────────────────────┐
│ Presentation Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────┐ │
│ │ Kubernetes│ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Handler │ │ Handler │ │ Handler │ │ Handler │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────┘ │
└──────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ Business Layer │
│ ┌─────────────┐ ┌────────────┐ ┌───────────┐ ┌────────────┐ │
│ │ Kubernetes │ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Service │ │ Service │ │ Service │ │ Service │ │
│ └─────────────┘ └────────────┘ └───────────┘ └────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Common Services │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐ │ │
│ │ │ Job │ │ Installer │ │ Response │ │ │
│ │ │ Manager │ │ Service │ │ Manager │ │ │
│ │ └─────────────┘ └─────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ Data Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌───────────┐ ┌───────────┐ │
│ │ Kubernetes │ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Client │ │ Client │ │ Client │ │ Client │ │
│ └─────────────┘ └─────────────┘ └───────────┘ └───────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Infrastructure │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌────────────────────┐ │ │
│ │ │ Config │ │ Cache │ │ Validation │ │ │
│ │ │ Manager │ │ Manager │ │ Manager │ │ │
│ │ └─────────────┘ └─────────────┘ └────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘

환경 변수 설정

환경 변수설명기본값
SERVER_HOST서버 주소localhost
SERVER_PORT서버 포트9091
READ_TIMEOUT요청 읽기 타임아웃30s
WRITE_TIMEOUT응답 쓰기 타임아웃30s
IDLE_TIMEOUT연결 유지 타임아웃120s
HEALTH_CHECK_TIMEOUT헬스체크 요청 타임아웃5s
REQUEST_TIMEOUT일반 API 요청 타임아웃30s
LOG_LEVEL로그 레벨info
LOG_FORMAT로그 포맷json

API 구조

공통 엔드포인트

  • GET / : 서버 기본 정보
  • GET /api/v1/health : API 서버 상태 확인

Kubernetes API (/api/v1/kubernetes)

  • POST /health : Kubernetes 클러스터 연결 확인
  • GET /:kind : 통합 리소스 조회 (pods, services, deployments 등)
  • GET /:kind/:name : 특정 리소스 조회

Velero API (/api/v1/velero)

  • POST /health : Velero 연결 확인
  • POST /install : Velero 설치 및 MinIO 연동 (비동기)
  • GET /backups : Backup 목록 조회
  • POST /backups : Backup 생성
  • POST /backups/:backupName/validate : Backup 검증
  • GET /backups/:backupName : Backup 상세 조회
  • DELETE /backups/:backupName : Backup 삭제
  • GET /restores : Restore 목록 조회
  • POST /restores/:restoreName/validate : Restore 검증
  • GET /restores/:restoreName : Restore 상세 조회
  • DELETE /restores/:restoreName : Restore 삭제
  • GET /repositories : BackupRepository 조회
  • GET /storage-locations : BackupStorageLocation 조회
  • GET /volume-snapshot-locations : VolumeSnapshotLocation 조회
  • GET /pod-volume-restores : PodVolumeRestore 조회
  • GET /status/:jobId : 작업 상태 조회
  • GET /logs/:jobId : 작업 로그 조회

Helm API (/api/v1/helm)

  • POST /health : Helm 연결 확인
  • POST /charts : Helm 차트 설치 (URL 기반, 비동기)
  • GET /charts : 차트 목록 조회
  • GET /charts/:name : 특정 차트 상세 조회
  • GET /charts/:name/status : 차트 설치 상태 확인
  • PUT /charts/:name : 차트 업그레이드 (비동기)
  • GET /charts/:name/history : 차트 히스토리 조회
  • GET /charts/:name/values : 차트 값 조회
  • DELETE /charts/:name : 차트 제거 (비동기)
  • GET /status/:jobId : 작업 상태 조회
  • GET /logs/:jobId : 작업 로그 조회

MinIO API (/api/v1/minio)

  • POST /health : MinIO 연결 확인

버킷 관리

  • GET /buckets : 버킷 목록 조회
  • GET /buckets/:bucket : 버킷 존재 확인
  • POST /buckets/:bucket : 버킷 생성
  • DELETE /buckets/:bucket : 버킷 삭제

객체 관리

  • GET /buckets/:bucket/objects : 객체 목록 조회
  • POST /buckets/:bucket/objects/:objectName : 객체 업로드
  • GET /buckets/:bucket/objects/:objectName : 객체 다운로드
  • GET /buckets/:bucket/objects/:objectName : 객체 정보 조회
  • POST /buckets/:srcBucket/objects/:srcObject/copy/:dstBucket/:dstObject : 객체 복사
  • DELETE /buckets/:bucket/objects/:objectName : 객체 삭제

Presigned URL

  • GET /buckets/:bucket/objects/:objectName/presigned-get : Presigned GET URL 생성
  • PUT /buckets/:bucket/objects/:objectName/presigned-put : Presigned PUT URL 생성

사용 예제

Helm 차트 설치 (URL 기반)

curl -X POST "http://localhost:9091/api/v1/helm/charts" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig" }' \
-G \
--data-urlencode "releaseName=wordpress-test" \
--data-urlencode "chartURL=oci://registry-1.docker.io/bitnamicharts/wordpress" \
--data-urlencode "version=27.0.10" \
--data-urlencode "namespace=wordpress-test"

MinIO 객체 업로드

curl -X POST "http://localhost:9091/api/v1/minio/buckets/my-bucket/objects/test-file.txt" \
-F "file=@/path/to/local/file.txt" \
-F 'config={"endpoint":"192.168.1.100:9000","accessKey":"admin","secretKey":"password","useSSL":false}'

Kubernetes 리소스 조회

curl -X GET "http://localhost:9091/api/v1/kubernetes/:kind" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig", "namespace": "default" }'

Velero 백업 목록 조회

curl -X GET "http://localhost:9091/api/v1/velero/backups" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig" }'

Velero 설치 (비동기)

curl -X POST "http://localhost:9091/api/v1/velero/install?namespace=default&force=false" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig", "minio": { "endpoint": "192.168.1.100:9000", "accessKey": "admin", "secretKey": "password", "useSSL": false } }'

작업 상태 조회

curl -X GET "http://localhost:9091/api/v1/velero/status/{jobId}"

API 테스트

프로젝트에는 Bruno API 컬렉션이 포함되어 있어 쉽게 API를 테스트할 수 있습니다:

  1. Bruno 설치: Bruno 공식 사이트에서 다운로드
  2. 컬렉션 열기: .bruno/ 폴더를 Bruno에서 열기
  3. 환경 변수 설정: {{base_url}}, {{base64_local_kubeconfig}} 등 설정
  4. API 테스트: 각 서비스별로 분류된 요청들을 실행

Bruno 컬렉션 구조

.bruno/
├── 1_kube/ # Kubernetes API 테스트
├── 2_minio/ # MinIO API 테스트 ├── 3_helm/ # Helm API 테스트
└── velero/ # Velero API 테스트

최신 개선사항

에러 처리 개선

  • MinIO와 Velero API에서 발생하던 중복 에러 응답 문제 해결
  • 공통 에러 처리 함수로 일관된 에러 메시지 제공

설정 관리 통합

  • 중복된 설정 파싱 코드 제거
  • ConfigParser 인터페이스 기반 통합 파서 구현
  • 코드 재사용성 및 유지보수성 향상

성능 최적화

  • LRU 캐시에 TTL(Time To Live) 기능 추가
  • 만료된 항목 자동 정리 기능
  • 메모리 효율성 향상

보안 강화

  • 포괄적인 보안 미들웨어 구현
  • 보안 헤더 설정 (XSS, CSRF, HSTS 등)
  • CORS 정책 구현
  • 입력 데이터 정화 및 검증

테스트 커버리지 개선

  • 새로운 설정 파서들에 대한 포괄적인 테스트 추가
  • 에러 처리 로직 테스트 추가
  • 전체 프로젝트 테스트 통과 확인

라이선스

MIT License - 자세한 내용은 LICENSE 파일을 참조하세요.

기여하기

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

About

Kubernetes 백업·복구 및 멀티 클러스터 마이그레이션 관리 도구

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

KubeMigrate

KubeMigrate는 Kubernetes 클러스터 간 백업 및 복구 검증을 위한 종합적인 API 서버입니다.
멀티 클러스터 환경에서 Velero 기반 백업/복원 관리, Helm 및 MinIO 연동을 지원하며, 스토리지 클래스 비교 검증, 백업 무결성 확인, 복구 검증 등의 기능을 제공합니다.

Go VersionLicenseBuild Status

주요 기능

  • Kubernetes 관리: 클러스터 리소스 조회 및 관리 (통합 API)
  • Velero 통합: 백업/복원 작업 모니터링 및 관리 (비동기 처리)
  • Helm 지원: URL 기반 차트 설치, 업그레이드, 관리 (비동기 처리)
  • MinIO 연동: 객체 스토리지 버킷 및 파일 관리
  • RESTful API: 일관된 API 디자인으로 쉬운 통합
  • Swagger 문서: 자동 생성된 API 문서
  • Bruno 컬렉션: 포함된 API 테스트 도구
  • 고성능: LRU 캐시 및 워커 풀을 통한 최적화
  • 비동기 처리: Job Manager를 통한 장시간 작업 관리
  • 모니터링: 메모리 사용량 및 성능 모니터링
  • 보안: 포괄적인 보안 미들웨어 및 입력 검증
  • TTL 캐시: 만료 기반 캐시 관리로 메모리 효율성 향상

문서

클라이언트 라이브러리

Go SDK

설치 및 실행

사전 요구사항

  • Go 1.21 이상
  • Kubernetes 클러스터 접근 권한
  • Helm
  • MinIO
  • Velero CRD

설치 방법

# 레포지토리 클론
git clone https://github.com/taking/kubemigrate.git

실행 방법

# kubemigrate 폴더 이동cd kubemigrate
# 서버 실행
make runWithSwagger

빌드 및 기타

# 의존성 업데이트
make deps
# 빌드
make build-compressed
# 코드 포맷팅
make format
# 린트 검사
make lint
# Swagger 업데이트
make swagger

Docker를 이용한 실행

# Docker 이미지 빌드
make docker-build
# 컨테이너 실행
make docker-run
# 또는 docker-compose 사용
make compose-up

개발

프로젝트 구조

kubemigrate/
├── cmd/ # 메인 애플리케이션
├── internal/ # 내부 패키지
│ ├── api/ # API 핸들러 (kubernetes, minio, helm, velero)
│ │ ├── helm/ # Helm API 핸들러 + 서비스
│ │ ├── kubernetes/ # Kubernetes API 핸들러 + 서비스
│ │ ├── minio/ # MinIO API 핸들러 + 서비스
│ │ └── velero/ # Velero API 핸들러 + 서비스
│ ├── handler/ # 공통 핸들러 (BaseHandler)
│ ├── validator/ # 검증 로직 (ValidationManager)
│ ├── response/ # 응답 처리 (ResponseManager)
│ ├── job/ # 작업 관리 (JobManager, WorkerPool)
│ ├── installer/ # 설치 로직 (VeleroInstaller)
│ ├── cache/ # 캐시 관리 (LRU Cache with TTL)
│ ├── logger/ # 로깅
│ ├── middleware/ # 미들웨어 (보안, CORS, 입력 검증)
│ ├── server/ # 서버 설정
│ └── mocks/ # Mock 클라이언트
├── pkg/ # 공개 패키지
│ ├── client/ # 클라이언트 인터페이스
│ │ ├── helm/ # Helm 클라이언트
│ │ ├── kubernetes/ # Kubernetes 클라이언트
│ │ ├── minio/ # MinIO 클라이언트
│ │ └── velero/ # Velero 클라이언트
│ ├── config/ # 설정 관리 (ConfigManager)
│ ├── types/ # 타입 정의 (kubernetes, minio, helm, velero)
│ └── utils/ # 유틸리티
├── docs/ # 문서 (Swagger)
├── docker/ # Docker 설정
├── .bruno/ # Bruno API 컬렉션
└── example/ # 사용 예제

Layered Architecture

┌──────────────────────────────────────────────────────────────┐
│ Presentation Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────┐ │
│ │ Kubernetes│ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Handler │ │ Handler │ │ Handler │ │ Handler │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────┘ │
└──────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ Business Layer │
│ ┌─────────────┐ ┌────────────┐ ┌───────────┐ ┌────────────┐ │
│ │ Kubernetes │ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Service │ │ Service │ │ Service │ │ Service │ │
│ └─────────────┘ └────────────┘ └───────────┘ └────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Common Services │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐ │ │
│ │ │ Job │ │ Installer │ │ Response │ │ │
│ │ │ Manager │ │ Service │ │ Manager │ │ │
│ │ └─────────────┘ └─────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ Data Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌───────────┐ ┌───────────┐ │
│ │ Kubernetes │ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Client │ │ Client │ │ Client │ │ Client │ │
│ └─────────────┘ └─────────────┘ └───────────┘ └───────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Infrastructure │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌────────────────────┐ │ │
│ │ │ Config │ │ Cache │ │ Validation │ │ │
│ │ │ Manager │ │ Manager │ │ Manager │ │ │
│ │ └─────────────┘ └─────────────┘ └────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘

환경 변수 설정

환경 변수설명기본값
SERVER_HOST서버 주소localhost
SERVER_PORT서버 포트9091
READ_TIMEOUT요청 읽기 타임아웃30s
WRITE_TIMEOUT응답 쓰기 타임아웃30s
IDLE_TIMEOUT연결 유지 타임아웃120s
HEALTH_CHECK_TIMEOUT헬스체크 요청 타임아웃5s
REQUEST_TIMEOUT일반 API 요청 타임아웃30s
LOG_LEVEL로그 레벨info
LOG_FORMAT로그 포맷json

API 구조

공통 엔드포인트

  • GET / : 서버 기본 정보
  • GET /api/v1/health : API 서버 상태 확인

Kubernetes API (/api/v1/kubernetes)

  • POST /health : Kubernetes 클러스터 연결 확인
  • GET /:kind : 통합 리소스 조회 (pods, services, deployments 등)
  • GET /:kind/:name : 특정 리소스 조회

Velero API (/api/v1/velero)

  • POST /health : Velero 연결 확인
  • POST /install : Velero 설치 및 MinIO 연동 (비동기)
  • GET /backups : Backup 목록 조회
  • POST /backups : Backup 생성
  • POST /backups/:backupName/validate : Backup 검증
  • GET /backups/:backupName : Backup 상세 조회
  • DELETE /backups/:backupName : Backup 삭제
  • GET /restores : Restore 목록 조회
  • POST /restores/:restoreName/validate : Restore 검증
  • GET /restores/:restoreName : Restore 상세 조회
  • DELETE /restores/:restoreName : Restore 삭제
  • GET /repositories : BackupRepository 조회
  • GET /storage-locations : BackupStorageLocation 조회
  • GET /volume-snapshot-locations : VolumeSnapshotLocation 조회
  • GET /pod-volume-restores : PodVolumeRestore 조회
  • GET /status/:jobId : 작업 상태 조회
  • GET /logs/:jobId : 작업 로그 조회

Helm API (/api/v1/helm)

  • POST /health : Helm 연결 확인
  • POST /charts : Helm 차트 설치 (URL 기반, 비동기)
  • GET /charts : 차트 목록 조회
  • GET /charts/:name : 특정 차트 상세 조회
  • GET /charts/:name/status : 차트 설치 상태 확인
  • PUT /charts/:name : 차트 업그레이드 (비동기)
  • GET /charts/:name/history : 차트 히스토리 조회
  • GET /charts/:name/values : 차트 값 조회
  • DELETE /charts/:name : 차트 제거 (비동기)
  • GET /status/:jobId : 작업 상태 조회
  • GET /logs/:jobId : 작업 로그 조회

MinIO API (/api/v1/minio)

  • POST /health : MinIO 연결 확인

버킷 관리

  • GET /buckets : 버킷 목록 조회
  • GET /buckets/:bucket : 버킷 존재 확인
  • POST /buckets/:bucket : 버킷 생성
  • DELETE /buckets/:bucket : 버킷 삭제

객체 관리

  • GET /buckets/:bucket/objects : 객체 목록 조회
  • POST /buckets/:bucket/objects/:objectName : 객체 업로드
  • GET /buckets/:bucket/objects/:objectName : 객체 다운로드
  • GET /buckets/:bucket/objects/:objectName : 객체 정보 조회
  • POST /buckets/:srcBucket/objects/:srcObject/copy/:dstBucket/:dstObject : 객체 복사
  • DELETE /buckets/:bucket/objects/:objectName : 객체 삭제

Presigned URL

  • GET /buckets/:bucket/objects/:objectName/presigned-get : Presigned GET URL 생성
  • PUT /buckets/:bucket/objects/:objectName/presigned-put : Presigned PUT URL 생성

사용 예제

Helm 차트 설치 (URL 기반)

curl -X POST "http://localhost:9091/api/v1/helm/charts" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig" }' \
-G \
--data-urlencode "releaseName=wordpress-test" \
--data-urlencode "chartURL=oci://registry-1.docker.io/bitnamicharts/wordpress" \
--data-urlencode "version=27.0.10" \
--data-urlencode "namespace=wordpress-test"

MinIO 객체 업로드

curl -X POST "http://localhost:9091/api/v1/minio/buckets/my-bucket/objects/test-file.txt" \
-F "file=@/path/to/local/file.txt" \
-F 'config={"endpoint":"192.168.1.100:9000","accessKey":"admin","secretKey":"password","useSSL":false}'

Kubernetes 리소스 조회

curl -X GET "http://localhost:9091/api/v1/kubernetes/:kind" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig", "namespace": "default" }'

Velero 백업 목록 조회

curl -X GET "http://localhost:9091/api/v1/velero/backups" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig" }'

Velero 설치 (비동기)

curl -X POST "http://localhost:9091/api/v1/velero/install?namespace=default&force=false" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig", "minio": { "endpoint": "192.168.1.100:9000", "accessKey": "admin", "secretKey": "password", "useSSL": false } }'

작업 상태 조회

curl -X GET "http://localhost:9091/api/v1/velero/status/{jobId}"

API 테스트

프로젝트에는 Bruno API 컬렉션이 포함되어 있어 쉽게 API를 테스트할 수 있습니다:

  1. Bruno 설치: Bruno 공식 사이트에서 다운로드
  2. 컬렉션 열기: .bruno/ 폴더를 Bruno에서 열기
  3. 환경 변수 설정: {{base_url}}, {{base64_local_kubeconfig}} 등 설정
  4. API 테스트: 각 서비스별로 분류된 요청들을 실행

Bruno 컬렉션 구조

.bruno/
├── 1_kube/ # Kubernetes API 테스트
├── 2_minio/ # MinIO API 테스트 ├── 3_helm/ # Helm API 테스트
└── velero/ # Velero API 테스트

최신 개선사항

에러 처리 개선

  • MinIO와 Velero API에서 발생하던 중복 에러 응답 문제 해결
  • 공통 에러 처리 함수로 일관된 에러 메시지 제공

설정 관리 통합

  • 중복된 설정 파싱 코드 제거
  • ConfigParser 인터페이스 기반 통합 파서 구현
  • 코드 재사용성 및 유지보수성 향상

성능 최적화

  • LRU 캐시에 TTL(Time To Live) 기능 추가
  • 만료된 항목 자동 정리 기능
  • 메모리 효율성 향상

보안 강화

  • 포괄적인 보안 미들웨어 구현
  • 보안 헤더 설정 (XSS, CSRF, HSTS 등)
  • CORS 정책 구현
  • 입력 데이터 정화 및 검증

테스트 커버리지 개선

  • 새로운 설정 파서들에 대한 포괄적인 테스트 추가
  • 에러 처리 로직 테스트 추가
  • 전체 프로젝트 테스트 통과 확인

라이선스

MIT License - 자세한 내용은 LICENSE 파일을 참조하세요.

기여하기

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

About

Kubernetes 백업·복구 및 멀티 클러스터 마이그레이션 관리 도구

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

KubeMigrate

KubeMigrate는 Kubernetes 클러스터 간 백업 및 복구 검증을 위한 종합적인 API 서버입니다.
멀티 클러스터 환경에서 Velero 기반 백업/복원 관리, Helm 및 MinIO 연동을 지원하며, 스토리지 클래스 비교 검증, 백업 무결성 확인, 복구 검증 등의 기능을 제공합니다.

Go VersionLicenseBuild Status

주요 기능

  • Kubernetes 관리: 클러스터 리소스 조회 및 관리 (통합 API)
  • Velero 통합: 백업/복원 작업 모니터링 및 관리 (비동기 처리)
  • Helm 지원: URL 기반 차트 설치, 업그레이드, 관리 (비동기 처리)
  • MinIO 연동: 객체 스토리지 버킷 및 파일 관리
  • RESTful API: 일관된 API 디자인으로 쉬운 통합
  • Swagger 문서: 자동 생성된 API 문서
  • Bruno 컬렉션: 포함된 API 테스트 도구
  • 고성능: LRU 캐시 및 워커 풀을 통한 최적화
  • 비동기 처리: Job Manager를 통한 장시간 작업 관리
  • 모니터링: 메모리 사용량 및 성능 모니터링
  • 보안: 포괄적인 보안 미들웨어 및 입력 검증
  • TTL 캐시: 만료 기반 캐시 관리로 메모리 효율성 향상

문서

클라이언트 라이브러리

Go SDK

설치 및 실행

사전 요구사항

  • Go 1.21 이상
  • Kubernetes 클러스터 접근 권한
  • Helm
  • MinIO
  • Velero CRD

설치 방법

# 레포지토리 클론
git clone https://github.com/taking/kubemigrate.git

실행 방법

# kubemigrate 폴더 이동cd kubemigrate
# 서버 실행
make runWithSwagger

빌드 및 기타

# 의존성 업데이트
make deps
# 빌드
make build-compressed
# 코드 포맷팅
make format
# 린트 검사
make lint
# Swagger 업데이트
make swagger

Docker를 이용한 실행

# Docker 이미지 빌드
make docker-build
# 컨테이너 실행
make docker-run
# 또는 docker-compose 사용
make compose-up

개발

프로젝트 구조

kubemigrate/
├── cmd/ # 메인 애플리케이션
├── internal/ # 내부 패키지
│ ├── api/ # API 핸들러 (kubernetes, minio, helm, velero)
│ │ ├── helm/ # Helm API 핸들러 + 서비스
│ │ ├── kubernetes/ # Kubernetes API 핸들러 + 서비스
│ │ ├── minio/ # MinIO API 핸들러 + 서비스
│ │ └── velero/ # Velero API 핸들러 + 서비스
│ ├── handler/ # 공통 핸들러 (BaseHandler)
│ ├── validator/ # 검증 로직 (ValidationManager)
│ ├── response/ # 응답 처리 (ResponseManager)
│ ├── job/ # 작업 관리 (JobManager, WorkerPool)
│ ├── installer/ # 설치 로직 (VeleroInstaller)
│ ├── cache/ # 캐시 관리 (LRU Cache with TTL)
│ ├── logger/ # 로깅
│ ├── middleware/ # 미들웨어 (보안, CORS, 입력 검증)
│ ├── server/ # 서버 설정
│ └── mocks/ # Mock 클라이언트
├── pkg/ # 공개 패키지
│ ├── client/ # 클라이언트 인터페이스
│ │ ├── helm/ # Helm 클라이언트
│ │ ├── kubernetes/ # Kubernetes 클라이언트
│ │ ├── minio/ # MinIO 클라이언트
│ │ └── velero/ # Velero 클라이언트
│ ├── config/ # 설정 관리 (ConfigManager)
│ ├── types/ # 타입 정의 (kubernetes, minio, helm, velero)
│ └── utils/ # 유틸리티
├── docs/ # 문서 (Swagger)
├── docker/ # Docker 설정
├── .bruno/ # Bruno API 컬렉션
└── example/ # 사용 예제

Layered Architecture

┌──────────────────────────────────────────────────────────────┐
│ Presentation Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────┐ │
│ │ Kubernetes│ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Handler │ │ Handler │ │ Handler │ │ Handler │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────┘ │
└──────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ Business Layer │
│ ┌─────────────┐ ┌────────────┐ ┌───────────┐ ┌────────────┐ │
│ │ Kubernetes │ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Service │ │ Service │ │ Service │ │ Service │ │
│ └─────────────┘ └────────────┘ └───────────┘ └────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Common Services │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐ │ │
│ │ │ Job │ │ Installer │ │ Response │ │ │
│ │ │ Manager │ │ Service │ │ Manager │ │ │
│ │ └─────────────┘ └─────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ Data Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌───────────┐ ┌───────────┐ │
│ │ Kubernetes │ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Client │ │ Client │ │ Client │ │ Client │ │
│ └─────────────┘ └─────────────┘ └───────────┘ └───────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Infrastructure │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌────────────────────┐ │ │
│ │ │ Config │ │ Cache │ │ Validation │ │ │
│ │ │ Manager │ │ Manager │ │ Manager │ │ │
│ │ └─────────────┘ └─────────────┘ └────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘

환경 변수 설정

환경 변수설명기본값
SERVER_HOST서버 주소localhost
SERVER_PORT서버 포트9091
READ_TIMEOUT요청 읽기 타임아웃30s
WRITE_TIMEOUT응답 쓰기 타임아웃30s
IDLE_TIMEOUT연결 유지 타임아웃120s
HEALTH_CHECK_TIMEOUT헬스체크 요청 타임아웃5s
REQUEST_TIMEOUT일반 API 요청 타임아웃30s
LOG_LEVEL로그 레벨info
LOG_FORMAT로그 포맷json

API 구조

공통 엔드포인트

  • GET / : 서버 기본 정보
  • GET /api/v1/health : API 서버 상태 확인

Kubernetes API (/api/v1/kubernetes)

  • POST /health : Kubernetes 클러스터 연결 확인
  • GET /:kind : 통합 리소스 조회 (pods, services, deployments 등)
  • GET /:kind/:name : 특정 리소스 조회

Velero API (/api/v1/velero)

  • POST /health : Velero 연결 확인
  • POST /install : Velero 설치 및 MinIO 연동 (비동기)
  • GET /backups : Backup 목록 조회
  • POST /backups : Backup 생성
  • POST /backups/:backupName/validate : Backup 검증
  • GET /backups/:backupName : Backup 상세 조회
  • DELETE /backups/:backupName : Backup 삭제
  • GET /restores : Restore 목록 조회
  • POST /restores/:restoreName/validate : Restore 검증
  • GET /restores/:restoreName : Restore 상세 조회
  • DELETE /restores/:restoreName : Restore 삭제
  • GET /repositories : BackupRepository 조회
  • GET /storage-locations : BackupStorageLocation 조회
  • GET /volume-snapshot-locations : VolumeSnapshotLocation 조회
  • GET /pod-volume-restores : PodVolumeRestore 조회
  • GET /status/:jobId : 작업 상태 조회
  • GET /logs/:jobId : 작업 로그 조회

Helm API (/api/v1/helm)

  • POST /health : Helm 연결 확인
  • POST /charts : Helm 차트 설치 (URL 기반, 비동기)
  • GET /charts : 차트 목록 조회
  • GET /charts/:name : 특정 차트 상세 조회
  • GET /charts/:name/status : 차트 설치 상태 확인
  • PUT /charts/:name : 차트 업그레이드 (비동기)
  • GET /charts/:name/history : 차트 히스토리 조회
  • GET /charts/:name/values : 차트 값 조회
  • DELETE /charts/:name : 차트 제거 (비동기)
  • GET /status/:jobId : 작업 상태 조회
  • GET /logs/:jobId : 작업 로그 조회

MinIO API (/api/v1/minio)

  • POST /health : MinIO 연결 확인

버킷 관리

  • GET /buckets : 버킷 목록 조회
  • GET /buckets/:bucket : 버킷 존재 확인
  • POST /buckets/:bucket : 버킷 생성
  • DELETE /buckets/:bucket : 버킷 삭제

객체 관리

  • GET /buckets/:bucket/objects : 객체 목록 조회
  • POST /buckets/:bucket/objects/:objectName : 객체 업로드
  • GET /buckets/:bucket/objects/:objectName : 객체 다운로드
  • GET /buckets/:bucket/objects/:objectName : 객체 정보 조회
  • POST /buckets/:srcBucket/objects/:srcObject/copy/:dstBucket/:dstObject : 객체 복사
  • DELETE /buckets/:bucket/objects/:objectName : 객체 삭제

Presigned URL

  • GET /buckets/:bucket/objects/:objectName/presigned-get : Presigned GET URL 생성
  • PUT /buckets/:bucket/objects/:objectName/presigned-put : Presigned PUT URL 생성

사용 예제

Helm 차트 설치 (URL 기반)

curl -X POST "http://localhost:9091/api/v1/helm/charts" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig" }' \
-G \
--data-urlencode "releaseName=wordpress-test" \
--data-urlencode "chartURL=oci://registry-1.docker.io/bitnamicharts/wordpress" \
--data-urlencode "version=27.0.10" \
--data-urlencode "namespace=wordpress-test"

MinIO 객체 업로드

curl -X POST "http://localhost:9091/api/v1/minio/buckets/my-bucket/objects/test-file.txt" \
-F "file=@/path/to/local/file.txt" \
-F 'config={"endpoint":"192.168.1.100:9000","accessKey":"admin","secretKey":"password","useSSL":false}'

Kubernetes 리소스 조회

curl -X GET "http://localhost:9091/api/v1/kubernetes/:kind" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig", "namespace": "default" }'

Velero 백업 목록 조회

curl -X GET "http://localhost:9091/api/v1/velero/backups" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig" }'

Velero 설치 (비동기)

curl -X POST "http://localhost:9091/api/v1/velero/install?namespace=default&force=false" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig", "minio": { "endpoint": "192.168.1.100:9000", "accessKey": "admin", "secretKey": "password", "useSSL": false } }'

작업 상태 조회

curl -X GET "http://localhost:9091/api/v1/velero/status/{jobId}"

API 테스트

프로젝트에는 Bruno API 컬렉션이 포함되어 있어 쉽게 API를 테스트할 수 있습니다:

  1. Bruno 설치: Bruno 공식 사이트에서 다운로드
  2. 컬렉션 열기: .bruno/ 폴더를 Bruno에서 열기
  3. 환경 변수 설정: {{base_url}}, {{base64_local_kubeconfig}} 등 설정
  4. API 테스트: 각 서비스별로 분류된 요청들을 실행

Bruno 컬렉션 구조

.bruno/
├── 1_kube/ # Kubernetes API 테스트
├── 2_minio/ # MinIO API 테스트 ├── 3_helm/ # Helm API 테스트
└── velero/ # Velero API 테스트

최신 개선사항

에러 처리 개선

  • MinIO와 Velero API에서 발생하던 중복 에러 응답 문제 해결
  • 공통 에러 처리 함수로 일관된 에러 메시지 제공

설정 관리 통합

  • 중복된 설정 파싱 코드 제거
  • ConfigParser 인터페이스 기반 통합 파서 구현
  • 코드 재사용성 및 유지보수성 향상

성능 최적화

  • LRU 캐시에 TTL(Time To Live) 기능 추가
  • 만료된 항목 자동 정리 기능
  • 메모리 효율성 향상

보안 강화

  • 포괄적인 보안 미들웨어 구현
  • 보안 헤더 설정 (XSS, CSRF, HSTS 등)
  • CORS 정책 구현
  • 입력 데이터 정화 및 검증

테스트 커버리지 개선

  • 새로운 설정 파서들에 대한 포괄적인 테스트 추가
  • 에러 처리 로직 테스트 추가
  • 전체 프로젝트 테스트 통과 확인

라이선스

MIT License - 자세한 내용은 LICENSE 파일을 참조하세요.

기여하기

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

About

Kubernetes 백업·복구 및 멀티 클러스터 마이그레이션 관리 도구

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

KubeMigrate

KubeMigrate는 Kubernetes 클러스터 간 백업 및 복구 검증을 위한 종합적인 API 서버입니다.
멀티 클러스터 환경에서 Velero 기반 백업/복원 관리, Helm 및 MinIO 연동을 지원하며, 스토리지 클래스 비교 검증, 백업 무결성 확인, 복구 검증 등의 기능을 제공합니다.

Go VersionLicenseBuild Status

주요 기능

  • Kubernetes 관리: 클러스터 리소스 조회 및 관리 (통합 API)
  • Velero 통합: 백업/복원 작업 모니터링 및 관리 (비동기 처리)
  • Helm 지원: URL 기반 차트 설치, 업그레이드, 관리 (비동기 처리)
  • MinIO 연동: 객체 스토리지 버킷 및 파일 관리
  • RESTful API: 일관된 API 디자인으로 쉬운 통합
  • Swagger 문서: 자동 생성된 API 문서
  • Bruno 컬렉션: 포함된 API 테스트 도구
  • 고성능: LRU 캐시 및 워커 풀을 통한 최적화
  • 비동기 처리: Job Manager를 통한 장시간 작업 관리
  • 모니터링: 메모리 사용량 및 성능 모니터링
  • 보안: 포괄적인 보안 미들웨어 및 입력 검증
  • TTL 캐시: 만료 기반 캐시 관리로 메모리 효율성 향상

문서

클라이언트 라이브러리

Go SDK

설치 및 실행

사전 요구사항

  • Go 1.21 이상
  • Kubernetes 클러스터 접근 권한
  • Helm
  • MinIO
  • Velero CRD

설치 방법

# 레포지토리 클론
git clone https://github.com/taking/kubemigrate.git

실행 방법

# kubemigrate 폴더 이동cd kubemigrate
# 서버 실행
make runWithSwagger

빌드 및 기타

# 의존성 업데이트
make deps
# 빌드
make build-compressed
# 코드 포맷팅
make format
# 린트 검사
make lint
# Swagger 업데이트
make swagger

Docker를 이용한 실행

# Docker 이미지 빌드
make docker-build
# 컨테이너 실행
make docker-run
# 또는 docker-compose 사용
make compose-up

개발

프로젝트 구조

kubemigrate/
├── cmd/ # 메인 애플리케이션
├── internal/ # 내부 패키지
│ ├── api/ # API 핸들러 (kubernetes, minio, helm, velero)
│ │ ├── helm/ # Helm API 핸들러 + 서비스
│ │ ├── kubernetes/ # Kubernetes API 핸들러 + 서비스
│ │ ├── minio/ # MinIO API 핸들러 + 서비스
│ │ └── velero/ # Velero API 핸들러 + 서비스
│ ├── handler/ # 공통 핸들러 (BaseHandler)
│ ├── validator/ # 검증 로직 (ValidationManager)
│ ├── response/ # 응답 처리 (ResponseManager)
│ ├── job/ # 작업 관리 (JobManager, WorkerPool)
│ ├── installer/ # 설치 로직 (VeleroInstaller)
│ ├── cache/ # 캐시 관리 (LRU Cache with TTL)
│ ├── logger/ # 로깅
│ ├── middleware/ # 미들웨어 (보안, CORS, 입력 검증)
│ ├── server/ # 서버 설정
│ └── mocks/ # Mock 클라이언트
├── pkg/ # 공개 패키지
│ ├── client/ # 클라이언트 인터페이스
│ │ ├── helm/ # Helm 클라이언트
│ │ ├── kubernetes/ # Kubernetes 클라이언트
│ │ ├── minio/ # MinIO 클라이언트
│ │ └── velero/ # Velero 클라이언트
│ ├── config/ # 설정 관리 (ConfigManager)
│ ├── types/ # 타입 정의 (kubernetes, minio, helm, velero)
│ └── utils/ # 유틸리티
├── docs/ # 문서 (Swagger)
├── docker/ # Docker 설정
├── .bruno/ # Bruno API 컬렉션
└── example/ # 사용 예제

Layered Architecture

┌──────────────────────────────────────────────────────────────┐
│ Presentation Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────┐ │
│ │ Kubernetes│ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Handler │ │ Handler │ │ Handler │ │ Handler │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────┘ │
└──────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ Business Layer │
│ ┌─────────────┐ ┌────────────┐ ┌───────────┐ ┌────────────┐ │
│ │ Kubernetes │ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Service │ │ Service │ │ Service │ │ Service │ │
│ └─────────────┘ └────────────┘ └───────────┘ └────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Common Services │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐ │ │
│ │ │ Job │ │ Installer │ │ Response │ │ │
│ │ │ Manager │ │ Service │ │ Manager │ │ │
│ │ └─────────────┘ └─────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ Data Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌───────────┐ ┌───────────┐ │
│ │ Kubernetes │ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Client │ │ Client │ │ Client │ │ Client │ │
│ └─────────────┘ └─────────────┘ └───────────┘ └───────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Infrastructure │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌────────────────────┐ │ │
│ │ │ Config │ │ Cache │ │ Validation │ │ │
│ │ │ Manager │ │ Manager │ │ Manager │ │ │
│ │ └─────────────┘ └─────────────┘ └────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘

환경 변수 설정

환경 변수설명기본값
SERVER_HOST서버 주소localhost
SERVER_PORT서버 포트9091
READ_TIMEOUT요청 읽기 타임아웃30s
WRITE_TIMEOUT응답 쓰기 타임아웃30s
IDLE_TIMEOUT연결 유지 타임아웃120s
HEALTH_CHECK_TIMEOUT헬스체크 요청 타임아웃5s
REQUEST_TIMEOUT일반 API 요청 타임아웃30s
LOG_LEVEL로그 레벨info
LOG_FORMAT로그 포맷json

API 구조

공통 엔드포인트

  • GET / : 서버 기본 정보
  • GET /api/v1/health : API 서버 상태 확인

Kubernetes API (/api/v1/kubernetes)

  • POST /health : Kubernetes 클러스터 연결 확인
  • GET /:kind : 통합 리소스 조회 (pods, services, deployments 등)
  • GET /:kind/:name : 특정 리소스 조회

Velero API (/api/v1/velero)

  • POST /health : Velero 연결 확인
  • POST /install : Velero 설치 및 MinIO 연동 (비동기)
  • GET /backups : Backup 목록 조회
  • POST /backups : Backup 생성
  • POST /backups/:backupName/validate : Backup 검증
  • GET /backups/:backupName : Backup 상세 조회
  • DELETE /backups/:backupName : Backup 삭제
  • GET /restores : Restore 목록 조회
  • POST /restores/:restoreName/validate : Restore 검증
  • GET /restores/:restoreName : Restore 상세 조회
  • DELETE /restores/:restoreName : Restore 삭제
  • GET /repositories : BackupRepository 조회
  • GET /storage-locations : BackupStorageLocation 조회
  • GET /volume-snapshot-locations : VolumeSnapshotLocation 조회
  • GET /pod-volume-restores : PodVolumeRestore 조회
  • GET /status/:jobId : 작업 상태 조회
  • GET /logs/:jobId : 작업 로그 조회

Helm API (/api/v1/helm)

  • POST /health : Helm 연결 확인
  • POST /charts : Helm 차트 설치 (URL 기반, 비동기)
  • GET /charts : 차트 목록 조회
  • GET /charts/:name : 특정 차트 상세 조회
  • GET /charts/:name/status : 차트 설치 상태 확인
  • PUT /charts/:name : 차트 업그레이드 (비동기)
  • GET /charts/:name/history : 차트 히스토리 조회
  • GET /charts/:name/values : 차트 값 조회
  • DELETE /charts/:name : 차트 제거 (비동기)
  • GET /status/:jobId : 작업 상태 조회
  • GET /logs/:jobId : 작업 로그 조회

MinIO API (/api/v1/minio)

  • POST /health : MinIO 연결 확인

버킷 관리

  • GET /buckets : 버킷 목록 조회
  • GET /buckets/:bucket : 버킷 존재 확인
  • POST /buckets/:bucket : 버킷 생성
  • DELETE /buckets/:bucket : 버킷 삭제

객체 관리

  • GET /buckets/:bucket/objects : 객체 목록 조회
  • POST /buckets/:bucket/objects/:objectName : 객체 업로드
  • GET /buckets/:bucket/objects/:objectName : 객체 다운로드
  • GET /buckets/:bucket/objects/:objectName : 객체 정보 조회
  • POST /buckets/:srcBucket/objects/:srcObject/copy/:dstBucket/:dstObject : 객체 복사
  • DELETE /buckets/:bucket/objects/:objectName : 객체 삭제

Presigned URL

  • GET /buckets/:bucket/objects/:objectName/presigned-get : Presigned GET URL 생성
  • PUT /buckets/:bucket/objects/:objectName/presigned-put : Presigned PUT URL 생성

사용 예제

Helm 차트 설치 (URL 기반)

curl -X POST "http://localhost:9091/api/v1/helm/charts" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig" }' \
-G \
--data-urlencode "releaseName=wordpress-test" \
--data-urlencode "chartURL=oci://registry-1.docker.io/bitnamicharts/wordpress" \
--data-urlencode "version=27.0.10" \
--data-urlencode "namespace=wordpress-test"

MinIO 객체 업로드

curl -X POST "http://localhost:9091/api/v1/minio/buckets/my-bucket/objects/test-file.txt" \
-F "file=@/path/to/local/file.txt" \
-F 'config={"endpoint":"192.168.1.100:9000","accessKey":"admin","secretKey":"password","useSSL":false}'

Kubernetes 리소스 조회

curl -X GET "http://localhost:9091/api/v1/kubernetes/:kind" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig", "namespace": "default" }'

Velero 백업 목록 조회

curl -X GET "http://localhost:9091/api/v1/velero/backups" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig" }'

Velero 설치 (비동기)

curl -X POST "http://localhost:9091/api/v1/velero/install?namespace=default&force=false" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig", "minio": { "endpoint": "192.168.1.100:9000", "accessKey": "admin", "secretKey": "password", "useSSL": false } }'

작업 상태 조회

curl -X GET "http://localhost:9091/api/v1/velero/status/{jobId}"

API 테스트

프로젝트에는 Bruno API 컬렉션이 포함되어 있어 쉽게 API를 테스트할 수 있습니다:

  1. Bruno 설치: Bruno 공식 사이트에서 다운로드
  2. 컬렉션 열기: .bruno/ 폴더를 Bruno에서 열기
  3. 환경 변수 설정: {{base_url}}, {{base64_local_kubeconfig}} 등 설정
  4. API 테스트: 각 서비스별로 분류된 요청들을 실행

Bruno 컬렉션 구조

.bruno/
├── 1_kube/ # Kubernetes API 테스트
├── 2_minio/ # MinIO API 테스트 ├── 3_helm/ # Helm API 테스트
└── velero/ # Velero API 테스트

최신 개선사항

에러 처리 개선

  • MinIO와 Velero API에서 발생하던 중복 에러 응답 문제 해결
  • 공통 에러 처리 함수로 일관된 에러 메시지 제공

설정 관리 통합

  • 중복된 설정 파싱 코드 제거
  • ConfigParser 인터페이스 기반 통합 파서 구현
  • 코드 재사용성 및 유지보수성 향상

성능 최적화

  • LRU 캐시에 TTL(Time To Live) 기능 추가
  • 만료된 항목 자동 정리 기능
  • 메모리 효율성 향상

보안 강화

  • 포괄적인 보안 미들웨어 구현
  • 보안 헤더 설정 (XSS, CSRF, HSTS 등)
  • CORS 정책 구현
  • 입력 데이터 정화 및 검증

테스트 커버리지 개선

  • 새로운 설정 파서들에 대한 포괄적인 테스트 추가
  • 에러 처리 로직 테스트 추가
  • 전체 프로젝트 테스트 통과 확인

라이선스

MIT License - 자세한 내용은 LICENSE 파일을 참조하세요.

기여하기

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

About

Kubernetes 백업·복구 및 멀티 클러스터 마이그레이션 관리 도구

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

KubeMigrate

KubeMigrate는 Kubernetes 클러스터 간 백업 및 복구 검증을 위한 종합적인 API 서버입니다.
멀티 클러스터 환경에서 Velero 기반 백업/복원 관리, Helm 및 MinIO 연동을 지원하며, 스토리지 클래스 비교 검증, 백업 무결성 확인, 복구 검증 등의 기능을 제공합니다.

Go VersionLicenseBuild Status

주요 기능

  • Kubernetes 관리: 클러스터 리소스 조회 및 관리 (통합 API)
  • Velero 통합: 백업/복원 작업 모니터링 및 관리 (비동기 처리)
  • Helm 지원: URL 기반 차트 설치, 업그레이드, 관리 (비동기 처리)
  • MinIO 연동: 객체 스토리지 버킷 및 파일 관리
  • RESTful API: 일관된 API 디자인으로 쉬운 통합
  • Swagger 문서: 자동 생성된 API 문서
  • Bruno 컬렉션: 포함된 API 테스트 도구
  • 고성능: LRU 캐시 및 워커 풀을 통한 최적화
  • 비동기 처리: Job Manager를 통한 장시간 작업 관리
  • 모니터링: 메모리 사용량 및 성능 모니터링
  • 보안: 포괄적인 보안 미들웨어 및 입력 검증
  • TTL 캐시: 만료 기반 캐시 관리로 메모리 효율성 향상

문서

클라이언트 라이브러리

Go SDK

설치 및 실행

사전 요구사항

  • Go 1.21 이상
  • Kubernetes 클러스터 접근 권한
  • Helm
  • MinIO
  • Velero CRD

설치 방법

# 레포지토리 클론
git clone https://github.com/taking/kubemigrate.git

실행 방법

# kubemigrate 폴더 이동cd kubemigrate
# 서버 실행
make runWithSwagger

빌드 및 기타

# 의존성 업데이트
make deps
# 빌드
make build-compressed
# 코드 포맷팅
make format
# 린트 검사
make lint
# Swagger 업데이트
make swagger

Docker를 이용한 실행

# Docker 이미지 빌드
make docker-build
# 컨테이너 실행
make docker-run
# 또는 docker-compose 사용
make compose-up

개발

프로젝트 구조

kubemigrate/
├── cmd/ # 메인 애플리케이션
├── internal/ # 내부 패키지
│ ├── api/ # API 핸들러 (kubernetes, minio, helm, velero)
│ │ ├── helm/ # Helm API 핸들러 + 서비스
│ │ ├── kubernetes/ # Kubernetes API 핸들러 + 서비스
│ │ ├── minio/ # MinIO API 핸들러 + 서비스
│ │ └── velero/ # Velero API 핸들러 + 서비스
│ ├── handler/ # 공통 핸들러 (BaseHandler)
│ ├── validator/ # 검증 로직 (ValidationManager)
│ ├── response/ # 응답 처리 (ResponseManager)
│ ├── job/ # 작업 관리 (JobManager, WorkerPool)
│ ├── installer/ # 설치 로직 (VeleroInstaller)
│ ├── cache/ # 캐시 관리 (LRU Cache with TTL)
│ ├── logger/ # 로깅
│ ├── middleware/ # 미들웨어 (보안, CORS, 입력 검증)
│ ├── server/ # 서버 설정
│ └── mocks/ # Mock 클라이언트
├── pkg/ # 공개 패키지
│ ├── client/ # 클라이언트 인터페이스
│ │ ├── helm/ # Helm 클라이언트
│ │ ├── kubernetes/ # Kubernetes 클라이언트
│ │ ├── minio/ # MinIO 클라이언트
│ │ └── velero/ # Velero 클라이언트
│ ├── config/ # 설정 관리 (ConfigManager)
│ ├── types/ # 타입 정의 (kubernetes, minio, helm, velero)
│ └── utils/ # 유틸리티
├── docs/ # 문서 (Swagger)
├── docker/ # Docker 설정
├── .bruno/ # Bruno API 컬렉션
└── example/ # 사용 예제

Layered Architecture

┌──────────────────────────────────────────────────────────────┐
│ Presentation Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────┐ │
│ │ Kubernetes│ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Handler │ │ Handler │ │ Handler │ │ Handler │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────┘ │
└──────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ Business Layer │
│ ┌─────────────┐ ┌────────────┐ ┌───────────┐ ┌────────────┐ │
│ │ Kubernetes │ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Service │ │ Service │ │ Service │ │ Service │ │
│ └─────────────┘ └────────────┘ └───────────┘ └────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Common Services │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐ │ │
│ │ │ Job │ │ Installer │ │ Response │ │ │
│ │ │ Manager │ │ Service │ │ Manager │ │ │
│ │ └─────────────┘ └─────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ Data Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌───────────┐ ┌───────────┐ │
│ │ Kubernetes │ │ MinIO │ │ Helm │ │ Velero │ │
│ │ Client │ │ Client │ │ Client │ │ Client │ │
│ └─────────────┘ └─────────────┘ └───────────┘ └───────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Infrastructure │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌────────────────────┐ │ │
│ │ │ Config │ │ Cache │ │ Validation │ │ │
│ │ │ Manager │ │ Manager │ │ Manager │ │ │
│ │ └─────────────┘ └─────────────┘ └────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘

환경 변수 설정

환경 변수설명기본값
SERVER_HOST서버 주소localhost
SERVER_PORT서버 포트9091
READ_TIMEOUT요청 읽기 타임아웃30s
WRITE_TIMEOUT응답 쓰기 타임아웃30s
IDLE_TIMEOUT연결 유지 타임아웃120s
HEALTH_CHECK_TIMEOUT헬스체크 요청 타임아웃5s
REQUEST_TIMEOUT일반 API 요청 타임아웃30s
LOG_LEVEL로그 레벨info
LOG_FORMAT로그 포맷json

API 구조

공통 엔드포인트

  • GET / : 서버 기본 정보
  • GET /api/v1/health : API 서버 상태 확인

Kubernetes API (/api/v1/kubernetes)

  • POST /health : Kubernetes 클러스터 연결 확인
  • GET /:kind : 통합 리소스 조회 (pods, services, deployments 등)
  • GET /:kind/:name : 특정 리소스 조회

Velero API (/api/v1/velero)

  • POST /health : Velero 연결 확인
  • POST /install : Velero 설치 및 MinIO 연동 (비동기)
  • GET /backups : Backup 목록 조회
  • POST /backups : Backup 생성
  • POST /backups/:backupName/validate : Backup 검증
  • GET /backups/:backupName : Backup 상세 조회
  • DELETE /backups/:backupName : Backup 삭제
  • GET /restores : Restore 목록 조회
  • POST /restores/:restoreName/validate : Restore 검증
  • GET /restores/:restoreName : Restore 상세 조회
  • DELETE /restores/:restoreName : Restore 삭제
  • GET /repositories : BackupRepository 조회
  • GET /storage-locations : BackupStorageLocation 조회
  • GET /volume-snapshot-locations : VolumeSnapshotLocation 조회
  • GET /pod-volume-restores : PodVolumeRestore 조회
  • GET /status/:jobId : 작업 상태 조회
  • GET /logs/:jobId : 작업 로그 조회

Helm API (/api/v1/helm)

  • POST /health : Helm 연결 확인
  • POST /charts : Helm 차트 설치 (URL 기반, 비동기)
  • GET /charts : 차트 목록 조회
  • GET /charts/:name : 특정 차트 상세 조회
  • GET /charts/:name/status : 차트 설치 상태 확인
  • PUT /charts/:name : 차트 업그레이드 (비동기)
  • GET /charts/:name/history : 차트 히스토리 조회
  • GET /charts/:name/values : 차트 값 조회
  • DELETE /charts/:name : 차트 제거 (비동기)
  • GET /status/:jobId : 작업 상태 조회
  • GET /logs/:jobId : 작업 로그 조회

MinIO API (/api/v1/minio)

  • POST /health : MinIO 연결 확인

버킷 관리

  • GET /buckets : 버킷 목록 조회
  • GET /buckets/:bucket : 버킷 존재 확인
  • POST /buckets/:bucket : 버킷 생성
  • DELETE /buckets/:bucket : 버킷 삭제

객체 관리

  • GET /buckets/:bucket/objects : 객체 목록 조회
  • POST /buckets/:bucket/objects/:objectName : 객체 업로드
  • GET /buckets/:bucket/objects/:objectName : 객체 다운로드
  • GET /buckets/:bucket/objects/:objectName : 객체 정보 조회
  • POST /buckets/:srcBucket/objects/:srcObject/copy/:dstBucket/:dstObject : 객체 복사
  • DELETE /buckets/:bucket/objects/:objectName : 객체 삭제

Presigned URL

  • GET /buckets/:bucket/objects/:objectName/presigned-get : Presigned GET URL 생성
  • PUT /buckets/:bucket/objects/:objectName/presigned-put : Presigned PUT URL 생성

사용 예제

Helm 차트 설치 (URL 기반)

curl -X POST "http://localhost:9091/api/v1/helm/charts" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig" }' \
-G \
--data-urlencode "releaseName=wordpress-test" \
--data-urlencode "chartURL=oci://registry-1.docker.io/bitnamicharts/wordpress" \
--data-urlencode "version=27.0.10" \
--data-urlencode "namespace=wordpress-test"

MinIO 객체 업로드

curl -X POST "http://localhost:9091/api/v1/minio/buckets/my-bucket/objects/test-file.txt" \
-F "file=@/path/to/local/file.txt" \
-F 'config={"endpoint":"192.168.1.100:9000","accessKey":"admin","secretKey":"password","useSSL":false}'

Kubernetes 리소스 조회

curl -X GET "http://localhost:9091/api/v1/kubernetes/:kind" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig", "namespace": "default" }'

Velero 백업 목록 조회

curl -X GET "http://localhost:9091/api/v1/velero/backups" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig" }'

Velero 설치 (비동기)

curl -X POST "http://localhost:9091/api/v1/velero/install?namespace=default&force=false" \
-H "Content-Type: application/json" \
-d '{ "kubeconfig": "base64_encoded_kubeconfig", "minio": { "endpoint": "192.168.1.100:9000", "accessKey": "admin", "secretKey": "password", "useSSL": false } }'

작업 상태 조회

curl -X GET "http://localhost:9091/api/v1/velero/status/{jobId}"

API 테스트

프로젝트에는 Bruno API 컬렉션이 포함되어 있어 쉽게 API를 테스트할 수 있습니다:

  1. Bruno 설치: Bruno 공식 사이트에서 다운로드
  2. 컬렉션 열기: .bruno/ 폴더를 Bruno에서 열기
  3. 환경 변수 설정: {{base_url}}, {{base64_local_kubeconfig}} 등 설정
  4. API 테스트: 각 서비스별로 분류된 요청들을 실행

Bruno 컬렉션 구조

.bruno/
├── 1_kube/ # Kubernetes API 테스트
├── 2_minio/ # MinIO API 테스트 ├── 3_helm/ # Helm API 테스트
└── velero/ # Velero API 테스트

최신 개선사항

에러 처리 개선

  • MinIO와 Velero API에서 발생하던 중복 에러 응답 문제 해결
  • 공통 에러 처리 함수로 일관된 에러 메시지 제공

설정 관리 통합

  • 중복된 설정 파싱 코드 제거
  • ConfigParser 인터페이스 기반 통합 파서 구현
  • 코드 재사용성 및 유지보수성 향상

성능 최적화

  • LRU 캐시에 TTL(Time To Live) 기능 추가
  • 만료된 항목 자동 정리 기능
  • 메모리 효율성 향상

보안 강화

  • 포괄적인 보안 미들웨어 구현
  • 보안 헤더 설정 (XSS, CSRF, HSTS 등)
  • CORS 정책 구현
  • 입력 데이터 정화 및 검증

테스트 커버리지 개선

  • 새로운 설정 파서들에 대한 포괄적인 테스트 추가
  • 에러 처리 로직 테스트 추가
  • 전체 프로젝트 테스트 통과 확인

라이선스

MIT License - 자세한 내용은 LICENSE 파일을 참조하세요.

기여하기

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

About

Kubernetes 백업·복구 및 멀티 클러스터 마이그레이션 관리 도구

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages