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