集群备份工具-velero-使用指南-Kubernetes (集群备份工具有哪些)

教程大全 2025-07-18 07:46:42 浏览

Kubernetes 集群备份工具 velero 使用指南

2022-09-23 17:26:04Velero 对存储的支持较好,可以支持很多种存储资源,比如 AWS S3、Azure Blob、Google Cloud Storage、Alibaba Cloud OSS、Swift、MinIO 等等。

​​想了解更多关于开源的内容,请访问:​​

​​51CTO开源基础软件社区​​

简介

Velero是一款可以安全的备份、恢复和迁移 Kubernetes 集群资源和持久卷等资源的备份恢复软件。

Velero 实现的 kubernetes 资源备份能力,可以轻松实现 Kubernetes 集群的数据备份和恢复、复制 kubernetes 集群资源到其他 kubernetes 集群或者快速复制生产环境到测试环境等功能,这种备份就类似于把资源的 yaml 文件进行整体备份,从而保障资源的完整性。

Velero 对存储的支持较好,可以支持很多种存储资源,比如 AWS S3、Azure Blob、Google Cloud Storage、Alibaba Cloud OSS、Swift、MinIO 等等.

​​Storage-support​​。

流程图

注意:本文档采用 MinIO 作为后端存储。

Docker 部署 MinIO

因为我们要保证存储和集群隔离,这样能保证在集群出问题的时候,不影响备份,所以就将 MinIO 部署在其他 服务器 上,与 Kubernetes 环境隔离。避免因意外情况宕机的时候影响更多。

 /data/{minio,config}docker pull minio/miniodocker pull minio/mc:latestdocker run :9000 :9090 minio always  /data/minio:/data  /data/config:/root/.miniominio/minio server /data docker run /bin/sh  /data/config:/root/.minio minio/mcmc config host add veleroadmin admin123456  S3v4 mc mb  velero/velero

注意,mc 使用的是 api 端口,并不是 console 界面端口,所以 mc 在授权的时候需要使用 API 端口。

然后浏览器通过配置的账号和 password 即可登录:

安装 velero 在 k8s master 上

下载 velero:

1、创建密钥并安装velero

 > credentials-velero  velero /usr/local/bin/ >> /etc/profile &&  /etc/profile

2、K8s集群安装velero

velero install \ aws \ velero/velero-plugin-for-aws:v1.2.1 \ velero \ ./credentials-velero \ \minio

安装时产生的日志。

