backup k8s velero

Backup workflow

https://velero.io/docs/v1.14/how-velero-works/

  1. velero客户端调用Kubernetes API创建自定义资源并存储到etcd;
  2. Backup Controller通过Kubernetes API监听到新创建的backup对象,并验证;
  3. Backup Controller开始执行备份,通过Kubernetes API查询查询和收集需要备份的资源;
  4. Backup Controller调用Minio的S3接口上传备份数据。

install

https://github.com/vmware-tanzu/velero

https://velero.io/docs/v1.14/customize-installation/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
velero install \
# 指定存储提供商,minio用的是s3,所以这里是aws
--provider aws \
# 指定aws插件
--plugins registry.cn-hangzhou.aliyuncs.com/yilingyi/velero-plugin-for-aws:v1.10.1 \
# 指定velero镜像
--image registry.cn-hangzhou.aliyuncs.com/yilingyi/velero:v1.14.1 \
# 限制agent CPU和内存资源
--node-agent-pod-cpu-limit 2 \
--node-agent-pod-mem-limit 2048Mi \
# 指定命名空间
--namespace velero \
# 指定bucket名称
--bucket velero \
# 默认以文件形式备份持久化卷
--default-volumes-to-fs-backup \
# 启用node agent 进行备份和恢复操作,--use-restic已启用,从v1.10开始默认使用kopia备份
--use-node-agent \
# 指定S3存储桶凭证
--secret-file ./credentials-file \
# 禁用卷快照功能,只使用文件系统级别的备份
--use-volume-snapshots=false \
# 配置备份存储位置的详细信息,其中<minio-api-url>填写minio的api地址,如ip:9000
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://<minio-api-url>
credentials-file
credentials

[default] aws_access_key_id=minioadmin aws_secret_access_key=minioadmin

操作

备份

  • 备份所有资源
1
velero backup create <BACKUP_NAME>

–include-namespaces 备份指定的命名空间
–include-resources 备份指定的资源,常用的有deployment,pods,services,secrets,configmaps
–exclude-namespace 排除命名空间
–exclude-resources 排除资源
–ttl 备份过期时间,默认为720h,即30天

  • 查看备份列表
1
velero get backups
  • 查看备份任务详情/进度
1
velero backup describe <BACKUP_NAME> --detail

还原

  • 还原所有资源
1
velero restore create --from-backup <BACKUP_NAME>

–include-namespaces 备份指定的命名空间
–include-resources 备份指定的资源,常用的有deployment,pods,services,secrets,configmaps
–exclude-namespace 排除命名空间
–exclude-resources 排除资源

  • 查看还原列表
1
velero get restores
  • 查看还原详情/进度
1
velero restore describe <RESTORE_NAME> --detail

定时备份

  • 可以设置定时备份任务
1
velero schedule create <SCHEDULE_NAME> --schedule="0 1 * * *" --include-namespaces <NAMESPACES> --ttl 240

示例

1
velero schedule create daily-backup --schedule="0 1 * * *" --include-namespaces argocd,blackbox,chaosblade --ttl 240
  • 查看定时任务
1
velero get schedules

迁移

https://velero.io/docs/v1.14/migration-case/

  1. 排除kube-system命名空间的资源
  2. 如果storageClass的名称发生变更,需要进行映射
1
kubectl apply -f velero-sc.yaml
velero-sc.yaml
velero-sc.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: change-storage-class-config
  namespace: velero
  labels:
    velero.io/plugin-config: ""
    velero.io/change-storage-class: RestoreItemAction
data:
  cfs-v4: <target-sc> 
  
点击打赏
文章目录
  1. 1. Backup workflow
    1. 1.1. install
    2. 1.2. 操作
      1. 1.2.1. 备份
      2. 1.2.2. 还原
      3. 1.2.3. 定时备份
      4. 1.2.4. 迁移
载入天数...载入时分秒... ,