使用Velero备份部署在kubernetes集群中Harbor的数据

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 使用Velero备份部署在kubernetes集群中Harbor的数据

前面在公众号《Harbor进阶实战》中分享了一篇基于docker-compose部署的Harbor备份和还原的文章。

  那么,部署在kubernetes集群中的Harbor服务,如何对Harbor的数据进行备份和恢复呢?

  以下教程展示了如何使用 Velero 备份和恢复已使用 Harbor helm 图表部署在 Kubernetes 集群中的 Harbor 实例。

  • 本教程仅备份 Harbor 资源和数据的一个子集,包括所有与 Harbor 相关的 Kubernetes 资源(部署、StatefulSets、Services、ConfigMap 等)以及 Harbor 内部数据库、注册表、chartmuseum、jobservice 和 Trivy 的 PersistentVolumes 中的数据。
  • Harbor 的 Redis 数据未备份,请参阅限制部分,了解有关对 Harbor 实例的潜在影响的更多详细信息。
  • 本教程中执行的备份是崩溃一致的,而不是应用程序一致的。这意味着恢复后某些数据将丢失,有关详细信息,请参阅限制部分。

一、Velero简介

项目地址:https://github.com/vmware-tanzu/velero

Velero 是Heptio公司(已被VMware收购)采用Go语言开发的开源工具,用于云原生安全地备份和恢复、执行灾难恢复以及迁移 Kubernetes 集群资源和持久卷。

Velero组件

Velero 组件一共分两部分,分别是服务端和客户端。

  • 服务端:部署在Kubernetes集群中;
  • 客户端:是一些运行在本地的命令行的工具,需要已配置好 kubectl 及集群 kubeconfig 的机器上

Velero工作流程

(1)本地 Velero 客户端发送备份指令。

(2)Kubernetes 集群内就会创建一个 Backup 对象。

(3)BackupController 监测 Backup 对象并开始备份过程。

(4)BackupController 会向 API Server 查询相关数据。

(5)BackupController 将查询到的数据备份到远端的对象存储。

Velero特性

Velero 目前包含以下特性:

  • 支持 Kubernetes 集群数据备份和恢复;
  • 支持复制当前 Kubernetes 集群的资源到其它 Kubernetes 集群;
  • 支持复制生产环境到开发以及测试环境;
  • 备份过程中创建的对象是不会备份的;

二、安装Minio存储

使用MinIO存储备份的数据,本处以二进制方式部署单节点的MinIO服务来进行演示。

2.1 下载二进制文件

$ wget -c -k https://dl.min.io/server/minio/release/linux-amd64/minio
$ chmod +x minio
$ mv minio /usr/local/bin/
$ minio  --version
minio version RELEASE.2022-09-22T18-57-27Z (commit-id=20c89ebbb30f44bbd0eba4e462846a89ab3a56fa)
Runtime: go1.18.6 linux/amd64
License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
Copyright: 2015-2022 MinIO, Inc.

2.2 设置环境变量

以环境变量的方式定义MinIO的用户名和密码。

$ export MINIO_ROOT_USER=admin
$ export MINIO_ROOT_PASSWORD=minio123456

2.3 创建数据目录

创建一个目录来存放数据。

$ mkdir -p /data/minio/data

2.4 启动服务

$ minio server --console-address ":8000" /data/minio/data
MinIO Object Storage Server
Copyright: 2015-2023 MinIO, Inc.
License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
Version: RELEASE.2023-04-07T05-28-58Z (go1.20.3 linux/amd64)
Status:         1 Online, 0 Offline. 
API: http://192.168.2.3:9000  http://127.0.0.1:9000     
RootUser: admin 
RootPass: minio123456 
Console: http://192.168.2.3:8000 http://127.0.0.1:8000   
RootUser: admin 
RootPass: minio123456 
Command-line: https://min.io/docs/minio/linux/reference/minio-mc.html#quickstart
   $ mc alias set myminio http://192.168.2.3:9000 admin minio123456
Documentation: https://min.io/docs/minio/linux/index.html
Warning: The standard parity is set to 0. This can lead to data loss.

默认启动的API端口是9000(第三方应用通过该API实现数据的读取),还有一个Web Console的端口,并且Console监听的是一个动态的端口, 可以通过 --console-address ":port" 指定静态端口

2.5 登录MinIO UI

在启动服务时会输出登录的地址、用户名、密码,根据其输出信息在浏览器登录管理界面:

2.6 创建桶(Buckets)

登录管理界面后,可以在Buckets处点击”Create Bucket“创建一个名称为veleroback的存储桶,名称可以自行更改为其他,后面在安装Velero时需要提供该存储桶的名称。


三、安装Velero

3.1 安装 Velero CLI

