使用 velero 备份 kubernetes 指引
2022-2-2
要求 #
- kubernetes 版本 1.7+,velero 的每个主版本对 kuberetes 的版本要求不同,详情请参考官方文档说明。 官方文档通道
- velero 所在服务器有 kubectl 命令, 且能连上集群
我们先从最简单的体验开始
1. 安装 velero 客户端 #
下载二进制安装包, 点击 latest release, 下载 velero-v1.7.0-linux-amd64.tag.gz
(以 release 页面为准), 解压
tar -xvf <RELEASE-TARBALL-NAME>.tar.gz
然后将二进制文件 velero 移动到 $PATH 中的一个目录, 如 /usr/local/bin
2. 创建 credentials #
备份文件保存在对象存储中, 在当前目录下创建 credentials-velero 文件, 声明连接对象存储所用的账号密码
[default]
aws_access_key_id = <your key_id>
aws_secret_access_key = <your secret>
3. 安装 velero 服务端 #
通过 velero 客户端在 kubernetes 中安装 deployment/velero,velero 提供了很多 stroage provider, 能将备份文件存储到比如 aws, aliyun-oss 中, 他们大都是支持 s3 接口的. 下面这个例子使用 s3 接口兼容的对象存储:
BUCKET=<your bucket>
REGION=<your region>
S3URL=<your s3url>
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.3.0 \
--bucket $BUCKET \
--secret-file ./credentials-velero \
--use-volume-snapshots=false \
--backup-location-config region=$REGION,s3ForcePathStyle="true",s3Url=$S3URL
4. 进行一次备份 #
velero backup create first-all-ns
查看所有的备份
velero backup get
5. 恢复指定的 namespace #
velero restore create --from-backup <backup name> \
--include-namespaces <namespace name> \
--restore-volumes=false \
恢复时忽略存储卷,默认是true。根据自己实际情况配置。
6. 每日定时更新整个集群 #
velero schedule create all-daily --schedule="@daily"
至此体验结束, 下面是一些拓展内容
拓展内容 #
备份文件存在哪里? #
BackupStorageLocations
: 用来存储 kubernetes 原数据, 包括各种资源的配置清单等。这个命令可以看到上面安装 velero 时自动创建的 BackupStorageLocations 资源
kubectl -n velero get BackupStorageLocations
VolumeSnapshotLocation
: 用来存储存储卷的数据。这个命令可以看到上面安装 velero 时自动创建的 VolumeSnapshotLocation 资源
kubectl -n velero get VolumeSnapshotLocation
BackupStorageLocations #
首先, 创建后端存储使用的密钥文件,在 velero namespace 下创建对接 BackupStorageLocations
使用的 secret
kubectl create secret generic -n velero credentials --from-file=bsl=</path/to/credentialsfile>
这里创建一个叫 credentials 的 secret, 键: bsl
, 值: </path/to/credentialsfile>
, 后面 velero 和 BackupStorageLocations 通讯时候就用这个 credentials,下面使用这个 secret 创建 BackupStorageLocations。
velero backup-location create <bsl-name> \
--provider <provider> \
--bucket <bucket> \
--config region=<region> \
--credential=<secret-name>=<key-within-secret>
下面这个命令可以查看新创建的 BackupStorageLocations 是否可以使用, 如果有 Avaliable
表示创建成功
velero backup-location get
当我们使用这个 BackupStorageLocations 进行备份的时候, 可以使用 --storage-location
标志, 如下
velero backup create --storage-location <bsl-name>
或者不使用 --storage-location <bsl-name>
标志, 直接将它设置为默认 BackupStorageLocations, 这样
velero backup-location set --default <bsl-name>
当然, 如果想更改 credetial, 可以重新创建一个 secret 然后使用下面命令更换 secret 即可,
velero backup-location set <bsl-name> \
--credential=<secret-name>=<key-within-secret>
2021.12.22日补充 #
问题1: 我在使用 velero v1.1.0 备份一个经过二开的 kubernetes 集群, 发现每次执行 schedule 都会报错。
level=error msg="backup failed" controller=backup error="rpc error: code = Unknown desc = EOF,..."
logSource="pkg/controller/backup_controller.go:233"
google 发现有人遇到了这个问题,大概是内存不够导致通讯失败。
参考 issue,按照 @skriss 所说, 提高 deployment/velero limits.memory 问题就解决了, 我的配置是 1024Mi