或者其他方式?比如先把数据传递到其他 storage,比如 aws 的 s3,然后另外的 pod 再下载下来使用?
或者其他方式?比如先把数据传递到其他 storage,比如 aws 的 s3,然后另外的 pod 再下载下来使用?
|
monsterxx03Feb 9, 2021
1
多个 pod 同时挂载同一个 pv 需要底下的具体实现支持 multiple access mode, https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes
|
|
2
@monsterxx03 额,我是想问大家有没有这样的使用场景,或者有没有什么坑,或者说需要多个 pod 中共享数据的时候,使用什么解决方式
|
|
3
其实互联网业务一般是不会这么实现的, 要么程序完全无状态, 本地不存储任何东西, 带状态的程序要么数据 sharding 到多个节点上去, 要么就是单节点存储.
你得说说具体的业务, 就算在单机上, 多个进程访问同一个文件也是有问题的(并发控制, 一致性...) |
|
arischowFeb 9, 2021
4
我用 emptyDir + s3fs 挂载前端的静态文件到 nginx
|
|
liuxuFeb 9, 2021
5
用的是 pvc,它需要一个 StorageClass,s3 是其中一种实现
|
|
6
1,共享文件可以走 NFS,但我觉得这个操作是最不合理的,失去了程序的无状态性
2,共享配置文件可以走配置中心,像 ETCD 和 Apollo 什么的 3,共享缓存和持久可以走 Redis 和 Mysql |
|
wg20080215Feb 9, 2021
7
@vus520 #6 +1,看你需要共享什么数据,Kafka 、Redis 、MongoDB 、MySQL 等有状态的存储都是可以拿来共享的,通常来讲 PV 和 PVC 的使用并不是最优选择,相反是倒数的兜底选项。
|
|
clickclickFeb 9, 2021
8
用 pv 应该是比较好的思路,但是要注意底层的存储有些不支持多挂载...在尝试扩容时被坑了一下
|
|
mooyoFeb 9, 2021 via iPhone
9
共享配置文件走 pv 有什么问题么?不太懂。。有大佬可以指教一下么
|
|
swullingFeb 9, 2021
11
另外一个良好的系统设计尽量规避这种并发挂载模式,扩容高可用都不好做。能不用就不用,不过这个看需求,没那么高可用性也不必操心这个。
比如你设计跨越数个机房的高可用系统,光实例就好几万,你再让他们去通过共享存储去共享数据,那显然是一个非常差的选择。 |
|
KagurazakaNyaaFeb 9, 2021
12
@mooyo 共享配置文件最好是通过 configmap 而不是 pv
|
|
oakcdromFeb 9, 2021
13
我也挺好奇,数据共享应该怎么做,没接触过 docker 和 k8s,比如,多个节点挂载共享存储应该用什么方案
|
|
huangmingyouFeb 9, 2021
14
你的看数据是什么类型的数据,比如少量数据可以用 kafka 或者 redis 等。大量数据才有必要用共享存储。
|
|
pepesiiFeb 9, 2021
15
有的,加载模型文件的应用,申请一个公用 PVC,RWX 的 MODE
|
|
mooyoFeb 9, 2021 via iPhone
16
@XiLingHost 我们之前是 config map 但是后来感觉这个不能做回滚 不能做版本控制 不能做审计就换别的了。
|
|
wuhusihaiFeb 9, 2021
17
什么场景必须要把这种类似于状态的数据挂在尽量想无状态的微服务上? 这么做本身就是在给以后挖坑,比如你想提高整体集群的弹性,你还得想着 有个 storage 别忘了个挂载。 我觉得数据就应该在它该在的地方,DB,对象存储,Redis 等等
|
|
KagurazakaNyaaFeb 9, 2021
18
@mooyo 可以啊,yml 在 git 里就好了,修改就 git pull && kubectl apply -f
|
|
mooyoFeb 9, 2021
19
@XiLingHost 这倒是个办法,后期可以考虑迁到这一套上。
|
|
RedrumSherlockFeb 10, 2021 via Android
20
考虑下 zookeeper+stateful set 呢?
|
|
21
S3 是对象存储,是不可以修改文件内容的,适合一定的场景,但不适合文件交换,那么对于文件交换就需要用到块存储。
以 AWS 为例,支持的块存储有 EBS 、EFS 、FSx 等,其中 EBS 又分为 GP2 、GP3 、io1,除了 io1 某几种特殊型号外,都是 ReadWriteOnly 的,顾名思义就是单读单写,不适合我们的场景,另外的 EFS 与 FSx 是 ReadWriteMany 的,适合我们的场景,FSx 是属于高性能磁盘,价格昂贵,根据需求选择,EFS 是 NFS 在 AWS 的封装产品,使用上与 NFS 基本无异。 但是要注意的是,对于这类需求的服务,本身状态是很强的,是需要考虑他们是不是有更好的部署方式。 |
|
dayeye2006199Feb 11, 2021
22
我们有很多计算密集型的任务(数据管道,机器学习),就是通过这个模式来的。每一个 pod 是一个 task,通过一个 RWX 的 PV 来做数据交换。
|
|
dayeye2006199Feb 11, 2021
23
@dayeye2006199 底下 storageclass 用的是类 NFS,例如 aws 的 EFS 或者 glusterFS 等
|
|
24
@dayeye2006199 我们的业务也有点类似,也是 pod 会从 queue 里接 task,处理完的数据要暂存起来,最后汇总
|
|
zhoudaiyuFeb 12, 2021
25
ceph ?
|
|
kanegFeb 17, 2021 via iPhone
26
NFS 可以 RWX 模式挂载多次
|