$ wget https://github.com/vmware-tanzu/velero/releases/download/v1.10.2/velero-v1.10.2-linux-amd64.tar.gz
$ tar -zxvf velero-v1.10.2-linux-amd64.tar.gz 
velero-v1.10.2-linux-amd64/LICENSE
velero-v1.10.2-linux-amd64/examples/.DS_Store
velero-v1.10.2-linux-amd64/examples/README.md
velero-v1.10.2-linux-amd64/examples/minio
velero-v1.10.2-linux-amd64/examples/minio/00-minio-deployment.yaml
velero-v1.10.2-linux-amd64/examples/nginx-app
velero-v1.10.2-linux-amd64/examples/nginx-app/README.md
velero-v1.10.2-linux-amd64/examples/nginx-app/base.yaml
velero-v1.10.2-linux-amd64/examples/nginx-app/with-pv.yaml
velero-v1.10.2-linux-amd64/velero
$ cp velero-v1.10.2-linux-amd64/velero   /usr/local/bin/
$ velero --help

3.2 创建S3访问凭证

创建访问凭证,使Velero可以有权访问Minion存储。

$ cat credentials-velero
[default]
aws_access_key_id = admin    #minio的用户
aws_secret_access_key = minio123456    #minio的密码

3.3 安装Velero服务端

要求Kubernetes v1.16+,因为Helm使用了 CustomResourceDefinition。此 API 版本在 Kubernetes v1.16 中引入apiextensions.k8s.io/v1

首先需要在kubernetes集群中安装Velero。可以使用以下命令来安装:

velero install \
    --provider aws \
    --plugins velero/velero-plugin-for-aws:v1.2.0 \
    --bucket <your-bucket-name> \
    --secret-file ./credentials-velero \
    --backup-location-config  region=minio,s3ForcePathStyle="true",s3Url=<minio-url> \
    --image velero/velero:v1.5.3 \
    --namespace velero
  • --provider aws: 指定Velero使用AWS S3作为备份数据存储的提供者。如果需要使用其他对象存储提供者,可以修改该参数的值。
  • --plugins velero/velero-plugin-for-aws:v1.2.0: 指定Velero需要使用的插件。在这里,指定了使用Velero插件for AWS v1.2.0版本来支持AWS S3的备份存储。
  • --bucket veleroback: 指定Velero备份数据存储的S3存储桶名称。需要提前创建该存储桶,并确保Velero具有足够的权限来访问该存储桶。
  • --secret-file ./credentials-velero: 指定访问S3存储桶所需的凭证文件。该文件应该包含AWS访问密钥和密钥ID等信息。
  • --backup-location-config region=minio,s3ForcePathStyle=: 指定备份数据存储的配置选项。在这里,指定备份数据存储在Minio对象存储中,并设置存储桶的区域为"minio",同时启用S3路径样式访问。Minio的地址需要在前面添加协议,即http://xxx:9000。
# 我的命令:
$ velero install \
--provider aws --plugins velero/velero-plugin-for-aws:v1.2.0 \
--bucket veleroback --secret-file ./credentials-velero \
--backup-location-config  region=minio,s3ForcePathStyle="true",s3Url=http://192.168.2.3:9000  \
--image velero/velero:v1.10.2  --namespace velero-system

3.4 检查服务状态

  • 查看Pod状态
$ kubectl -n velero-system get pod
NAME                      READY   STATUS    RESTARTS   AGE
velero-7d6fdd754c-nnwbv   1/1     Running   0          91s
  • 查看Velero服务日志
$ kubectl logs deployment/velero -n velero-system
  • 查看Velero在kubernetes集群中创建的CRD
$ kubectl -n velero-system get crds -l component=velero
NAME                                CREATED AT
backuprepositories.velero.io        2023-04-09T11:58:38Z
backups.velero.io                   2023-04-09T11:58:38Z
backupstoragelocations.velero.io    2023-04-09T11:58:38Z
deletebackuprequests.velero.io      2023-04-09T11:58:38Z
downloadrequests.velero.io          2023-04-09T11:58:39Z
podvolumebackups.velero.io          2023-04-09T11:58:39Z
podvolumerestores.velero.io         2023-04-09T11:58:39Z
restores.velero.io                  2023-04-09T11:58:39Z
schedules.velero.io                 2023-04-09T11:58:39Z
serverstatusrequests.velero.io      2023-04-09T11:58:39Z
volumesnapshotlocations.velero.io   2023-04-09T11:58:39Z

3.5 卸载Velero(补充)

可以通过以下命令卸载Velero服务。

注意:卸载 Velero 服务器时,所有备份保持不变。

$ velero  uninstall --namespace velero-system
You are about to uninstall Velero.
Are you sure you want to continue (Y/N)? y     #输入y确认卸载
Waiting for velero namespace "velero-system" to be deleted
.............................................................
Velero namespace "velero-system" deleted
Velero uninstalled ⛵