CustomResourceDefinition/backups.velero.io: attempting to create resourceCustomResourceDefinition/backups.velero.io: attempting to create resource clientCustomResourceDefinition/backups.velero.io: createdCustomResourceDefinition/backupstoragelocations.velero.io: attempting to create resourceCustomResourceDefinition/backupstoragelocations.velero.io: attempting to create resource clientCustomResourceDefinition/backupstoragelocations.velero.io: createdCustomResourceDefinition/deletebackuprequests.velero.io: attempting to create resourceCustomResourceDefinition/deletebackuprequests.velero.io: attempting to create resource clientCustomResourceDefinition/deletebackuprequests.velero.io: createdCustomResourceDefinition/downloadrequests.velero.io: attempting to create resourceCustomResourceDefinition/downloadrequests.velero.io: attempting to create resource clientCustomResourceDefinition/downloadrequests.velero.io: createdCustomResourceDefinition/podvolumebackups.velero.io: attempting to create resourceCustomResourceDefinition/podvolumebackups.velero.io: attempting to create resource clientCustomResourceDefinition/podvolumebackups.velero.io: createdCustomResourceDefinition/podvolumerestores.velero.io: attempting to create resourceCustomResourceDefinition/podvolumerestores.velero.io: attempting to create resource clientCustomResourceDefinition/podvolumerestores.velero.io: createdCustomResourceDefinition/resticrepositories.velero.io: attempting to create resourceCustomResourceDefinition/resticrepositories.velero.io: attempting to create resource clientCustomResourceDefinition/resticrepositories.velero.io: createdCustomResourceDefinition/restores.velero.io: attempting to create resourceCustomResourceDefinition/restores.velero.io: attempting to create resource clientCustomResourceDefinition/restores.velero.io: createdCustomResourceDefinition/schedules.velero.io: attempting to create resourceCustomResourceDefinition/schedules.velero.io: attempting to create resource clientCustomResourceDefinition/schedules.velero.io: createdCustomResourceDefinition/serverstatusrequests.velero.io: attempting to create resourceCustomResourceDefinition/serverstatusrequests.velero.io: attempting to create resource clientCustomResourceDefinition/serverstatusrequests.velero.io: createdCustomResourceDefinition/volumesnapshotlocations.velero.io: attempting to create resourceCustomResourceDefinition/volumesnapshotlocations.velero.io: attempting to create resource clientCustomResourceDefinition/volumesnapshotlocations.velero.io: createdWaiting  resources to be ready  cluster...Namespace/velero: attempting to create resourceNamespace/velero: attempting to create resource clientNamespace/velero: createdClusterRoleBinding/velero: attempting to create resourceClusterRoleBinding/velero: attempting to create resource clientClusterRoleBinding/velero: createdServiceAccount/velero: attempting to create resourceServiceAccount/velero: attempting to create resource clientServiceAccount/velero: createdSecret/cloud-credentials: attempting to create resourceSecret/cloud-credentials: attempting to create resource clientSecret/cloud-credentials: createdBackupStorageLocation/default: attempting to create resourceBackupStorageLocation/default: attempting to create resource clientBackupStorageLocation/default: createdDeployment/velero: attempting to create resourceDeployment/velero: attempting to create resource clientDeployment/velero: createdVelero is installed!Use  to view the status.

验证是否安装完毕。

[root@master ~]NAMEREADYSTATUSRESTARTSAGEvelero-cf79784ff-zdfp9/1Running47s[root@master ~]velero.io/v1

3、velero 命令

velero create backup NAME [flags] stringArraynamespaces to exclude from the backup stringArrayresources to exclude from the backup, formatted as resource.group, such as storageclasses.storage.k8s.io optionalBool[]include cluster-scoped resources  the backup stringArraynamespaces to include  the backup (use  all namespaces) (default *) stringArrayresources to include  the backup, formatted as resource.group, such as storageclasses.storage.k8s.io (use  all resources) mapStringStringlabels to apply to the backup,  stringOutput display format. For create commands, display the object but  not send it to the server. Valid formats are , , and .  is not valid  the install command.# 对指定标签的资源进行备份,  labelSelectoronly back up resources matching this label selector (default ) optionalBool[]take snapshots of PersistentVolumes as part of the backup stringlocation  which to store the backup durationhow long before the backup can be garbage collected (default 720h0m0s)# 指定快照的位置,也就是哪一个公有云驱动 stringslist of locations (at Most one per provider) where volume snapshots should be stored

4、测试

velero 在安装包中有一个测试demo,我们可以利用测试demo来进行测试验证。

[root@master ~][root@master nginx-app]base.yamlREADME.mdwith-pv.yamlstorageClassName: Longhorntype: ClusterIP[root@master nginx-app]namespace/nginx-example createdpersistentvolumeclaim/nginx-logs createddeployment.apps/nginx-deployment created/my-nginx created[root@master nginx-app]NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEmy-nginxClusterIP.108.189.178/TCP79s[root@master nginx-app]NAMEREADYSTATUSRESTARTSAGEpod/nginx-deployment-6779884c68-4nv2s/2Running2m16sNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE/my-nginxClusterIP.108.189.178/TCP2m16sNAMEREADYUP-TO-DATEAVAILABLEAGEdeployment.apps/nginx-deployment/12m16sNAMEDESIREDCURRENTREADYAGEreplicaset.apps/nginx-deployment-6779884c682m16s

5、备份

