K8S 在多个 pod 中需要共享数据的时候,会使用 Persistant Volume 么?

2021-02-09 10:07:32 +08:00
 v2byy

或者其他方式?比如先把数据传递到其他 storage,比如 aws 的 s3,然后另外的 pod 再下载下来使用?

4246 次点击
所在节点    Kubernetes
26 条回复
monsterxx03
2021-02-09 10:12:12 +08:00
多个 pod 同时挂载同一个 pv 需要底下的具体实现支持 multiple access mode, https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes
v2byy
2021-02-09 10:16:17 +08:00
@monsterxx03 额,我是想问大家有没有这样的使用场景,或者有没有什么坑,或者说需要多个 pod 中共享数据的时候,使用什么解决方式
monsterxx03
2021-02-09 10:20:39 +08:00
其实互联网业务一般是不会这么实现的, 要么程序完全无状态, 本地不存储任何东西, 带状态的程序要么数据 sharding 到多个节点上去, 要么就是单节点存储.

你得说说具体的业务, 就算在单机上, 多个进程访问同一个文件也是有问题的(并发控制, 一致性...)
arischow
2021-02-09 10:24:22 +08:00
我用 emptyDir + s3fs 挂载前端的静态文件到 nginx
liuxu
2021-02-09 10:25:27 +08:00
用的是 pvc,它需要一个 StorageClass,s3 是其中一种实现
vus520
2021-02-09 10:26:20 +08:00
1,共享文件可以走 NFS,但我觉得这个操作是最不合理的,失去了程序的无状态性
2,共享配置文件可以走配置中心,像 ETCD 和 Apollo 什么的
3,共享缓存和持久可以走 Redis 和 Mysql
wg20080215
2021-02-09 10:40:43 +08:00
@vus520 #6 +1,看你需要共享什么数据,Kafka 、Redis 、MongoDB 、MySQL 等有状态的存储都是可以拿来共享的,通常来讲 PV 和 PVC 的使用并不是最优选择,相反是倒数的兜底选项。
OliverDD
2021-02-09 11:55:38 +08:00
用 pv 应该是比较好的思路,但是要注意底层的存储有些不支持多挂载...在尝试扩容时被坑了一下
mooyo
2021-02-09 12:32:11 +08:00
共享配置文件走 pv 有什么问题么?不太懂。。有大佬可以指教一下么
swulling
2021-02-09 12:38:04 +08:00
@v2byy 没啥坑,需要底层存储支持。

写时注意别并发冲突了就行。
swulling
2021-02-09 12:40:23 +08:00
另外一个良好的系统设计尽量规避这种并发挂载模式,扩容高可用都不好做。能不用就不用,不过这个看需求,没那么高可用性也不必操心这个。

比如你设计跨越数个机房的高可用系统,光实例就好几万,你再让他们去通过共享存储去共享数据,那显然是一个非常差的选择。
XiLingHost
2021-02-09 12:44:01 +08:00
@mooyo 共享配置文件最好是通过 configmap 而不是 pv
oakcdrom
2021-02-09 12:52:18 +08:00
我也挺好奇,数据共享应该怎么做,没接触过 docker 和 k8s,比如,多个节点挂载共享存储应该用什么方案
huangmingyou
2021-02-09 13:18:20 +08:00
你的看数据是什么类型的数据,比如少量数据可以用 kafka 或者 redis 等。大量数据才有必要用共享存储。
pepesii
2021-02-09 13:31:54 +08:00
有的,加载模型文件的应用,申请一个公用 PVC,RWX 的 MODE
mooyo
2021-02-09 13:42:34 +08:00
@XiLingHost 我们之前是 config map 但是后来感觉这个不能做回滚 不能做版本控制 不能做审计就换别的了。
wuhusihai
2021-02-09 14:26:37 +08:00
什么场景必须要把这种类似于状态的数据挂在尽量想无状态的微服务上? 这么做本身就是在给以后挖坑,比如你想提高整体集群的弹性,你还得想着 有个 storage 别忘了个挂载。 我觉得数据就应该在它该在的地方,DB,对象存储,Redis 等等
XiLingHost
2021-02-09 19:44:19 +08:00
@mooyo 可以啊,yml 在 git 里就好了,修改就 git pull && kubectl apply -f
mooyo
2021-02-09 21:32:55 +08:00
@XiLingHost 这倒是个办法,后期可以考虑迁到这一套上。
RedrumSherlock
2021-02-10 00:20:18 +08:00
考虑下 zookeeper+stateful set 呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/752530

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX