安装客户端
下载velero客户端最新版1.10.1
wget https://github.com/vmware-tanzu/velero/releases/download/v1.10.1/velero-v1.10.1-linux-amd64.tar.gz
解压到可执行目录
安装服务端
安装velero服务端(需先在minio上创建私有bucket velero)
velero install
--provider aws
--plugins velero/velero-plugin-for-aws:v1.6.1
--bucket velero
--secret-file ./credentials-velero
--use-volume-snapshots=false
--use-node-agent
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://192.168.0.19:9000
其中
velero-plugin-for-aws
(https://github.com/vmware-tanzu/velero-plugin-for-aws)
版本需要兼容velero版本
Plugin Version | Velero Version |
---|---|
v1.6.x | v1.10.x |
v1.5.x | v1.9.x |
v1.4.x | v1.8.x |
v1.3.x | v1.7.x |
v1.2.x | v1.6.x |
v1.1.x | v1.5.x |
v1.1.x | v1.4.x |
v1.0.x | v1.3.x |
v1.0.x | v1.2.0 |
其中
minio
安装可参考velero客户端解压后的examples的minio安装在kubernetes内,也可以二进制单独部署
其中credentials-velero 所需配置 可在minio部署后进入页面进行生成
[default]
aws_access_key_id = jsFrxSqbLDflmD0G
aws_secret_access_key = FFhlHGLWiiYiZwRQDb7mmHFqLhEFyMBX
其中
use-node-agent
表明会在工作节点安装ds使用restichttps://github.com/restic/restic和kopiahttps://github.com/kopia/kopia来备份持久卷(需要注意,不支持hostPath卷,但支持本地卷类型)
安装后确认pod运行正常
[root@master1 velero]# kubectl get pods -n velero
NAME READY STATUS RESTARTS AGE
node-agent-5fwnc 1/1 Running 0 2d18h
node-agent-cps2p 1/1 Running 0 2d18h
velero-558cdd5fc7-ck5pv 1/1 Running 0 2d18h
其中
use-volume-snapshots=false
卷快照支持设定
测试
使用下载的客户端内的examples来进行测试
examples的目录形如:
[root@master1 velero-v1.10.1-linux-amd64]# tree -L 3
.
├── examples
│ ├── minio
│ │ └── 00-minio-deployment.yaml
│ ├── nginx-app
│ │ ├── base.yaml
│ │ ├── README.md
│ │ └── with-pv.yaml
│ └── README.md
├── LICENSE
└── velero
使用nginx-app进行测试
这里直接使用with-pv.yaml测试带pv的pod,
首先需要删除with-pv的注释hook,在实际测试中hook执行有问题阻塞备份执行
nginx-app的pvc 需要去除注释并指定storageClassName
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nginx-logs
namespace: nginx-example
annotations:
volumeType: local
labels:
app: nginx
spec:
# Optional:
storageClassName: local-path
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Mi
这里安装rancher的
local-path-provisioner
来提供动态卷能力(https://github.com/rancher/local-path-provisioner)
安装
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.23/deploy/local-path-storage.yaml
相关验证测试用例见其github readme
备份
,这里以namespace级别为例,会备份一个namespace下的非集群资源
velero backup create nginx-backup --include-namespaces nginx-example --default-volumes-to-fs-backup
(如果是定时备份velero schedule create wp-backup --schedule="0 */12 * * *" --include-namespaces wordpress --default-volumes-to-fs-backup)
这里使用default-volumes-to-fs-backup是opt-out方式,默认会备份所有资源除非在namespace里注释不备份情况,也可适用opt-in 方式(https://velero.io/docs/v1.10/file-system-backup/)
可通过velero backup get 获取备份状态,如果存在问题可通过velero backup logs 获取详情情况
删除测试资源
kubectl delete ns nginx-example
恢复
velero restore create --from-backup nginx-backup
可通过velero restore get 获取恢复状态,如果存在问题可通过velero restore logs 获取详情情况