使用Velero管理kubernetes的备份和恢复到阿里OSS

作者: root007 分类: kubernetes,Linux 发布时间: 2021-04-26 18:51
使用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的插件

  1. 设置一些环境变量
BUCKET = < YOUR_BUCKET > REGION = < YOUR_REGION >
  1. 创建并运行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>
  1. 在还原集群中为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

备份

  1. 为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)'
  1. (可选)使用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软件包的文档

  1. 模拟灾难恢复删除ns(无PersistentVolumes)
kubectl delete namespace nginx-example
  1. 检查nginx部署和服务是否清理成功,请运行:
kubectl get deployments --namespace=nginx-examplekubectl get services --namespace=nginx-examplekubectl get namespace/nginx-example

如果没有结果清理完成 注意:您可能需要等待几分钟才能完全清理名称空间。

恢复

  1. 从nginx-backup创建还原:
velero restore create --from-backup nginx-backup --wait
  1. 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)

  1. 启动示例nginx应用程序:
kubectl apply -f examples/nginx-app/with-pv.yaml
  1. 使用PV快照创建备份
velero backup create nginx-backup --include-namespaces nginx-example
  1. 模拟删除
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。

发表评论

邮箱地址不会被公开。 必填项已用*标注