Guance 클러스터 백업 및 복구¶
주의사항
본 문서에서 설명하는 Velero는 Kubernetes 구성을 백업하며(YAML 파일), PVC 볼륨의 데이터는 포함하지 않습니다.
개요¶
Velero는 오픈소스 도구로, Kubernetes 클러스터 리소스와 퍼시스턴트 볼륨을 안전하게 백업, 복원, 재해 복구 및 마이그레이션할 수 있습니다.
-
재해 복구 Velero는 인프라 손실, 데이터 손상 및/또는 서비스 중단 시 복구 시간을 단축할 수 있습니다.
-
데이터 마이그레이션 Velero는 Kubernetes 리소스를 한 클러스터에서 다른 클러스터로 쉽게 마이그레이션하여 클러스터 이식성을 제공합니다.
-
데이터 보호 예약된 백업, 보존 계획, 사용자 지정 작업을 위한 백업 전/후 훅과 같은 주요 데이터 보호 기능을 제공합니다.
-
클러스터 백업 namespace resources 또는 label selector를 사용하여 전체 클러스터 또는 일부 클러스터의 Kubernetes 리소스와 볼륨을 백업합니다.
-
정기 백업 일정을 설정하여 정기적으로 백업을 자동 실행합니다.
-
백업 훅 Velero 백업 전후에 사용자 지정 작업을 수행하도록 백업 전/후 훅을 구성합니다.
기본 정보 및 호환성¶
| 이름 | 설명 |
|---|---|
| Velero 버전 | 1.13.0 |
| 오프라인 설치 지원 여부 | 예 |
| 지원 아키텍처 | amd64/arm64 |
오프라인 패키지 목록¶
| 이름 | 다운로드 주소 |
|---|---|
| Velero-cli | Amd 다운로드 Arm 다운로드 |
| Velero 이미지 | Amd 다운로드 Arm 다운로드 |
이미지 가져오기¶
사전 요구 사항¶
- Kubernetes 클러스터가 배포되어 있어야 하며, 배포되지 않은 경우 Kubernetes 배포를 참조하세요. 또한 kubectl을 사용하여 클러스터를 제어할 수 있어야 합니다.
Velero 설치¶
오브젝트 스토리지 설정¶
S3 버킷 생성¶
Velero는 백업을 저장할 오브젝트 스토리지 버킷이 필요하며, 단일 Kubernetes 클러스터 전용 버킷을 사용하는 것이 좋습니다(자세한 내용은 FAQ 참조). 플레이스홀더를 적절히 교체하여 S3 버킷을 생성하세요:
BUCKET=<YOUR_BUCKET>
REGION=<YOUR_REGION>
aws s3api create-bucket \
--bucket $BUCKET \
--region $REGION \
--create-bucket-configuration LocationConstraint=$REGION
us-east-1은 LocationConstraint를 지원하지 않습니다. 리전이 us-east-1인 경우 버킷 구성을 생략하세요:
Velero에 권한 설정¶
다음 방법은 IAM 사용자를 통해 권한을 설정하는 방법입니다. 다른 방법은 kube2iam을 사용한 권한 설정을 참조하세요.
자세한 내용은 IAM 사용자에 대한 AWS 문서를 참조하세요.
- IAM 사용자 생성:
여러 S3 버킷을 사용하는 여러 클러스터를 Velero로 백업하는 경우, 기본값인 velero 대신 각 클러스터에 고유한 사용자 이름을 생성하는 것이 좋습니다.
- velero에 필요한 권한을 부여하는 정책 연결:
cat > velero-policy.json <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeVolumes",
"ec2:DescribeSnapshots",
"ec2:CreateTags",
"ec2:CreateVolume",
"ec2:CreateSnapshot",
"ec2:DeleteSnapshot"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:DeleteObject",
"s3:PutObject",
"s3:AbortMultipartUpload",
"s3:ListMultipartUploadParts"
],
"Resource": [
"arn:aws:s3:::${BUCKET}/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::${BUCKET}"
]
}
]
}
EOF
aws iam put-user-policy \
--user-name velero \
--policy-name velero \
--policy-document file://velero-policy.json
- 사용자에 대한 액세스 키 생성:
예상 출력:
{
"AccessKey": {
"UserName": "velero",
"Status": "Active",
"CreateDate": "2017-07-31T22:24:41.576Z",
"SecretAccessKey": <AWS_SECRET_ACCESS_KEY>,
"AccessKeyId": <AWS_ACCESS_KEY_ID>
}
}
- 로컬 디렉터리에 Velero 전용 자격 증명 파일(
credentials-velero) 생성:
OSS 버킷 생성¶
Velero는 백업을 저장할 오브젝트 스토리지 버킷이 필요하며, 단일 Kubernetes 클러스터 전용 버킷을 사용하는 것이 좋습니다. 플레이스홀더를 적절히 교체하여 OSS 버킷을 생성하세요:
BUCKET=<YOUR_BUCKET>
REGION=<YOUR_REGION>
ossutil mb oss://$BUCKET \
--storage-class Standard \
--acl=private
RAM 사용자 생성¶
- 사용자 생성
Alibaba Cloud 문서의 RAM 사용자 가이드를 참조하세요.
여러 OSS 버킷을 사용하는 여러 클러스터를 Velero로 백업하는 경우, 기본값인 Velero 대신 각 클러스터에 고유한 사용자 이름을 생성하는 것이 좋습니다.
- velero에 필요한 권한을 부여하는 정책 연결:
보안상의 이유로 백업 또는 복원 작업 완료 후 velero의 삭제 권한을 해제하는 것이 좋습니다.
{
"Version": "1",
"Statement": [
{
"Action": [
"ecs:DescribeSnapshots",
"ecs:CreateSnapshot",
"ecs:DeleteSnapshot",
"ecs:DescribeDisks",
"ecs:CreateDisk",
"ecs:Addtags",
"oss:PutObject",
"oss:GetObject",
"oss:DeleteObject",
"oss:GetBucket",
"oss:ListObjects",
"oss:ListBuckets"
],
"Resource": [
"*"
],
"Effect": "Allow"
}
]
}
Alibaba Cloud 문서의 AK 생성을 참조하세요.
- 설치 디렉터리에 Velero 전용 자격 증명 파일(
credentials-velero) 생성:
Velero CLI 설치 및 구성¶
CLI 설치¶
오프라인 설치(선택 사항) CLI¶
설치 확인¶
실행¶
환경 변수 설정:
초기화 명령 실행:
velero install \
--provider aws \
--image pubrepo.guance.com/googleimages/velero:v1.13.0 \
--plugins pubrepo.guance.com/googleimages/velero-plugin-for-aws:v1.9.0 \
--bucket $BUCKET \
--backup-location-config region=$REGION \
--snapshot-location-config region=$REGION \
--secret-file ./credentials-velero \
--prefix $BUCKETPATH \
--backup-location-config s3ForcePathStyle="true",s3Url=https://s3.$BUCKET.amazonaws.com.cn
해외 노드인 경우 s3Url을
https://s3.$BUCKET.amazonaws.com으로 변경하세요.
환경 변수 설정:
초기화 명령 실행:
velero install \
--provider alibabacloud \
--image pubrepo.guance.com/googleimages/velero:v1.13.0 \
--bucket $BUCKET \
--secret-file ./credentials-velero \
--use-volume-snapshots=false \
--backup-location-config region=$REGION \
--prefix $BUCKETPATH \
--plugins pubrepo.guance.com/googleimages/velero-plugin-alibabacloud:v1.9.6-581f313-aliyun
확인¶
테스트 서비스 생성¶
백업¶
백업 명령 실행:
백업 확인 명령:
$ velero get backup
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
demo Completed 0 0 2024-03-04 18:31:28 +0800 CST 29d default <none>
삭제 및 복원 테스트¶
서비스 삭제:
복원:
$ velero restore create --from-backup demo --include-namespaces default --selector app=demo
Restore request "demo-20240304184105" submitted successfully.
Run `velero restore describe demo-20240304184105` or `velero restore logs demo-20240304184105` for more details.
velero restore create --from-backup {{backup_name}} --restore-volumes --include-namespaces {{namespace_name}} --selector app={{app_label}}
확인:
정기 백업 설정¶
매일 새벽 백업(PVC 데이터 제외), 7일 보관
$ velero create schedule all-guance --schedule="0 01 * * *" --ttl 168h
$ velero get schedule
NAME STATUS CREATED SCHEDULE BACKUP TTL LAST BACKUP SELECTOR PAUSED
all-guance Enabled 2024-03-04 18:44:55 +0800 CST 0 1 * * * 168h0m0s n/a <none> false
제거¶
기타¶
관련 명령어¶
velero get backup #백업 조회
velero get schedule #정기 백업 조회
velero get restore #기존 복원 조회
velero get plugins #플러그인 조회
velero restore create --from-backup all-ns-backup #클러스터 전체 백업 복원(기존 서비스는 덮어쓰지 않음)
velero restore create --from-backup all-ns-backup --include-namespaces default,nginx-example #default, nginx-example 네임스페이스만 복원
Velero는 리소스를 백업 소스와 다른 네임스페이스로 복원할 수 있습니다. 이 경우 --namespace-mappings 플래그를 사용하세요.
velero restore create RESTORE_NAME --from-backup BACKUP_NAME --namespace-mappings old-ns-1:new-ns-1,old-ns-2:new-ns-2
예를 들어 아래 명령은 test-velero 네임스페이스 리소스를 test-velero-1로 복원합니다.
velero restore create restore-for-test --from-backup everyday-1-20210203131802 --namespace-mappings test-velero:test-velero-1
#정기 백업
velero create schedule prd-aws-df --schedule="0 1 * * *" --ttl 168h