本地Kubernetes集群外能否写入共享持久化存储?求实现架构方案
Kubernetes跨集群内外共享存储方案解答
1. 有没有满足需求的文件系统类持久化存储?
当然有,像NFS、CephFS、GlusterFS这类分布式文件系统都能搞定——它们既能让K8s集群里的多个Pod挂载共享,也支持集群外的应用通过标准协议读写数据。
2. 合适的架构怎么搭?
以NFS为例(入门友好)
- 先部署一台或多台NFS服务器(生产环境建议做高可用集群),将存储数据的磁盘挂载到NFS服务器的指定目录,比如
/nfs-share。 - 在K8s集群内,通过
PersistentVolume(PV)和PersistentVolumeClaim(PVC)关联NFS存储:- 定义PV时,指定NFS服务器IP和共享目录
/nfs-share - 各Pod通过PVC挂载该PV,实现集群内多Pod共享存储
- 定义PV时,指定NFS服务器IP和共享目录
- 集群外应用直接通过NFS协议挂载同一个
/nfs-share目录即可。
分布式存储方案(适合大规模场景)
如果用CephFS或GlusterFS,架构为分布式集群模式:
- 由多台存储节点组成分布式存储集群,对外提供统一的文件系统访问入口
- K8s通过对应的CSI插件(如Ceph CSI、GlusterFS CSI)将存储挂载到Pod
- 集群外应用安装对应客户端工具,挂载共享目录即可。
3. 集群外怎么访问这些存储?
不同存储的访问方式不同:
- NFS:集群外服务器安装NFS客户端,执行命令
mount -t nfs <NFS服务器IP>:/nfs-share <本地挂载目录>,之后即可像操作本地文件夹一样读写数据。 - CephFS:集群外服务器安装Ceph客户端,配置好集群认证密钥,执行
mount -t ceph <Ceph集群MON节点IP>:/ <本地挂载目录> -o name=admin,secret=<认证密钥>完成挂载。 - GlusterFS:集群外服务器安装GlusterFS客户端,执行
mount -t glusterfs <Gluster节点IP>:<卷名> <本地挂载目录>即可挂载。
4. 更优的替代方案
如果觉得直接共享文件系统存在性能或一致性风险,还有更稳妥的方式:
- 用数据库服务代替文件系统共享:把数据放到独立的数据库(如MySQL、PostgreSQL)中,集群内Pod和集群外应用都通过数据库协议(JDBC、psql等)访问。数据库本身做了多客户端的并发控制和一致性保障,比直接共享文件系统更可靠,也是生产环境的常用做法。
- 对象存储+网关:使用MinIO这类S3兼容的对象存储,集群内Pod通过CSI插件挂载,集群外应用通过S3 API访问,适合存储图片、视频这类非结构化数据。
内容的提问来源于stack exchange,提问作者Ohad
相关产品推荐
相关产品推荐

