如何备份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_ID | S3协议授权ID |
AWS_SECRET_ACCESS_KEY | S3协议授权秘钥 |
AWS_ENDPOINTS | S3协议访问地址 |
这里需要注意一点,我们自己使用的华为云OBS,其本身是兼容S3的可以直接配置,但是阿里云非要我行我素不兼容S3需要自己想办法。然后Minio
这种开源对象存储肯定也是兼容的所以直接使用即可。
2、配置Longhorn
在Longhorn的管理界面找到设置,里面有两个配置项:
配置项 | 说明 |
---|---|
Backup Target | 这里就是S3的地址或者NFS的地址 |
Backup Target Credential Secret | S3情况下使用,写入上面创建的密文名称即可 |
Backup Target
的值格式有点诡异大概是这个样子:s3://bucket_name@regino/
,最后的/
一定要加,其他都是S3的标准参数。
NFS存储备份
NFS要简单的多,无需配置密文一般NFS都没有什么验权保护,只需要在Backup Target
写入NFS地址即可,格式如下:nfs://server_ip:/path
,只有一个地方需要注意NFS需要支持NFSV4协议。
总结
这下真的完美了,一方面Longhorn通过我们的项目验证与长期测试验证,其分布式存储的稳定性与性能都能够满足项目使用。同时结合异地备份策略与方案真正意义上的内心踏实了很多,无论是之前的Ceph还是GlusterFS的成熟度都无法与他相提并论,同时期备份管理极其简单。