velero 备份kubernetes集群
2021-05-15 本文已影响0人
Goun
简介部分,有大量偷懒,借鉴
[TOC]
一.简介
Velero是一个开源工具,可以安全地备份,恢复和迁移Kubernetes集群和持久卷。它既可以在本地运行,也可以在公共云中运行。Velero由在Kubernetes集群中作为部署运行的服务器进程和命令行界面(CLI)组成,DevOps团队和平台操作员可使用该命令行界面配置计划的备份,触发临时备份,执行还原等。
优势
与直接访问Kubernetes etcd数据库以执行备份和还原的其他工具不同,Velero使用Kubernetes API捕获群集资源的状态并在必要时对其进行还原。这种由API驱动的方法具有许多关键优势:
- 备份可以捕获群集资源的子集,并按名称空间,资源类型和/或标签选择器进行过滤,从而为备份和还原的内容提供了高度的灵活性。
- 托管Kubernetes产品的用户通常无法访问底层的etcd数据库,因此无法对其进行直接备份/还原。
- 通过聚合的API服务器公开的资源可以轻松备份和还原,即使它们存储在单独的etcd数据库中也是如此。
此外,借助Velero,您可以使用存储平台的本机快照功能或称为restic的集成文件级备份工具来备份和还原应用程序的持久数据及其配置 。
主要功能
- 灾难恢复 在基础架构丢失,数据损坏和/或服务中断的情况下,减少了恢复时间。
- 数据迁移 通过轻松地将Kubernetes资源从一个集群迁移到另一个集群来实现集群可移植性。
- 数据保护 提供关键数据保护功能,例如计划的备份,保留计划以及自定义操作的备份前或备份后挂钩。
组件
Velero 组件一共分两部分,分别是服务端和客户端。
- 服务端:运行在你 Kubernetes 的集群中
- 客户端:是一些运行在本地的命令行的工具,需要已配置好 kubectl 及集群 kubeconfig 的机器上
支持备份存储
- AWS S3 以及兼容 S3 的存储,比如:Minio
- Azure BloB 存储
- Google Cloud 存储
- Aliyun OSS 存储(https://github.com/AliyunContainerService/velero-plugin)
二:安装
依赖对象存储,支持S3,目前也支持阿里云等公有云平台(依赖插件),这里使用私有对象存储(minio)。
# 安装命令行客户端
$ brew install velero
命令行安装
1.创建minio认证文件
$ cat > credentials-velero <<EOF
[default]
aws_access_key_id = user
aws_secret_access_key = password
EOF
2.初始化服务端
$ velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.0.0 \ # 安装插件
--bucket velero \ # bucket 需要提前创建
--secret-file ./credentials-velero \
--use-volume-snapshots=false \
--use-restic \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://127.0.0.1:9000
3.查看velero是否安装完成
$ kubectl get deployments -l component=velero --namespace=velero
NAME READY UP-TO-DATE AVAILABLE AGE
velero 1/1 1 1 13d
$ kubectl get crds -l component=velero
backups.velero.io 2021-04-30T07:20:25Z
backupstoragelocations.velero.io 2021-04-30T07:20:26Z
deletebackuprequests.velero.io 2021-04-30T07:20:26Z
downloadrequests.velero.io 2021-04-30T07:20:26Z
podvolumebackups.velero.io 2021-04-30T07:20:26Z
podvolumerestores.velero.io 2021-04-30T07:20:26Z
resticrepositories.velero.io 2021-04-30T07:20:26Z
restores.velero.io 2021-04-30T07:20:26Z
schedules.velero.io 2021-04-30T07:20:26Z
serverstatusrequests.velero.io 2021-04-30T07:20:26Z
volumesnapshotlocations.velero.io 2021-04-30T07:20:27Z
helm安装
# 配置minio地址
configuration:
backupStorageLocation:
config:
region: hk-k8s-minio
s3ForcePathStyle: true
s3Url: http://127.0.0.1:39000
# 配置minio认证信息
secretContents:
cloud: |
[default]
aws_access_key_id = user
aws_secret_access_key = password
推荐直接使用命令行安装,方便快捷
三.备份
1.手动备份
$ velero backup create app-backup --include-namespaces=app-example
2.定时备份
$ velero create schedule app-daily-backup --schedule="@every 24h" --include-namespaces=app-example
3.对持久化存储进行备份
# 给pod打上标签
$ kubectl patch pod nginx-deployment-7b95b48f86-296hj --patch '{"metadata": {"annotations": {"backup.velero.io/backup-volumes": "www"}}}' -n app-example
# 备份
$ velero backup create app-backup-pvc --snapshot-volumes --include-namespaces=app-example
# 备份详情
$ velero backup describe app-backup-pvc --details
Velero-Native Snapshot PVs: true
TTL: 720h0m0s
Hooks: <none>
Backup Format Version: 1.1.0
Started: 2021-05-14 15:20:01 +0800 CST
Completed: <n/a>
Expiration: 2021-06-13 15:20:01 +0800 CST
Estimated total items to be backed up: 12
Items backed up so far: 0
Restic Backups:
In Progress:
app-example/nginx-deployment-7b95b48f86-296hj: www
四.恢复
1.删除刚刚备份的资源
$ kubectl delete ns app-example
namespace "app-example" deleted
2.从刚刚的备份中,恢复资源清单
$ velero restore create --from-backup app-backup-pvc --restore-volumes
$ velero restore describe app-backup-pvc-20210514152908 --details
Restic Restores:
In Progress:
app-example/nginx-deployment-7b95b48f86-296hj: www (4.94%)
恢复存储资源时,会在刚刚打上标记的Pod中自动创initcontainer,从minio中拉取文件信息
五.迁移
在集群间进行迁移时,我们需要保证两个集群使用的同一个后端存储,初始化服务端:
$ velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.0.0 \ # 安装插件
--bucket velero \ # bucket 需要提前创建
--secret-file ./credentials-velero \
--use-volume-snapshots=false \
--use-restic \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://127.0.0.1:9000
跟安装是同一套命令
查看同步过来的资源对象:
- Backups
- Backupstoragelocations
- Podvolumebackups
基于
Backups
对象,我们可以方便快捷的恢复集群的对象。