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

大家有没有搞过有状态应用上 K8S

  •  1
     
  •   zhoudaiyu · 2021-04-14 12:58:28 +08:00 via iPhone · 5488 次点击
    这是一个创建于 1318 天前的主题,其中的信息可能已经有所发展或是发生改变。

    MySQL RabbitMQ Redis 等这种有状态中间件怎上 K8S ?是通过在上层使用开源的或者自己改的 operator,还是在底层二次开发这些中间件?存储用 local pv 还是 ceph 之类的?

    35 条回复    2021-04-18 00:41:23 +08:00
    stevefan1999
        1
    stevefan1999  
       2021-04-14 13:03:54 +08:00
    ??? StatefulSet*啊 你重學下 k8s 吧

    *雖然就算有 statefulset 也不一定能一勞永逸
    畢竟會有狀態同步問題
    這時候就是應用層面處理了
    你需要做簡單的 HA 譬如 JBoss/Vertex/DNS
    forbxy
        2
    forbxy  
       2021-04-14 13:09:43 +08:00   ❤️ 1
    网络存储都是垃圾,不适合这种存储应用,个人觉得这种东西就不适合上 k8s,statefulset 限制也很多的
    buliugu
        3
    buliugu  
       2021-04-14 13:09:56 +08:00
    k8s 原生只有 StatefulSet,正常用大家当然是等大厂放出官方的 operator 啦(逃
    fuis
        4
    fuis  
       2021-04-14 13:10:56 +08:00
    俺弄了重型有状态应用的移植。自己写了 operator,依赖一个 local pv provisioner
    楼上说的 statefulset 其实本身也有各种问题,比如默认的 rollingupdate 策略不能指定某个 pod,等等。不过总体来说我觉得还是比较容易的。
    liuzhaowei55
        5
    liuzhaowei55  
       2021-04-14 13:29:46 +08:00 via Android
    又不需要敏捷开发,多次发布,负载均衡也有自己的解决方案,为啥要用 k8s 呢
    CallMeReznov
        6
    CallMeReznov  
       2021-04-14 13:33:04 +08:00
    刚好,中午吃饭的时候阅读到的
    mysql 主备上 k8s:https://mp.weixin.qq.com/s/D3WI2JnhV4Bilb9DEkcOTA
    zhoudaiyu
        7
    zhoudaiyu  
    OP
       2021-04-14 13:34:33 +08:00
    @liuzhaowei55 #5 领导的意思这种玩意都尽可能上上去(除了 mysql )
    wingoo
        8
    wingoo  
       2021-04-14 13:34:45 +08:00
    有状态应用的问题是出了问题你能不能解决, 不能解决的话就不要上 k8s
    root01
        9
    root01  
       2021-04-14 13:42:18 +08:00
    我都现在都不明白有状态和无状态的区别
    wellsc
        10
    wellsc  
       2021-04-14 14:26:21 +08:00 via iPhone
    staefulset 也是个坑
    catchexception
        11
    catchexception  
       2021-04-14 14:38:10 +08:00
    一言难尽,无状态全上 K8s,有状态编排各有各的难点。负载均衡有时自己要在应用内实现,或者加 ClientIP 与 Pod 亲和。
    Redis 我记得有主从镜像的,可以直接拿来用。
    EPr2hh6LADQWqRVH
        12
    EPr2hh6LADQWqRVH  
       2021-04-14 14:40:18 +08:00
    云计算只有 CPU 内存和网络实现了动态分配。

    存储一直都是阵列提供的。

    数据库这种存储应用,不要考虑云计算,按传统部署来。
    KaynW
        13
    KaynW  
       2021-04-14 14:43:03 +08:00
    搞过
    XiaoxiaoPu
        14
    XiaoxiaoPu  
       2021-04-14 14:48:31 +08:00
    @avastms 存储早就云化了啊,对象存储、块存储、文件存储等等,很多了
    EPr2hh6LADQWqRVH
        15
    EPr2hh6LADQWqRVH  
       2021-04-14 14:52:31 +08:00
    @XiaoxiaoPu 对象存储不算存储, 快存储就是 iSCSI,阵列提供的, 文件存储就 smb/nfs,还是阵列。
    里外都是阵列,没那么灵活。
    XiaoxiaoPu
        16
    XiaoxiaoPu  
       2021-04-14 15:07:21 +08:00
    @avastms 对象存储怎么不是存储了,能存能读能持久化。块存储、文件存储早就有分布式的解决方案了,不依赖硬件。
    EPr2hh6LADQWqRVH
        17
    EPr2hh6LADQWqRVH  
       2021-04-14 15:29:39 +08:00   ❤️ 1
    @XiaoxiaoPu 能放数据库吗对象存储,就那个 IO 性能,歇了吧。

    我说存储没有云化,不是说它底层依赖单一硬件阵列,而是说它没法像 CPU 和内存那样动态放缩,灵活调配,它还是一块盘,不是一种资源。

    你是云提供商,你可以说像 ceph 这种东西完成了存储的云化,但对使用者来讲,你这个块设备是阵列给你的还是 ceph 给你的,对你来讲有差吗,不分区格式化能行吗?
    这块盘能多挂载多写吗,读写事件能都收到吗?
    那不还是阵列吗?

    所以说存储这一块它没有云化,像数据库这种东西,还是老样子啊,要想真正云化,需要普及一种高性能分布式文件系统先,能动态放缩的那种。

    存储的灵活性现在是数据库应用这层提供的,不是存储盘这层提供的。

    你可以说云数据库,这是真云, 云存储,得了吧,就是别人计算机上的盘而已。
    monsterxx03
        18
    monsterxx03  
       2021-04-14 15:41:05 +08:00
    @avastms 块设备很成熟了啊, aws ebs, gce pv, aws 自己的 rds 和 aurora 也是基于 ebs 的, 动态扩容一直可以, 缩不行, 但就我经验, 大多数业务缩容并不是一个刚需. 多挂载算是个痛点, NFS 这种太弱了, 但大多数应用也不是刚需. 现有的 sds 块设备方案基本能解决我碰到的 90%问题, iops 性价比也算是个问题.
    crclz
        19
    crclz  
       2021-04-14 15:44:47 +08:00
    @avastms 还真有你说的那种完全“云化”的数据库)。
    对象储存勉强算一种。此外,还有如下的:
    AWS DynamoDB, Azure CosmosDB, Google FireStore, 阿里云 Lindom Serverless
    XiaoxiaoPu
        20
    XiaoxiaoPu  
       2021-04-14 15:54:50 +08:00
    @XiaoxiaoPu 对象存储还真能放数据库,Snowflake 的数据仓库就是构建在对象存储之上。

    不分区不格式化、不能挂载多写一样用啊,数据库直接使用裸的块设备就是了
    vivisidea
        21
    vivisidea  
       2021-04-14 16:45:33 +08:00
    有些应用存储不适合走网络,非得 cephfs 来部署 mysql 不蛋疼么,随机读写性能得多差
    本地磁盘还好一点

    rancher 有个 local-path provisioner 可以简化 pv 管理 https://github.com/rancher/local-path-provisioner
    vivisidea
        22
    vivisidea  
       2021-04-14 16:50:41 +08:00
    zhujq
        23
    zhujq  
       2021-04-14 17:12:08 +08:00
    @zhoudaiyu 有状态应用还是用 operator 来做好,这上面有很多 database operator,可以看一下
    zhujq
        24
    zhujq  
       2021-04-14 17:14:55 +08:00
    ch2
        25
    ch2  
       2021-04-14 23:41:20 +08:00 via iPhone
    @XiaoxiaoPu 性能差很多
    XiaoxiaoPu
        26
    XiaoxiaoPu  
       2021-04-15 00:34:50 +08:00
    twl007
        27
    twl007  
       2021-04-15 02:42:06 +08:00 via iPhone
    需要 operator 来辅助 纯靠 k8s 自己还是蛮有挑战性的
    thet
        28
    thet  
       2021-04-15 16:45:42 +08:00
    @zhujq +1 k8s 部署服务最好是用 operator 来做,好管理,我就是在做 operator 这块的
    zhujq
        29
    zhujq  
       2021-04-16 14:33:37 +08:00
    @thet 🐂
    ldimple
        30
    ldimple  
       2021-04-17 15:38:56 +08:00
    @forbxy 我正想上来提问这个问题呢,就看到您说不合适了,那 redis 部署 k8s 有什么好处吗
    ldimple
        31
    ldimple  
       2021-04-17 15:41:01 +08:00
    @thet 那 k8s 部署 redis 集群有必要吗,或者说有什么好处呢
    thet
        32
    thet  
       2021-04-17 20:21:45 +08:00 via iPhone
    @ldimple #31 好处还是很多的,比如
    1. 部署方便很多,一个 cr 就可以了
    2. 扩展方便

    可以参考的 redis operator

    https://github.com/spotahome/redis-operator

    https://github.com/ucloud/redis-cluster-operator
    ldimple
        33
    ldimple  
       2021-04-18 00:10:25 +08:00
    @thet 您平时做 operator 开发这块的话目的是为了方便 K8s 部署吗,刚开始入门 k8s,不太清楚开发 operator 是为了啥
    thet
        34
    thet  
       2021-04-18 00:18:12 +08:00 via iPhone
    @ldimple #33 是的,operator 是用来管理应用的整个生命周期的。你如果想在 k8s 部署 redis 是完全可以的,毕竟 redis 是内存型的。简单部署甚至用个 pod 就可以了,如果是管理大量实例,operator 还是比较方便的。
    ldimple
        35
    ldimple  
       2021-04-18 00:41:23 +08:00
    @thet 谢谢您的回复,我搞着玩的,并不是真的生产应用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1173 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:17 · PVG 02:17 · LAX 10:17 · JFK 13:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.