四、备份Harbor

4.1 设置Harbor为“只读”

使用具有 Harbor 系统管理员权限的帐户登录到 Harbor 门户。展开管理,然后选择配置。选择“系统设置”选项卡。

选中“存储库只读”复选框,然后单击“保存”按钮以保存配置。

4.2 备份Harbor

使用以下命令创建Velero备份:

#将命名空间和备份名称替换为您的
$ velero backup create harbor-backup --include-namespaces harbor --snapshot-volumes --wait

其中,harbor-backup是备份名称,harbor是要备份的命名空间。velero存在不同版本备份的命令不一样的问题,可以使用--help查看详细的命令和参数。--namespace指定Velero服务所在的命名空间(不指定则默认为velero)

4.3 查看已有备份资源

$ velero backup get  --namespace velero-system

五、恢复数据

使用以下命令恢复数据:velero restore create --from-backup harbor-backup 其中,harbor-backup是要恢复的备份名称。

验证数据

使用以下命令验证数据是否已成功恢复:

$ kubectl -n harborget pods 
$ kubectl -n harborget pvc
$ kubectl -n harborget configmaps
$ kubectl -n harborget secrets

以上命令将返回Harbor中的所有Pod、PVC、ConfigMap和Secret。如果这些对象已成功恢复,则表示备份和恢复过程已经完成。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
5天前
|
运维 Kubernetes 监控
Kubernetes 集群的持续性能优化实践
【4月更文挑战第26天】 在动态且不断增长的云计算环境中,维护高性能的 Kubernetes 集群是一个挑战。本文将探讨一系列实用的策略和工具,旨在帮助运维专家监控、分析和优化 Kubernetes 集群的性能。我们将讨论资源分配的最佳实践,包括 CPU 和内存管理,以及集群规模调整的策略。此外,文中还将介绍延迟和吞吐量的重要性,并提供日志和监控工具的使用技巧,以实现持续改进的目标。
|
2天前
|
Kubernetes 网络协议 Python
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(二)
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(二)
|
2天前
|
Kubernetes 应用服务中间件 开发工具
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(一)
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(一)
|
6天前
|
Kubernetes 应用服务中间件 nginx
【博客大赛】搭建一套完整的企业级Kubernetes高可用集群(v1.20,二进制)
【博客大赛】搭建一套完整的企业级Kubernetes高可用集群(v1.20,二进制)
|
8天前
|
存储 运维 Kubernetes
Kubernetes 集群的监控与维护策略
【4月更文挑战第23天】 在微服务架构日益盛行的当下,容器编排工具如 Kubernetes 成为了运维工作的重要环节。然而,随着集群规模的增长和复杂性的提升,如何确保 Kubernetes 集群的高效稳定运行成为了一大挑战。本文将深入探讨 Kubernetes 集群的监控要点、常见问题及解决方案,并提出一系列切实可行的维护策略,旨在帮助运维人员有效管理和维护 Kubernetes 环境,保障服务的持续可用性和性能优化。
|
9天前
|
存储 运维 Kubernetes
Kubernetes 集群的持续性能优化实践
【4月更文挑战第22天】在动态且复杂的微服务架构中,确保 Kubernetes 集群的高性能运行是至关重要的。本文将深入探讨针对 Kubernetes 集群性能优化的策略与实践,从节点资源配置、网络优化到应用部署模式等多个维度展开,旨在为运维工程师提供一套系统的性能调优方法论。通过实际案例分析与经验总结,读者可以掌握持续优化 Kubernetes 集群性能的有效手段,以适应不断变化的业务需求和技术挑战。
|
19天前
|
运维 Kubernetes 监控
Kubernetes 集群的监控与维护策略
【4月更文挑战第12天】在微服务架构日益普及的当下,Kubernetes 作为容器编排的事实标准,承载着运行和管理大量服务的重要职责。本文将深入探讨 Kubernetes 集群的监控要点,并提出一系列切实可行的维护策略,旨在帮助运维人员确保集群的稳定性和性能优化。
|
29天前
|
Kubernetes Cloud Native 容器
完全免费的K8S学习平台:在线集群环境助力你的云原生之路!
完全免费的K8S学习平台:在线集群环境助力你的云原生之路!
35 1
|
27天前
|
数据库 存储 监控
什么是 SAP HANA 内存数据库 的 Delta Storage
什么是 SAP HANA 内存数据库 的 Delta Storage
17 0
什么是 SAP HANA 内存数据库 的 Delta Storage
|
21天前
|
Kubernetes 搜索推荐 网络协议
使用 kubeadm 部署 Kubernetes 集群(三)kubeadm 初始化 k8s 证书过期解决方案
使用 kubeadm 部署 Kubernetes 集群(三)kubeadm 初始化 k8s 证书过期解决方案
36 8

推荐镜像

更多