如何备份LongHorn的PVC

前言

之前我们使用的是Velero实现基于K8S云原生的备份技术(点击查看博文),其实不是不能用只是它有点傻逼。主要的问题有这么几个:

  • PVC备份必须和pod一起备份,内部除开PVC里面的数据外面pod的环境变量、镜像等统统去备份了一波,虽然符合云原生的定位但是灵活度极差。
  • 使用命令行操作,可以说极其不友好,不方便运维,都上K8S不就是为了降低运维工作量吗?这样一搞除开管理页面随时需要进入服务器查看备份状态。
  • 配置备份范围依靠K8S注解实现,这里很容易出问题,理解上也会造成困惑。

我们真正意义上需要的备份到底是什么东西,我认为不是对服务运行状态进行备份而是仅仅备份其持久化数据,简单来说就是PVC里面的东西需要备份,一方面服务本身我们可以依靠Helm进行版本控制这个没有任何备份的必要,反而其持久化数据才是真正意义上需要备份的东西。

方式

首先Longhorn自身就兼容两种异地备份方案,第一是依靠S3协议下的对象存储系统,第二是依靠NFS协议提供的存储空间。由于一般来说Longhorn都是在Rancher体系下进行使用,所以我这里就说Rancher下如何配置备份。

S3对象存储备份

1、创建密文(secret)

在Longhorn所在的命名空间创建一个任意名称的密文卷,比如:obs-secret。然后在密码之中配置对象存储对应的配置参数信息:

说明
AWS_ACCESS_KEY_IDS3协议授权ID
AWS_SECRET_ACCESS_KEYS3协议授权秘钥
AWS_ENDPOINTSS3协议访问地址

这里需要注意一点,我们自己使用的华为云OBS,其本身是兼容S3的可以直接配置,但是阿里云非要我行我素不兼容S3需要自己想办法。然后Minio这种开源对象存储肯定也是兼容的所以直接使用即可。

2、配置Longhorn

在Longhorn的管理界面找到设置,里面有两个配置项:

配置项说明
Backup Target这里就是S3的地址或者NFS的地址
Backup Target Credential SecretS3情况下使用,写入上面创建的密文名称即可

Backup Target的值格式有点诡异大概是这个样子:s3://bucket_name@regino/,最后的/一定要加,其他都是S3的标准参数。

NFS存储备份

NFS要简单的多,无需配置密文一般NFS都没有什么验权保护,只需要在Backup Target写入NFS地址即可,格式如下:nfs://server_ip:/path,只有一个地方需要注意NFS需要支持NFSV4协议。

总结

这下真的完美了,一方面Longhorn通过我们的项目验证与长期测试验证,其分布式存储的稳定性与性能都能够满足项目使用。同时结合异地备份策略与方案真正意义上的内心踏实了很多,无论是之前的Ceph还是GlusterFS的成熟度都无法与他相提并论,同时期备份管理极其简单。

留下回复