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 환경 구축 전략
- Primary Cluster (운영 클러스터)
- Velero를 통해 정기적인 백업 수행
- Backup Cluster (DR 클러스터)
- 운영 클러스터에서 백업 데이터를 주기적으로 동기화
- 백업 데이터를 이용해 필요 시 즉시 복구
✅ DR 클러스터에서 백업 데이터 복원
velero backup get # 백업 목록 확인
velero restore create --from-backup my-backup
6. 멀티 클러스터 백업 및 중앙 집중식 백업 관리
대규모 환경에서는 여러 개의 Kubernetes 클러스터를 운영할 수 있으며, 이를 위한 중앙 집중식 백업이 필요합니다.
✅ Velero 멀티 클러스터 아키텍처
- 각 클러스터마다 Velero 배포
- 중앙 Velero 관리 서버 운영
- S3 버킷을 공유하여 멀티 클러스터 백업 통합 관리
✅ 멀티 클러스터에서 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 기반 자동 복구
- GitOps 파이프라인에서 백업 정책 및 스케줄 관리
- 특정 시점에서 자동 복구 실행
velero restore create --from-backup latest-backup
마지막 수정일자