V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
v2byy
V2EX  ›  Kubernetes

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

  •  
  •   v2byy · 72 天前 · 1784 次点击
    这是一个创建于 72 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    写时注意别并发冲突了就行。
    swulling
        11
    swulling   72 天前
    另外一个良好的系统设计尽量规避这种并发挂载模式,扩容高可用都不好做。能不用就不用,不过这个看需求,没那么高可用性也不必操心这个。

    比如你设计跨越数个机房的高可用系统,光实例就好几万,你再让他们去通过共享存储去共享数据,那显然是一个非常差的选择。
    XiLingHost
        12
    XiLingHost   72 天前
    @mooyo 共享配置文件最好是通过 configmap 而不是 pv
    oakcdrom
        13
    oakcdrom   72 天前
    我也挺好奇,数据共享应该怎么做,没接触过 docker 和 k8s,比如,多个节点挂载共享存储应该用什么方案
    huangmingyou
        14
    huangmingyou   72 天前
    你的看数据是什么类型的数据,比如少量数据可以用 kafka 或者 redis 等。大量数据才有必要用共享存储。
    pepesii
        15
    pepesii   72 天前
    有的,加载模型文件的应用,申请一个公用 PVC,RWX 的 MODE
    mooyo
        16
    mooyo   72 天前 via iPhone
    @XiLingHost 我们之前是 config map 但是后来感觉这个不能做回滚 不能做版本控制 不能做审计就换别的了。
    wuhusihai
        17
    wuhusihai   72 天前
    什么场景必须要把这种类似于状态的数据挂在尽量想无状态的微服务上? 这么做本身就是在给以后挖坑,比如你想提高整体集群的弹性,你还得想着 有个 storage 别忘了个挂载。 我觉得数据就应该在它该在的地方,DB,对象存储,Redis 等等
    XiLingHost
        18
    XiLingHost   72 天前
    @mooyo 可以啊,yml 在 git 里就好了,修改就 git pull && kubectl apply -f
    mooyo
        19
    mooyo   72 天前
    @XiLingHost 这倒是个办法,后期可以考虑迁到这一套上。
    RedrumSherlock
        20
    RedrumSherlock   72 天前 via Android
    考虑下 zookeeper+stateful set 呢?
    dreamusername
        21
    dreamusername   71 天前   ❤️ 1
    S3 是对象存储,是不可以修改文件内容的,适合一定的场景,但不适合文件交换,那么对于文件交换就需要用到块存储。
    以 AWS 为例,支持的块存储有 EBS 、EFS 、FSx 等,其中 EBS 又分为 GP2 、GP3 、io1,除了 io1 某几种特殊型号外,都是 ReadWriteOnly 的,顾名思义就是单读单写,不适合我们的场景,另外的 EFS 与 FSx 是 ReadWriteMany 的,适合我们的场景,FSx 是属于高性能磁盘,价格昂贵,根据需求选择,EFS 是 NFS 在 AWS 的封装产品,使用上与 NFS 基本无异。
    但是要注意的是,对于这类需求的服务,本身状态是很强的,是需要考虑他们是不是有更好的部署方式。
    dayeye2006199
        22
    dayeye2006199   70 天前
    我们有很多计算密集型的任务(数据管道,机器学习),就是通过这个模式来的。每一个 pod 是一个 task,通过一个 RWX 的 PV 来做数据交换。
    dayeye2006199
        23
    dayeye2006199   70 天前
    @dayeye2006199 底下 storageclass 用的是类 NFS,例如 aws 的 EFS 或者 glusterFS 等
    v2byy
        24
    v2byy   70 天前 via iPhone
    @dayeye2006199 我们的业务也有点类似,也是 pod 会从 queue 里接 task,处理完的数据要暂存起来,最后汇总
    zhoudaiyu
        25
    zhoudaiyu   69 天前
    ceph ?
    kaneg
        26
    kaneg   65 天前 via iPhone
    NFS 可以 RWX 模式挂载多次
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1342 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:39 · PVG 01:39 · LAX 10:39 · JFK 13:39
    ♥ Do have faith in what you're doing.