写在开始
Velero源码系列将从零开始,带领大家一步一步阅读velero项目的源代码,本篇文章将介绍velero是如何实现备份功能的?
如果您还不了解velero,请参阅上一篇与视频分享
也欢迎大家关注我们小分队的B站账号貔貅云原生,之后所有的博客、源码、视频分享都会免费发布到B站,后续也会更新更多有趣的内容
如何阅读
由于velero本身是一个kubernetes的operator,所以想要学习如何备份,首先应该了解backup
的CRD有哪些字段,是如何定义的,之后每篇文章的顺序为 CRD字段介绍=>代码视频走读=> 函数调用图
的形式,本节之后不再赘述
OK,进入正题,有没有思考过,当你在执行 velero create backup xxx
后将会发生什么,velero是如何将我们的pod,deployment,pv数据备份下来的呢?
Backup CRD定义
我们通常在使用velero时,会用velero的二进制命令很方便的创建备份任务,当你执行velero create backup xxx
时,实际上是创建一个Kind
为Backup
的CRD资源,velero controller
通过informer会watch到Backup这个对象创建,从而执行真正的备份逻辑
首先我们来学习一下Backup的api定义,官网文档(https://velero.io/docs/v1.12/api-types/backup)
apiVersion: velero.io/v1
kind: Backup
metadata:
annotations:
velero.io/source-cluster-k8s-gitversion: v1.21.11
velero.io/source-cluster-k8s-major-version: "1"
velero.io/source-cluster-k8s-minor-version: "21"
creationTimestamp: "2023-10-04T19:00:21Z"
generation: 26
labels:
velero.io/schedule-name: oss-schedule ## 周期任务的名称
velero.io/storage-location: oss ## 备份数据存储位置
name: oss-schedule-20231005030021 ## 备份任务名称,由schedule生成的任务
namespace: velero
resourceVersion: "65406070"
uid: ee034389-1005-4157-8ca9-288649993c7e
spec:
csiSnapshotTimeout: 10m0s ## 快照超时事件
defaultVolumesToFsBackup: true ## 是否为所有卷默认使用 Pod Volume 文件系统备份
hooks: {} ## 生命周期函数
includedNamespaces: ## 包含的命名空间,支持 excludedNamespaces
- namespace1
- namespace2
- namespace3
- namespace4
includedResources: #资源,全部为*,支持excludedResources
- pod
- replicationcontroller
- deployment
- statefulset
- daemonset
- job
- cronjob
- service
- ingress
- networkpolicy
- configmap
- secret
- persistentvolume
- persistentvolumeclaim
- storageclass
- node
- namespace
- event
- limitrange
- resourcequota
- podsecuritypolicy
- serviceaccount
itemOperationTimeout: 1h0m0s ## 备份的超时事件
labelSelector: ## 通过标签过滤
matchExpressions:
- key: k8s.kuboard.cn/name
operator: NotIn
values:
- clickhouse
- key: k8s.kuboard.cn/name
operator: NotIn
values:
- clickhouse-backup
metadata: {}
snapshotVolumes: true
storageLocation: oss ## 备份数据存储位置
ttl: 168h0m0s
status:
completionTimestamp: "2023-10-04T19:03:48Z"
expiration: "2023-10-11T19:00:21Z"
formatVersion: 1.1.0
phase: Completed ## 备份状态
progress:
itemsBackedUp: 509
totalItems: 509
startTimestamp: "2023-10-04T19:00:22Z"
version: 1
warnings: 10
函数调用图
代码讲解
代码讲解为视频走读的形式,用到的代码为最新版本fork后添加中文注释,请关注上面的B站账号
代码仓库: https://gitee.com/noovertime/velero-study
velero S3插件:https://github.com/noovertime7/velero-os-plugin