观测云集群备份和恢复¶
注意事项
本文介绍的 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,则省略bucket配置:
为 Velero 设置权限¶
以下方法为通过 IAM 用户设置权限,其他方式请参考使用kube2iam设置权限。
有关更多信息,请参阅AWS关于IAM用户的文档。
1.创建 IAM 用户:
如果您将使用Velero备份具有多个S3桶的多个集群,那么最好为每个集群创建唯一的用户名,而不是默认的Velero。
2.附加策略以赋予 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
3.为用户创建一个 access key:
期望预期:
{
"AccessKey": {
"UserName": "velero",
"Status": "Active",
"CreateDate": "2017-07-31T22:24:41.576Z",
"SecretAccessKey": <AWS_SECRET_ACCESS_KEY>,
"AccessKeyId": <AWS_ACCESS_KEY_ID>
}
}
4.在本地目录中创建一个 velero 特定的凭据文件(credentials-velero
):
创建 OSS 桶¶
Velero 需要一个对象存储桶来存储备份,最好是单个 Kubernetes 集群唯一的。创建一个 OSS 桶,适当替换占位符:
BUCKET=<YOUR_BUCKET>
REGION=<YOUR_REGION>
ossutil mb oss://$BUCKET \
--storage-class Standard \
--acl=private
创建 RAM 用户¶
1.创建用户
请参阅阿里云文档中的RAM用户指南。
如果您将使用Velero备份具有多个 OSS bucket 的多个集群,那么最好为每个集群创建一个唯一的用户名,而不是默认的 Velero。
2.附加策略以赋予 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"
}
]
}
请参阅阿里云文档中的创建AK。
4.在您的安装目录中创建一个 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 namespace
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