「 Velero 」操作元数据

「 Velero 」操作元数据


based on v1.6.3

部署 MinIO 服务

以 Velero 提供的 MinIO 服务 进行 DEMO 验证,为了便于操作将 ClusterIP 改为 NodePort

部署结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# kubectl get all -n velero -l component=minio
NAME READY STATUS RESTARTS AGE
pod/minio-54b5867494-28dvt 1/1 Running 0 80s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/minio NodePort 10.96.107.103 <none> 9000:30188/TCP 80s

NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/minio 1/1 1 1 80s

NAME DESIRED CURRENT READY AGE
replicaset.apps/minio-54b5867494 1 1 1 80s

NAME COMPLETIONS DURATION AGE
job.batch/minio-setup 1/1 6s 80s

账号密码通过 MinIO 服务中 MINIO_ACCESS_KEY 和 MINIO_SECRET_KEY 环境变量设置,登陆后效果如下:

其中,minio-setup 的 Job 已经创建出了一个名为 velero 的 Bucket

准备认证文件

1
2
3
4
5
$ cat > credentials-velero <<EOF
[default]
aws_access_key_id = minio
aws_secret_access_key = minio123
EOF

部署 Velero 服务

命令行安装

1
2
3
4
5
6
7
$ velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.0.0 \
--bucket velero \
--secret-file ./credentials-velero \
--use-volume-snapshots=false \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio.velero.svc:9000

参数说明

  • provider 指定 plugin 的 provider,默认格式为 x/y,如果省略 x 部分,则默认为 velero.io,需要与 plugin 注册的保持一致
  • plugins 指定 plugin 使用的镜像
  • bucket 为对象存储中的存储桶概念
  • secret-file 用于与后端存储服务认证的信息,如果存储服务不需要凭证,则将 secret-file 替换成 no-secret
  • use-volume-snapshots 是否自动创建一个 SnapshotLocation,如果不打算通过创建卷快照,则设置为 false,默认为 true
  • backup-location-config 为默认的 BackupStorageLocation 信息,可以在部署 Velero 后增量配置

部署结果

1
2
3
4
5
6
7
8
9
$ kubectl get all -n velero -l component=velero
NAME READY STATUS RESTARTS AGE
pod/velero-64b8fddd66-fqdvt 1/1 Running 0 32s

NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/velero 1/1 1 1 32s

NAME DESIRED CURRENT READY AGE
replicaset.apps/velero-64b8fddd66 1 1 1 32s
1
2
3
4
5
6
7
8
9
10
11
12
13
$ kubectl get crd -l component=velero
NAME CREATED AT
backups.velero.io 2022-11-07T08:54:56Z
backupstoragelocations.velero.io 2022-11-07T08:54:56Z
deletebackuprequests.velero.io 2022-11-07T08:54:56Z
downloadrequests.velero.io 2022-11-07T08:54:56Z
podvolumebackups.velero.io 2022-11-07T08:54:56Z
podvolumerestores.velero.io 2022-11-07T08:54:56Z
resticrepositories.velero.io 2022-11-07T08:54:56Z
restores.velero.io 2022-11-07T08:54:56Z
schedules.velero.io 2022-11-07T08:54:56Z
serverstatusrequests.velero.io 2022-11-07T08:54:56Z
volumesnapshotlocations.velero.io 2022-11-07T08:54:56Z
1
2
3
$ velero backup-location get
NAME PROVIDER BUCKET/PREFIX PHASE LAST VALIDATED ACCESS MODE DEFAULT
default aws velero Available 2022-11-07 16:55:06 +0800 CST ReadWrite true

流程验证

以 Velero 提供的基础 nginx 服务进行 DEMO 验证

1
2
3
4
5
6
7
8
9
10
11
12
13
$ kubectl get all -n nginx-example
NAME READY STATUS RESTARTS AGE
pod/nginx-deployment-5bcc46cc5-fmnf4 1/1 Running 0 106s
pod/nginx-deployment-5bcc46cc5-njlhk 1/1 Running 0 106s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/my-nginx LoadBalancer 10.96.158.105 <pending> 80:30449/TCP 106s

NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-deployment 2/2 2 2 106s

NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-deployment-5bcc46cc5 2 2 2 106s

操作验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 创建备份任务
$ velero backup create default
$ velero backup get
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
default Completed 0 0 2022-11-07 17:03:46 +0800 CST 29d default <none>

# 模拟故障
$ kubectl delete ns nginx-example

# 创建恢复任务
$ velero restore create default --from-backup default
$ velero restore get
NAME BACKUP STATUS STARTED COMPLETED ERRORS WARNINGS CREATED SELECTOR
default-20221107170719 default Completed 2022-11-07 17:07:19 +0800 CST 2022-11-07 17:08:19 +0800 CST 0 119 2022-11-07 17:07:19 +0800 CST <none>

# 恢复结果查看
$ kubectl get all -n nginx-example
NAME READY STATUS RESTARTS AGE
pod/nginx-deployment-5bcc46cc5-fmnf4 1/1 Running 0 90s
pod/nginx-deployment-5bcc46cc5-njlhk 1/1 Running 0 90s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/my-nginx LoadBalancer 10.96.27.235 <pending> 80:31162/TCP 59s

NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-deployment 2/2 2 2 73s

NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-deployment-5bcc46cc5 2 2 2 89s

可以初步看到以下几个特点:

  • Deployment 和 Pod 在恢复之后,UUID 并未变化
  • Service 和 Pod 的 IP 与端口在恢复之后,被重新分配

MinIO 中相关的数据

备份与恢复数据结构

Backup 数据结构

name content
velero-backup.json Backup 对象的 Json 格式
default-volumesnapshots.json.gz Velero 中 VolumeSnapshots 对象的 Json 格式
default-podvolumebackups.json.gz PodvolumeBackups 对象的 Json 格式
default-csi-volumesnapshots.json.gz CSI 中 VolumeSnapshots 对象的 Json 格式
default-csi-volumesnapshotcontents.json.gz CSI 中 VolumeSnapshotsContent 对象的 Json 格式
default-logs.gz 备份任务日志
default.tar.gz 备份的全部数据,包括两子内容:metadata 和 resources,metadata 文件夹中包含一个 verison 文件,内容为 1.1.0;resources 文件夹中包含各类资源全名的子文件夹,例如 alertmanagers.monitoring.coreos.com,里面包含以 namespaces 或 cluster 区分的资源对象的 Json 格式
default-resource-list.json.gz 备份的资源清单,格式为 {“资源全名”: [各资源信息,格式为 ns/name]}

Restore 数据结构

name content
restore-default-20221107170719-results.gz 恢复的详情信息,格式为 {“errors”:{},”warnings”:{“cluster”: [“各资源恢复异常原因”], “各 namespace”: [“各资源恢复异常原因”]}}
restore-default-20221107170719-logs.gz 恢复任务日志
Author

Shen Xianghong

Posted on

2021-06-28

Updated on

2023-06-19

Licensed under