1 概述
velero是vmware开源的一个备份和恢复工具,可作用于kubernetes集群下的任意对象和应用数据(PV上的数据)。github地址是https://github.com/vmware-tanzu/velero。
对于应用数据,可分文件级别的复制和块级别的复制。文件级别的复制是更加通用的。数据恢复时,pod会被打入一个init容器(velero-restore-helper)来准备数据目录(从远程对象存储中下载并解密),init容器完成后再启动业务容器。
1)文件级别的复制
将deployment、statefulset、pvc、pv等k8s对象以及容器中挂载的数据目录(会被加密),都备份到远程对象存储中。
2)块设备的复制
将deployment、statefulset、pvc、pv等k8s对象备份到远程对象存储中,并且在pv底层的存储系统中创建快照。
在架构上,velero分为服务端和命令行。服务端是一个控制器,监听k8s自定义资源来做协调,自定义资源则是对备份和恢复这两个概念的抽象,名称就是backup和restore。
2 环境
两个kubernetes集群(v1.29),一个的对象存储桶(华为云OBS服务)。对象存储桶具体信息是:region为cn-north-1,端点为obs.cn-south-1.myhuaweicloud.com,桶名称为velerobackup。
3 部署velero
同时在两个kubernetes集群中,下载velero二进制命令行工具。
wget https://github.com/vmware-tanzu/velero/releases/download/v1.14.1/velero-v1.14.1-linux-amd64.tar.gz
tar -xf velero-v1.14.1-linux-amd64.tar.gz
mv velero-v1.14.1-linux-amd64/velero /usr/bin
velero version
准备对象存储桶的ak、sk,并将它们写入到一个固定文件/opt/credentials-velero。
export ak=*******yourak*******
export sk=*******yoursk*******
cat > /opt/credentials-velero << EOF
[default]
aws_access_key_id = $ak
aws_secret_access_key = $sk
EOF
通过velero命令行工具同时在两个kubernetes集群中安装velero服务端。
# 对于华为云对象存储,协议必须是http,使用https协议velero会出现问题
velero install \
--kubeconfig /root/.kube/config \
--velero-pod-cpu-request 500m \
--velero-pod-mem-request 0.5Gi \
--velero-pod-cpu-limit 1000m \
--velero-pod-mem-limit 1Gi \
--use-node-agent \
--node-agent-pod-cpu-request 500m \
--node-agent-pod-mem-request 0.5Gi \
--node-agent-pod-cpu-limit 1000m \
--node-agent-pod-mem-limit 1Gi \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.9.1 \
--bucket velerobackup \
--secret-file /opt/credentials-velero \
--use-volume-snapshots=false \
--backup-location-config region=cn-north-1,s3ForcePathStyle="true",s3Url=http://obs.cn-south-1.myhuaweicloud.com
通过以下命令查看velero服务端的信息
kubectl get pod -n velero
通过以下命令查看对象存储的信息
kubectl get BackupStorageLocation -n velero default
4 备份
在一个kubernetes集群A中执行备份,备份的是default和demo这两个namespace下的所有k8s对象。
velero backup create second-backup --include-namespaces=default,demo --default-volumes-to-fs-backup
接着,在对象存储中可以看见备份文件上传了。
过一会,也会在另一个kubernetes集群B中看见一个新的backup对象,这个对象是velero控制器新创建的。
5 恢复
在kubernetes集群B中,执行以下命令,会将保存在对象存储中的k8s对象导入到该集群。
velero restore create --from-backup second-backup
6 小结
在本次操作过程中,最大的阻碍点是:如果在velero的安装参数指定了华为云对象存储的端点是https协议,会发生报错,velero服务端得到的响应是The x-amz-content-sha256 you specified did not match what we received。