Velero 고급 활용 및 운영

Velero 고급 활용 및 운영

🔟 Velero 고급 활용 및 운영

1. Velero Custom Plugin 개발

Velero는 플러그인 아키텍처를 지원하며, 커스텀 플러그인을 개발하여 백업 및 복구 프로세스를 확장할 수 있습니다.

✅ Velero 플러그인 유형

  • ObjectStore Plugin: S3, GCS, MinIO와 같은 스토리지와 연동
  • VolumeSnapshotter Plugin: EBS, Azure Disk, GCE PD 등의 스냅샷 관리
  • BackupItemAction Plugin: 특정 Kubernetes 리소스 백업 시 추가 로직 수행
  • RestoreItemAction Plugin: 특정 Kubernetes 리소스 복구 시 추가 로직 수행

✅ Velero Custom Plugin 예제 (GoLang)

package main

import (
	"github.com/vmware-tanzu/velero/pkg/plugin/framework"
	"github.com/vmware-tanzu/velero/pkg/plugin/velero"
	"log"
)

type MyBackupPlugin struct {
	velero.BackupItemAction
}

func (p *MyBackupPlugin) AppliesTo() (velero.ResourceSelector, error) {
	return velero.ResourceSelector{
		IncludedResources: []string{"pods"},
	}, nil
}

func (p *MyBackupPlugin) Execute(input *velero.BackupItemActionExecuteInput) (*velero.BackupItemActionExecuteOutput, error) {
	log.Println("Custom Velero Plugin Executed!")
	return &velero.BackupItemActionExecuteOutput{UpdatedItem: input.Item}, nil
}

func main() {
	framework.NewServer().
		RegisterBackupItemAction("mycompany.io/my-plugin", &MyBackupPlugin{}).
		Serve()
}

2. Velero Hooks 활용한 사전/사후 작업 자동화

Velero는 Hooks 기능을 제공하여 백업 및 복구 전에 특정 작업을 수행할 수 있습니다.

✅ 백업 전 특정 Pod에서 mysqldump 실행하는 Hook 예제

apiVersion: velero.io/v1
kind: Backup
metadata:
  name: mysql-backup
spec:
  hooks:
    resources:
      - name: mysql-pod
        includedNamespaces:
          - database
        pre:
          - exec:
              container: mysql
              command: ["mysqldump", "-uroot", "-p$MYSQL_ROOT_PASSWORD", "mydatabase", ">", "/backup/db.sql"]
              timeout: 60s
  • pre 훅을 이용하여 백업 전에 데이터베이스 덤프 수행

3. 대규모 Kubernetes 클러스터에서 Velero 운영 전략

대규모 클러스터에서는 다음과 같은 전략을 고려해야 합니다.

✅ 네임스페이스 기반 백업 분리

  • 워크로드별 백업 정책을 분리하여 특정 네임스페이스만 백업
velero backup create app-backup --include-namespaces=myapp

✅ 병렬 백업 및 복구 성능 최적화

  • Velero를 여러 개 실행하여 병렬로 백업 수행
spec:
  backups:
    concurrent: 5  # 동시에 5개의 백업 수행

✅ 장기 보관 정책 적용 (Retention Policy)

velero backup create my-backup --ttl 168h  # 7일간 보관

4. Velero 성능 튜닝 및 최적화

대규모 백업 환경에서는 백업 성능 최적화가 필요합니다.

✅ CPU & 메모리 리소스 제한 조정

spec:
  template:
    spec:
      containers:
      - name: velero
        resources:
          requests:
            cpu: "500m"
            memory: "512Mi"
          limits:
            cpu: "2"
            memory: "2Gi"
  • 기본적으로 cpu: 500m, memory: 512Mi 요청 → 필요 시 2CPU, 2Gi로 확장

✅ 병렬 업로드 활성화

velero backup create my-backup --snapshot-volumes=true --default-volumes-to-restic
  • Restic을 활성화하여 병렬 업로드 가능

5. Velero 장애 복구 및 DR(Disaster Recovery) 구축

Velero를 활용하여 재해 복구(Disaster Recovery, DR) 시스템을 구축할 수 있습니다.

✅ DR 환경 구축 전략

  1. Primary Cluster (운영 클러스터)
    • Velero를 통해 정기적인 백업 수행
  2. Backup Cluster (DR 클러스터)
    • 운영 클러스터에서 백업 데이터를 주기적으로 동기화
    • 백업 데이터를 이용해 필요 시 즉시 복구

✅ DR 클러스터에서 백업 데이터 복원

velero backup get  # 백업 목록 확인
velero restore create --from-backup my-backup

6. 멀티 클러스터 백업 및 중앙 집중식 백업 관리

대규모 환경에서는 여러 개의 Kubernetes 클러스터를 운영할 수 있으며, 이를 위한 중앙 집중식 백업이 필요합니다.

✅ Velero 멀티 클러스터 아키텍처

  • 각 클러스터마다 Velero 배포
  • 중앙 Velero 관리 서버 운영
  • S3 버킷을 공유하여 멀티 클러스터 백업 통합 관리

Velero Multi Cluster Architecture

✅ 멀티 클러스터에서 Velero 백업 실행

kubectl config use-context cluster-a
velero backup create cluster-a-backup --include-namespaces=app1,app2

kubectl config use-context cluster-b
velero backup create cluster-b-backup --include-namespaces=app3,app4
  • 클러스터별로 백업을 개별 실행

7. Velero를 GitOps 파이프라인과 통합하여 자동 백업/복구

Velero를 ArgoCD, Flux 같은 GitOps 도구와 연동하여 자동 백업 및 복구를 설정할 수 있습니다.

✅ ArgoCD에서 Velero 백업을 자동화하는 예제

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: velero-backup
spec:
  destination:
    server: "https://kubernetes.default.svc"
  source:
    repoURL: "https://github.com/my-org/velero-backup"
    path: "deploy"
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
  • syncPolicy.automated를 활성화하여 Velero 백업을 Git 상태와 동기화

✅ GitOps 기반 자동 복구

  1. GitOps 파이프라인에서 백업 정책 및 스케줄 관리
  2. 특정 시점에서 자동 복구 실행
velero restore create --from-backup latest-backup

RSS Feed
마지막 수정일자