velero备份恢复k8s集群(应用级)

安装客户端

下载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 获取详情情况

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据