velero工具备份k8s

简介

Velero 是一个提供 Kubernetes 集群和持久卷的备份、迁移以及灾难恢复等的开源工具。

Velero 是一个云原生的灾难恢复和迁移工具,它本身也是开源的, 采用 Go 语言编写,可以安全的备份、恢复和迁移Kubernetes集群资源和持久卷。

Velero 是一种云原生的Kubernetes优化方法,支持标准的K8S集群,既可以是私有云平台也可以是公有云。除了灾备之外它还能做资源移转,支持把容器应用从一个集群迁移到另一个集群。

使用velero可以对集群进行备份和恢复,降低集群DR造成的影响。velero的基本原理就是将集群的数据以json格式备份到对象存储中,在恢复的时候将数据从对象存储中拉取下来。

组成部分

Velero组件一共分两部分,分别是客户端和服务端。

  • 客户端:运行在本地的velero命令行工具,包括安装服务端、备份、定时任务备份、恢复等命令,特别需要注意的是,安装服务端时需要在机器上已配置好kubectl及集群kubeconfig。
  • 服务端:运行在Kubernetes集群中(运行在Pod中)。

velero使用场景

  • 直接备份 Etcd 是将集群的全部资源备份起来,而 Velero 可以对 Kubernetes 集群内对象级别进行备份。
  • 除了对 Kubernetes 集群进行整体备份外,Velero 还可以通过对 Type、Namespace、Label、Pod
    等对象进行分类备份或者恢复。

原理

Velero工作原理

每个Velero的操作(如按需备份backup,计划备份schdule,还原restore)都是自定义资源,使用Kubernetes 自定义资源定义(CRD)定义并存储在 etcd中,Velero还包括 对自定义资源执行备份、恢复和所有相关操作的控制器,例如备份控制器BackupController、恢复控制器RestoreController ,诸如此类的控制器在成功部署velero服务器后就生效了,它们负责监听对应的自定义资源(backup,schdule,restore),在监听到这些自定义资源后,验证它们,通过验证的资源将加入到velero的工作队列中,有序的完成它们对应的工作流程。Velero非常灵活,可以备份或还原群集中的所有对象,也可以按类型,命名空间或标签过滤对象。

备份工作流程

当运行velero backup create 时:

  1. Velero客户端调用Kubernetes API server以创建Backup对象;
  2. 该BackupController检测到Backup对象被创建并执行验证;
  3. BackupController开始备份过程,它通过向Kubernetes API server查询资源来收集要备份的数据;
  4. BackupController调用对象存储服务(例如AWS S3 : MinIO)上载备份文件。

默认情况下,velero backup create支持任何持久卷的磁盘快照,您可以通过指定其他标志来调整快照,运行velero backup create –help可以查看可用的标志,可以使用–snapshot-volumes=false选项禁用快照。

恢复工作流程

当运行 velero restore create 时:

1、Velero客户端调用Kubernetes API server以创建Restore对象;

2、该RestoreController 检测到Restore对象被创建并执行验证;

3、RestoreController 从对象存储服务中获取指定备份信息,并在备份的资源上运行一些预处理,以确保资源能在新的集群上工作。包括:

  • 对资源进行排序,以确定Velero的恢复顺序;
  • 通过Kubernetes Group Version Resource(GVR)甄别资源。如果资源无法被甄别,Velero将从恢复中排除它;
  • 资源过滤筛选(例如选择某个namespace、排除某个namespace);
  • 如果已配置–namespacemappings-restore选项,将验证目标命名空间;
  • 保存在对象存储上的信息非常多,velero会整理过滤标准资源创建脚本,从恢复出与原来一样名称的资源。

4、RestoreController开始逐个恢复符合条件的资源。Velero将当前资源提取到Kubernetes资源对象中。根据您指定的资源类型和恢复选项,Velero将在尝试创建资源之前对资源进行以下修改或对目标集群进行准备:

5、RestoreController确保目标命名空间存在。如果目标命名空间不存在,RestoreController将在集群上创建一个新的命名空间;

6、如果资源是PersistentVolume(PV),RestoreController将重命名PV并重新映射其namespace;

7、如果资源是 PersistentVolumeClaim(PVC),RestoreController将修改PVC元数据;
RestoreController在目标集群上创建资源对象。如果资源是PV,则RestoreController将根据PV的备份方式从持久快照、文件系统备份或CSI快照中恢复PV数据;

8、默认情况下,Velero 执行的是非破坏性还原,意味着它不会删除目标集群上的任何数据。如果备份中的某个资源已经存在于目标集群中,Velero 将跳过该资源;

可以使用 –existing-resource-policy restore 标志来配置 Velero 使用更新策略, 当这个标志被设置为 update 时,Velero 将尝试更新目标集群中的现有资源,以匹配备份中的资源。

再现有k8s集群之上~

部署MinIo

创建minio数据目录

mkdir /data/minio -p

镜像下载

docker pull minio/minio:RELEASE.2022-08-08T18-34-09Z

创建minio容器

如果不指定,则默认使用用户名和密码为minioadmin/minioadmin,可以通过环境变量自定义,如下:
docker run -d \
--name minio \
-p 9000:9000 \
-p 9999:9999 \
-v /data/minio:/minio \
--restart=always \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=12345678" \
minio/minio:RELEASE.2022-08-08T18-34-09Z \
server /minio --console-address '0.0.0.0:9999'

浏览器访问webui ip:9999

创建存储桶

存储桶名称 velerodata

部署velero客户端

下载velero客户端

wget https://github.com/vmware-tanzu/velero/releases/download/v1.9.5/velero-v1.9.5-linux-amd64.tar.gz

解压velero到/usr/local/bin

tar xf velero-v1.9.5-linux-amd64.tar.gz
cd velero-v1.9.5-linux-amd64/ 
cp velero /usr/local/bin/

测试使用

velero --help

创建访问minio的认证文件

cat << EOF > /root/.velero-auth.txt
[default]
aws_access_key_id = admin
aws_secret_access_key = 12345678
EOF

创建namespace

kubectl create ns velero-system

下载aws访问控制插件

docker pull velero/velero-plugin-for-aws:latest

执行安装velero服务端

 

#此处指定了velero安装到指定k8s的namespace中,后续操作均需要指定这个namespace
velero install \
--kubeconfig /root/.kube/config \
--namespace velero-system \
--provider aws \
--plugins velero/velero-plugin-for-aws:latest \
--use-volume-snapshots=false \
--use-restic \
--bucket velerodata \
--secret-file /root/.velero-auth.txt \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://ip:9000

测试备份

默认命名空间

 velero backup create backup \
--kubeconfig='/root/.kube/config' \
--include-namespaces default\
--namespace velero-system

查看备份结果

velero backup get --namespace velero-system

恢复备份

velero restore create --wait \
--from-backup backup \
--kubeconfig='/root/.kube/config' \
--include-namespaces default \
--existing-resource-policy=update \
--namespace velero-system

velero结合MinIo 备份完成~

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