Kubernetes备份方案:Velero+Minio

Kubernetes备份方案:Velero+Minio

  • 背景
  • Velero
    • 1.Velero是什么
    • 2.应用场景
    • 3.支持的目标存储
    • 4.与k8s版本对应关系
    • 5.Velero工作流程
  • 备份与恢复实践
    • Velero客户端
    • Velero服务端
    • 备份与恢复
      • 备份实践
      • 恢复实践
      • 定时备份

背景

k8s: v1.28.12
velero:v1.15

Velero

1.Velero是什么

Velero是一个开源的k8s的备份和恢复工具。其工作方式是将集群的数据备份到对象存储中,有需要时,在对象存储中取备份恢复数据。当然,在集群迁移中,它也是非常合适的。Velero 包括在集群上运行的服务端和在本地运行的命令行客户端。

2.应用场景

  • 备份集群数据并在丢失时进行恢复。
  • 将集群资源迁移到其他集群
  • 将生产集群复制到开发和测试集群

3.支持的目标存储

  • AWS S3、Minio
  • Google Cloud Storage
  • Azure Blob Storage
  • Alibaba OSS
  • Other

4.与k8s版本对应关系

Kubernetes备份方案:Velero+Minio_第1张图片

5.Velero工作流程

每个 Velero 操作(备份、还原)都是一个自定义资源,使用 Kubernetes 自定义资源定义 (CRD) 定义并存储在 etcd 中。

备份流程

  1. Velero 客户端调用 Kubernetes API 服务器创建一个Backup对象。
  2. 继而通知新对象CRD(BackupController)备份数据。
  3. BackupController会先通过APIServer以获取资源来收集要备份的数据,将获取的数据写入到对象存储中。

恢复流程

  1. Velero 客户端调用 Kubernetes API 服务器创建一个Restore对象。
  2. 通知新对象CRD(RestoreController)从对象存储服务获取备份信息。
  3. RestoreController会对备份的资源运行一些预处理,以确保资源可以在新集群上运行。
  4. RestoreController还原过程,一次还原一个符合条件的资源。

备份与恢复实践

Velero客户端

[root@controlplane ~]# wget https://github.com/vmware-tanzu/velero/releases/download/v1.15.2/velero-v1.15.2-linux-arm64.tar.gz
[root@controlplane ~]# tar xf velero-v1.15.2-linux-arm64.tar.gz
[root@controlplane ~]# cp velero-v1.15.2-linux-arm64/velero /usr/local/bin/
[root@controlplane ~]# velero version
Client:
	Version: v1.15.2
	Git commit: 804d73c4f2349f1ca9bd3d6c751956e1d2021c01

Velero服务端

  1. 创建对象存储凭证
cat > /root/.credentials-velero << EOF
[default]
aws_access_key_id = minio
aws_secret_access_key = minio123
EOF
  1. 安装Velero服务端
velero install \
	--kubeconfig /root/.kube/config \
    --provider aws \
    --plugins velero/velero-plugin-for-aws:v1.11.1 \
    --bucket databak-k8s \
    --secret-file /root/.credentials-velero \
    --use-volume-snapshots=false \
    --use-node-agent  \
    --image velero/velero:v1.15.2 \
    --default-volumes-to-fs-backup \
    --namespace velero \
    --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio.velero.svc:9000
# --kubeconfig 集群APIServer地址和认证信息
# --provider 云服务提供商的名称
# --plugins 加载的插件的镜像
# --image Velero 服务端镜像,默认与velero客户端下载版本一致
# --bucket 存储备份的对象存储桶
# --secret-file 对象存储认证信息
# --use-node-agent 创建Velero Node Agent守护进程,启用文件系统备份
# --namespace 指定运行在哪个命名空间
# --backup-location-config 指定备份存储位置的配置
# --default-volumes-to-fs-backup 将 Pod Volume 备份到文件系统备份,亲测若不开启此参数,无法备份PV中数据到对象存储,且仅备份PV挂载的文件数据
# 其他参数查看:velero install --help
  1. 检查运行状况
kubectl get pod -n velero

备份与恢复

备份实践

  1. 备份所在命名空间
velero backup create backup-namespace-$(date +%Y%m%d%H%M%S) \
--include-namespaces nacos \
--wait
  1. 备份所有命名空间
velero backup create backup-all-namespaces-$(date +%Y%m%d%H%M%S) \
--wait
  1. 除了命名空间kube-system,其他的都备份
velero backup create backup-exclude-namespace-$(date +%Y%m%d%H%M%S) \
--exclude-namespaces kube-system \
--wait
  1. 查看备份详情
velero backup get  -n velero == velero get   backup

velero  describe backups  [NAME1] [NAME2] [NAME...]
添加参数查看更详细信息:--details
备份默认保留时间 30 days

恢复实践

  1. 恢复操作
velero restore create --from-backup backup-namespace-id \
--wait

  1. 查看恢复详情
velero restore   get
velero describe  restore  [NAME1] [NAME2] [NAME...]
添加参数查看更详细信息:--details

定时备份

  1. 创建一个每天晚上十二点的全备任务
velero schedule create [SCHEDULE NAME] \
--schedule="0 0 * * *"
  1. 创建一个每小时备份kube-system命名空间的任务,备份仅保留一天
velero schedule create [SCHEDULE NAME]  \
--schedule="0 */1 * * *" \
--include-namespaces kube-system \
--ttl 24h0m0s
  1. 查看创建的定时备份任务
创建
velero schedule create hh  \
--schedule="0 */1 * * *" \
--include-namespaces kube-system \
--ttl 24h0m0s
查看
velero schedule get
NAME   STATUS    CREATED                         SCHEDULE      BACKUP TTL   LAST BACKUP   SELECTOR   PAUSED
hh     Enabled   2025-01-17 12:36:11 +0800 CST   0 */1 * * *   24h0m0s      n/a           <none>     false

你可能感兴趣的:(kubernetes,容器,云原生)