1. 배경
쿠버네티스 클러스터 단위의 작업을 진행하기 위해 운영 중인 애플리케이션을 혹시 모를 이슈를 대비하기 위해서 백업을 필수로 진행합니다. 이러한 백업 툴로 가장 많이 사용하는 게 VMware에서 오픈소스로 개발한 Velero입니다. 실제로 운영 과정에서 업그레이드나 인증서 교체 등 클러스터 영역에서 작업할 때 사전에 백업을 진행하기도 하고, 운영 환경에서 발생한 애플리케이션의 에러를 디버깅하기 위하여 Velero를 통해 백업한 후 테스트 환경으로 동일한 이슈 환경을 만들어서 디버깅을 진행하기도 합니다. 이를 위하여 쿠버네티스에서 백업을 하는 방법을 테스트 한 내용을 기록합니다.
Velero를 사용하기 위해서는 Snapshot을 저장하기 위하여 S3가 필요합니다. 테스트 환경에서는 AWS와 Minio를 사용합니다.
1. minio 설치
minio 설치를 위해 공식 헬름에서 values.yaml 파일을 다운받아 필요한 부분을 변경합니다. 현재 설정에서는 accessKey
, secretKey
와 Size
만 변경하여 설치하였습니다.
helm install minio minio/minio -f minio/values.yaml
헬름을 통해 Minio가 배포되면 아래 mc 커맨드를 통해 정상적으로 통신되는지 확인합니다. 이후 백업 데이터를 저장하기 위한 Bucket을 생성합니다.
2. Velero 설치
2-1. Velero Client 설치
Github release를 통해 설치
wget https://github.com/vmware-tanzu/velero/releases/download/v1.10.1/velero-v1.10.1-linux-amd64.tar.gz
tar -xvf velero-v1.10.1-linux-amd64.tar.gz
cp velero /usr/bin/
2-2. Velero Server 설치
Helm chart 를 이용하거나 위에서 설치한 client를 통해 설치할 수 있습니다. 서버 설치를 위해 Snapshot 및 백업 파일을 저장하기 위한 S3에 대한 정보가 필요한데, 해당 테스트에서는 minio를 통해 구성합니다. Minio credential 파일을 생성합니다.
#minio-credential
[default]
aws_access_key_id = [user]
aws_secret_access_key = [password]
이후 velero install 명령어를 통해 Server를 설치합니다. 서버를 설치하기 위해서 Snapshot 데이터를 저장하기 위하여 volume과 통신이 가능하도록 플러그인을 설치해야 되는데, 이를 위하여 지원 가능한 Provieder를 선택해서 설치 해야 된다
velero install --provider aws --plugins velero/velero-plugin-for-aws:v1.2.1 \
--bucket k8s-snapshot \
--secret-file minio-credential \
--use-volume-snapshots=false \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url="http://minio.minio.svc:9000"
#aws bucket 대상으로 velero 설치
velero install --provider aws \
--plugins velero/velero-plugin-for-aws:v1.2.1 \
--bucket k8s-snapshot --provider aws \
--secret-file ./aws_configure --backup-location-config region=ap-northeast2 --snapshot-location-config region=ap-northeast2 --use-restic
이후 설치가 완료되면 velero라는 namespace에 파드가 생성된 것을 확인할 수 있습니다.
2-3. Minio Snapshot 생성 테스트
설치가 완료 되면 테스트를 위해 examples 파일을 통해 Nginx 파드를 생성하고 백업을 진행합니다.
velero backup create nginx-backup --include-namespaces nginx-example
백업이 성공적으로 이루어지면 Bucket에서도 해당 파일을 찾을 수 있습니다.
이후 namespace를 지운 후 velero restore create --from-backup nginx-backup
커맨드를 통해 백업 시 제거했던 리소스가 생성된 것을 확인할 수 있습니다.
데이터를 포함한 스냅샷을 테스트하기 위해 with-pv.yaml 파일을 통해 PV가 있는 nginx 파드를 생성합니다. 해당 파드의 경우 /var/log/nginx
경로를 attach 하기 때문에 해당 경로에 테스트용 파일을 생성합니다.
이후 위와 동일한 방식으로 백업을 생성 후 restore를 진행하면 다음과 같이 데이터가 유지되는 것을 확인할 수 있습니다.
다만 이러한 데이터 백업을 위해서는 스토리지 클래스의 reclaimPolicy
가 retain
으로 설정되어야 됩니다.
'Kubernetes' 카테고리의 다른 글
Github Action/ Argo CD를 이용한 CI/CD 구성 (0) | 2024.01.14 |
---|---|
ETCD MultiMaster Backup/Restore(CronJob 생성) (1) | 2023.11.14 |
EFK Stack을 이용한 쿠버네티스 로깅 스택 구축#2 (0) | 2023.10.12 |
EFK Stack을 이용한 쿠버네티스 로깅 스택 구축#1 (0) | 2023.10.12 |
Thanos를 이용한 Prometheus HA 구성 (1) | 2023.10.12 |