[root@master nginx-app]Backup request  submitted successfully.Run  or  more details.
[root@master nginx-app]Name:nginx-backupNamespace:veleroLabels:velero.iodefaultAnnotations:velero.iov1.23.5velero.iovelero.ioPhase:failed (run  more information)Errors:Warnings:Namespaces:Included:nginx-exampleExcluded:Resources:Included:*Excluded:Cluster-scoped:autoLabel selector:Storage Location:defaultVelero-NATive Snapshot PVs:autoTTL:720h0m0sHooks:Backup Format Version:.1.0Started::44:49  CSTCompleted::44:49  CSTExpiration::44:49  CSTVelero-Native Snapshots: [root@master nginx-app]An error occurred: gzip: invalid header

登录 minio 查看,备份记录。

6、恢复测试

删除 nginx-app:

[root@master velero-v1.9.0-Linux-amd64]

恢复 nginx:

[root@master velero-v1.9.0-linux-amd64]# velero restore create --from-backup nginx-backup --waitRestore request "nginx-backup-20220630192521" submitted successfully.Waiting for restore to complete. You may safely press ctrl-c to stop waiting - your restore will continue in the background.Restore completed with status: Completed. You may check for more information using the commands `velero restore describe nginx-backup-20220630192521` and `velero restore logs nginx-backup-20220630192521`.
[root@master velero-v1.9.0-linux-amd64]NAMEREADYSTATUSRESTARTSAGEnginx-deployment-6779884c68-4nv2s/2Running27s

恢复会新建一个 restores。

目录注意:​​velero restore​​​ 恢复不会覆盖​​已有的资源​​​,只恢复当前集群中​​不存在的资源​​。已有的资源不会回滚到之前的版本,如需要回滚,需在restore之前提前删除现有的资源。

备份所有命名空间:

velero backup logs k8s-all

7、定时备份

比较推荐做定时全量备份,这个能保证我们是一直全量最新备份的状态。

velero create schedule k8s-all 

查看备份:

velerogetbackup#备份查看velerogetschedule #查看定时备份velerogetrestore#查看已有的恢复velerogetplugins#查看插件

​​想了解更多关于开源的内容,请访问:​​

​​51CTO开源基础软件社区​​

velero

Kubernetes是一个开源项目,它把谷歌的集群管理工具引入到虚拟机和裸机场景中。 它可以完美运行在现代的操作系统环境(比如CoreOS和Red Hat Atomic),并提供可以被你管控的轻量级的计算节点。 Kubernetes使用Golang开发,具有轻量化、模块化、便携以及可扩展的特点。 我们(Kubernetes开发团队)正在和一些不同的技术公司(包括维护着Mesos项目的MesoSphere)合作来把Kubernetes升级为一种与计算集群交互的标准方式。 Kubernetes重新实现了Google在构建集群应用时积累的经验。 这些概念包括如下内容:Pods:一种将容器组织在一起的方法;Replication Controllers:一种控制容器生命周期的方法(译者注:Replication Controller确保任何时候Kubernetes集群中有指定数量的pod副本(replicas)在运行);Labels:一种可以找到和查询容器的方法;Services:一个用于实现某一特定功能的容器组;因此,只要使用Kubernetes你就能够简单并快速的启动、移植并扩展集群。 在这种情况下,集群就像是类似虚拟机一样灵活的资源,它是一个逻辑运算单元。 打开它,使用它,调整它的大小,然后关闭它,就是这么快,就是这么简单。 Mesos和Kubernetes的愿景差不多,但是它们在不同的生命周期中各有不同的优势。 Mesos是分布式系统内核,它可以将不同的机器整合在一个逻辑计算机上面。 当你拥有很多的物理资源并想构建一个巨大的静态的计算集群的时候,Mesos就派上用场了。 有很多的现代化可扩展性的数据处理应用都可以在Mesos上运行,包括Hadoop、Kafka、Spark等,同时你可以通过容器技术将所有的数据处理应用都运行在一个基础的资源池中。 在某个方面来看,Mesos是一个比Kubernetes更加重量级的项目,但是得益于那些像Mesosphere一样的贡献者,Mesos正在变得更加简

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