使用Velero管理kubernetes的备份和恢复到阿里OSS
使用Velero管理kubernetes的备份和恢复到阿里OSS
[项目地址](https://github.com/vmware-tanzu/velero)
Velero(以前称为Heptio Ark)为您提供了备份和还原Kubernetes群集资源和持久卷的工具。您可以在公共云平台或本地运行Velero。Velero让您:
- 备份群集并在丢失的情况下进行还原。
- 将群集资源迁移到其他群集。
- 将您的生产集群复制到开发和测试集群。
Velero包含:
- 在集群上运行的服务端
- 在本地运行的命令行客户端
Velero可以对kubernetes集群对象进行备份如:单独备份namespaces恢复namespaces等
要支持Restic v1.10或更高版本的Kubernetes群集。
本文通过Velero把kubernetes资源备份到阿里云OSS上进行备份/还原,您需要为阿里云安装并配置velero和velero插件。
要在阿里云上设置Velero,请执行以下操作:
- 下载Velero的官方版本
- 创建您的OSS存储桶
- 为Velero创建RAM用户
- 为阿里云安装velero和velero插件
# 下载Velero
[最新的官方发行版的](https://github.com/vmware-tanzu/velero/releases)
```
wget https://github.com/vmware-tanzu/velero/releases/download/v1.6.0/velero-v1.6.0-linux-amd64.tar.gz
tar -zxvf velero-v1.6.0-linux-amd64.tar.gz
mv velero-v1.6.0-linux-amd64/velero /usr/local/bin/
```
将velero二进制文件从Velero目录移动到PATH中的某个位置。
# 创建阿里云OSS存储桶
Velero需要一个对象存储桶来存储备份,这最好是单个Kubernetes集群所独有。创建一个OSS存储桶,适当地替换占位符
```
BUCKET=<YOUR_BUCKET>
REGION=<YOUR_REGION>
ossutil mb oss://$BUCKET
--storage-class Standard
--acl=private
```
## Create RAM user
省略
# 安装阿里云velero的插件
1. 设置一些环境变量
```
BUCKET = < YOUR_BUCKET >
REGION = < YOUR_REGION >
```
2. 创建并运行velero和velero插件
使用Velero管理kubernetes的备份和恢复到阿里OSS
Velero(以前称为Heptio Ark)为您提供了备份和还原Kubernetes群集资源和持久卷的工具。您可以在公共云平台或本地运行Velero。Velero让您:
- 备份群集并在丢失的情况下进行还原。
- 将群集资源迁移到其他群集。
- 将您的生产集群复制到开发和测试集群。 Velero包含:
- 在集群上运行的服务端
- 在本地运行的命令行客户端 Velero可以对kubernetes集群对象进行备份如:单独备份namespaces恢复namespaces等 要支持Restic v1.10或更高版本的Kubernetes群集。
本文通过Velero把kubernetes资源备份到阿里云OSS上进行备份/还原,您需要为阿里云安装并配置velero和velero插件。 要在阿里云上设置Velero,请执行以下操作:
- 下载Velero的官方版本
- 创建您的OSS存储桶
- 为Velero创建RAM用户
- 为阿里云安装velero和velero插件
下载Velero
wget https://github.com/vmware-tanzu/velero/releases/download/v1.6.0/velero-v1.6.0-linux-amd64.tar.gztar -zxvf velero-v1.6.0-linux-amd64.tar.gz mv velero-v1.6.0-linux-amd64/velero /usr/local/bin/
将velero二进制文件从Velero目录移动到PATH中的某个位置。
创建阿里云OSS存储桶
Velero需要一个对象存储桶来存储备份,这最好是单个Kubernetes集群所独有。创建一个OSS存储桶,适当地替换占位符
BUCKET=<YOUR_BUCKET>REGION=<YOUR_REGION>ossutil mb oss://$BUCKET --storage-class Standard --acl=private
Create RAM user
省略
安装阿里云velero的插件
- 设置一些环境变量
BUCKET = < YOUR_BUCKET > REGION = < YOUR_REGION >
- 创建并运行velero和velero插件 运行以下命令创建并运行velero和velero-plugin
git clone https://github.com/AliyunContainerService/velero-plugin
修改配置OSS配置文件
# cat velero-plugin/install/credentials-velero ALIBABA_CLOUD_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>ALIBABA_CLOUD_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
部署velero
velero install --provider alibabacloud --image registry.$REGION.aliyuncs.com/acs/velero:1.4.2-2b9dce65-aliyun --bucket $BUCKET --secret-file ./credentials-velero --use-volume-snapshots=false --backup-location-config region=$REGION --use-restic --plugins registry.$REGION.aliyuncs.com/acs/velero-plugin-alibabacloud:v1.0.0-2d33b89 --wait
如果要使用内部oss端点,则可以添加参数:
--backup-location-config region=$REGION,network=internal
如果要使用oss前缀存储备份文件,则可以添加参数:
--prefix <your oss bucket prefix>
- 在还原集群中为velero restic helper映像创建ConfigMap
kubectl -n velero apply -f install/02-configmap.yaml
部署示例nginx应用程序(无PersistentVolumes):
kubectl apply -f examples/nginx-app/base.yaml阿里插件下kubectl apply -f examples/base.yaml
检查是否成功创建了Velero和nginx部署:
kubectl get deployments -l component=velero --namespace=velerokubectl get deployments --namespace=nginx-example
备份
- 为app=nginx标签选择器匹配的任何对象创建备份:
velero backup create nginx-backup --selector app=nginx或者velero backup create nginx-backup --include-namespaces nginx-example --wait
或者,如果要备份除与标签匹配的对象以外的所有对象,请执行以下操作backup=ignore:
velero backup create nginx-backup --selector 'backup notin (ignore)'
- (可选)使用app=nginx标签选择器基于cron表达式创建定期备份计划:
velero schedule create nginx-daily --schedule="0 1 * * *" --selector app=nginx
另外,您可以使用一些非标准的cron表达式:
velero schedule create nginx-daily --schedule="@daily" --selector app=nginx
有关更多用法示例,请参见 cron软件包的文档
- 模拟灾难恢复删除ns(无PersistentVolumes)
kubectl delete namespace nginx-example
- 检查nginx部署和服务是否清理成功,请运行:
kubectl get deployments --namespace=nginx-examplekubectl get services --namespace=nginx-examplekubectl get namespace/nginx-example
如果没有结果清理完成 注意:您可能需要等待几分钟才能完全清理名称空间。
恢复
- 从nginx-backup创建还原:
velero restore create --from-backup nginx-backup --wait
- Run:
velero restore get
还原完成后,输出如下所示:
- 即使你删了namespaces就这么简单恢复回来了
注意:还原可能需要一些时间才能完成。在此期间,该STATUS列显示为InProgress。 成功恢复后,该STATUS列Completed 如果有错误或警告,则可以详细犀利士 查看它们:
velero restore describe <RESTORE_NAME>
清理
如果要删除创建的所有备份,包括对象存储中的数据和持久卷快照,则可以运行:
velero backup delete BACKUP_NAME
这要求Velero服务器删除与关联的所有备份数据BACKUP_NAME。您需要对要永久删除的每个备份执行此操作。Velero的未来版本将允许您通过名称或标签选择器删除多个备份。 完全删除后,在运行时将不再显示备份:
velero backup get BACKUP_NAME
要从Kubernetes集群中完全卸载Velero,minio和nginx示例应用程序,请执行以下操作:
kubectl delete namespace/velero clusterrolebinding/velerokubectl delete crds -l component=velerokubectl delete -f examples/nginx-app/base.yaml
快照示例(具有PersistentVolumes)
- 启动示例nginx应用程序:
kubectl apply -f examples/nginx-app/with-pv.yaml
- 使用PV快照创建备份
velero backup create nginx-backup --include-namespaces nginx-example
- 模拟删除
kubectl delete namespaces nginx-example
4.恢复删除的资源
velero restore create --from-backup nginx-backup
卸载Velero
如果您想从群集中完全卸载Velero,则以下命令将删除由以下用户创建的所有资源velero install:
kubectl delete namespace/velero clusterrolebinding/velerokubectl delete crds -l component=velero
你可以备份到任何velero支持的存储,包括本地的minio。