콘텐츠로 이동

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 다운로드

이미지 가져오기

 gunzip -c velero-amd64.tar.gz | docker load
gunzip velero-amd64.tar.gz
ctr -n=k8s.io images import velero-amd64.tar
 gunzip -c velero-arm64.tar.gz | docker load
gunzip velero-arm64.tar.gz
ctr -n=k8s.io images import velero-arm64.tar

사전 요구 사항

  • 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인 경우 버킷 구성을 생략하세요:

aws s3api create-bucket \
    --bucket $BUCKET \
    --region us-east-1

Velero에 권한 설정

다음 방법은 IAM 사용자를 통해 권한을 설정하는 방법입니다. 다른 방법은 kube2iam을 사용한 권한 설정을 참조하세요.

자세한 내용은 IAM 사용자에 대한 AWS 문서를 참조하세요.

  1. IAM 사용자 생성:
aws iam create-user --user-name velero

여러 S3 버킷을 사용하는 여러 클러스터를 Velero로 백업하는 경우, 기본값인 velero 대신 각 클러스터에 고유한 사용자 이름을 생성하는 것이 좋습니다.

  1. 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
  1. 사용자에 대한 액세스 키 생성:
aws iam create-access-key --user-name velero

예상 출력:

{
  "AccessKey": {
        "UserName": "velero",
        "Status": "Active",
        "CreateDate": "2017-07-31T22:24:41.576Z",
        "SecretAccessKey": <AWS_SECRET_ACCESS_KEY>,
        "AccessKeyId": <AWS_ACCESS_KEY_ID>
  }
}
  1. 로컬 디렉터리에 Velero 전용 자격 증명 파일(credentials-velero) 생성:
[default]
aws_access_key_id=<AWS_ACCESS_KEY_ID>
aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>

OSS 버킷 생성

Velero는 백업을 저장할 오브젝트 스토리지 버킷이 필요하며, 단일 Kubernetes 클러스터 전용 버킷을 사용하는 것이 좋습니다. 플레이스홀더를 적절히 교체하여 OSS 버킷을 생성하세요:

BUCKET=<YOUR_BUCKET>
REGION=<YOUR_REGION>
ossutil mb oss://$BUCKET \
        --storage-class Standard \
        --acl=private

RAM 사용자 생성

  1. 사용자 생성

Alibaba Cloud 문서의 RAM 사용자 가이드를 참조하세요.

여러 OSS 버킷을 사용하는 여러 클러스터를 Velero로 백업하는 경우, 기본값인 Velero 대신 각 클러스터에 고유한 사용자 이름을 생성하는 것이 좋습니다.

  1. 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"
        }
    ]
}
3. 사용자에 대한 액세스 키 생성:

Alibaba Cloud 문서의 AK 생성을 참조하세요.

  1. 설치 디렉터리에 Velero 전용 자격 증명 파일(credentials-velero) 생성:
ALIBABA_CLOUD_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
ALIBABA_CLOUD_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>

Velero CLI 설치 및 구성

CLI 설치

wget https://static.guance.com/dataflux/package/velero-v1.13.0-linux-amd64.tar.gz && tar -xvf velero-v1.13.0-linux-amd64.tar.gz && mv velero-v1.13.0-linux-amd64/velero /bin
wget https://static.guance.com/dataflux/package/velero-v1.13.0-linux-arm64.tar.gz && tar -xvf velero-v1.13.0-linux-arm64.tar.gz && mv velero-v1.13.0-linux-arm64/velero /bin

오프라인 설치(선택 사항) CLI

tar -xvf velero-v1.13.0-linux-amd64.tar.gz && mv velero-v1.13.0-linux-amd64/velero /bin
tar -xvf velero-v1.13.0-linux-arm64.tar.gz && mv velero-v1.13.0-linux-arm64/velero /bin

설치 확인

velero -h

실행

환경 변수 설정:

BUCKET=<YOUR_BUCKET>
REGION=<YOUR_REGION>
BUCKETPATH=<YOUR_BUCKETPATH>

초기화 명령 실행:

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으로 변경하세요.

환경 변수 설정:

BUCKET=<YOUR_BUCKET>
REGION=<YOUR_REGION>
BUCKETPATH=<YOUR_BUCKETPATH>

초기화 명령 실행:

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

확인

테스트 서비스 생성
kubectl create deployment demo --image=nginx
kubectl get pod
백업

백업 명령 실행:

velero backup create demo

백업 확인 명령:

$ 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>
삭제 및 복원 테스트

서비스 삭제:

$ kubectl delete -n default deploy demo

deployment.apps "demo" deleted

복원:

$ 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}}

확인:

$ kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
demo-68b4b4d5bf-qxr26   1/1     Running   0          46s

정기 백업 설정

매일 새벽 백업(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

제거

rm -f /bin/velero

velero uninstall

기타

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

문서 평가

이 페이지가 도움이 되었나요?