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

什么情况下一个 Pod 会包含多个 Container 呢?

  •  
  •   fatyoung · 2024-03-20 17:26:05 +08:00 · 1356 次点击
    这是一个创建于 373 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近恶补了一下 k8s 的相关知识,有个疑惑:
    java web 应用场景下,订单服务是一个 Service ,会员服务是一个 Service ,两个 Service 下面包含多个 Pod 。Pod 是一组 Container 的集合,我的理解是,只需要一个 Container 就足够了吧?这个 Container 就是一个 jvm 用户进程。(除非我需要一个守护进程来维护锁或者啥的?)

    实际生产环境中,每一个服务的 Pod 是不是一般都是只有一个 Container 在跑?
    21 条回复    2024-03-21 14:38:06 +08:00
    fcfangcc
        1
    fcfangcc  
       2024-03-20 17:34:58 +08:00   ❤️ 1
    实际生产环境中,每一个服务的 Pod 是不是一般都是只有一个 Container 在跑?

    是的,一般都只有一个。

    多个的话,如果用了 service mesh 那么会起一个 sidecar 用来代理主 container 的流量,这个时候就有 2 个
    fatyoung
        2
    fatyoung  
    OP
       2024-03-20 17:36:38 +08:00
    @fcfangcc 好的谢谢
    ZeekChatCom
        3
    ZeekChatCom  
       2024-03-20 17:37:11 +08:00
    nginx + php-fpm 分 2 个 container 跑的😄
    fatyoung
        4
    fatyoung  
    OP
       2024-03-20 17:43:43 +08:00
    @ramirezyolis808 #3 请教下老哥,这样子做的原因是什么呢?
    wangzi168
        5
    wangzi168  
       2024-03-20 17:44:03 +08:00 via iPhone
    一个 pod 里面还可以有加解密的 container 、网关 container 等等。业务的 container 只需要关系自己的业务就好
    ZeekChatCom
        6
    ZeekChatCom  
       2024-03-20 17:45:59 +08:00
    @fatyoung 单纯地不想在同一个容器中存在不同类的进程。这有违容器化的初衷吧。
    ZeekChatCom
        7
    ZeekChatCom  
       2024-03-20 17:46:33 +08:00
    @wangzi168 内敛原则,自己的依赖自己解决。
    fatyoung
        8
    fatyoung  
    OP
       2024-03-20 17:56:35 +08:00
    @wangzi168 #5 网关不是通过 Ingress 就可以实现吗? 假设不通过 Ingress 实现,那网关服务是不是应该单独一个 Pod?
    fatyoung
        9
    fatyoung  
    OP
       2024-03-20 18:00:33 +08:00
    @ramirezyolis808 #6 这点我也疑惑。。
    homolabby
        10
    homolabby  
       2024-03-20 19:00:44 +08:00
    监控的 sidecar.,serviceesh 的 sidecar 或者 CSI 的 sidecar ,尤其是 CSI 的 sidecar ,如果不使用 sidecar ,使用 mount pod 模式的话,csi 的爆炸半径是所有使用这个 CSI 的 pod ,所有。所以,csi 作为 sidecar 模式是非常必须的。我不是很清楚贵司这方面是如何处理的,是无状态,不写,只读取数据吗? @fcfangcc 请问是不是没有使用 CSI 啊?请指点一下,谢谢您
    mr0joker
        11
    mr0joker  
       2024-03-20 19:07:42 +08:00
    有些业务场景可以使用边车模型,也就是上面提到过的一个 pod 里带两个 container
    gabon
        12
    gabon  
       2024-03-20 21:04:51 +08:00 via iPhone
    我们用 sidecar 做流量转发(跨协议)、监控等
    isno
        13
    isno  
       2024-03-20 21:18:23 +08:00   ❤️ 1
    https://www.thebyte.com.cn/container/orchestration.html#%E5%AE%B9%E5%99%A8%E7%9A%84%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-sidecar

    今晚能写完吧,可以明天再看。

    实际生产环境中,一个 Pod 一般有多个容器,比如 service-mesh 中的 envoy 容器,日志收集的容器,监控的容器。
    nthin0
        14
    nthin0  
       2024-03-20 22:02:12 +08:00
    我们一个 pod 下有一个业务 container 和一个 filebeat container
    sujin190
        15
    sujin190  
       2024-03-20 22:05:17 +08:00 via Android
    @fatyoung 一个特点就是同一个 pod 下边的不同容器是在同一个网络空间,此外内存和 cpu 等资源限制也是共享的
    wqferan
        16
    wqferan  
       2024-03-20 23:24:39 +08:00   ❤️ 1
    @homolabby 从应用层面, 一般是要做到无状态方便横向扩展, 有状态数据都写到数据库里去, 有临时目录的需求用 emptyDir
    CSI 早期版本应该都在 kube controller 里, 现在抽出来一般也是注册为 controller, 应该都是多实例单主运行,这个服务挂掉一般也是不影响已挂载的业务, 把这个东西注入到有状态容器里感觉没啥必要
    另外 k8s 开发手册里也有 csi sidecar,这几个 sidecar 是和 apiserver 交互的抽象, 让存储商专注驱动开发
    whileFalse
        17
    whileFalse  
       2024-03-21 02:03:41 +08:00 via Android
    用 aws ecs ,外挂监控组件、代理组件、日志组件什么的。
    fcfangcc
        18
    fcfangcc  
       2024-03-21 09:09:35 +08:00   ❤️ 1
    @homolabby 我们是除了 mesh 的是 sidecar 模式。其他监控,日志收集等的容器都是 node 级别的,一个 node 上部署一个 StatefulSet 或 Deployment 来管理该 node 下所有的 pod 。你说的 csi 我不太了解
    T4b918jJOXdkJ3h8
        19
    T4b918jJOXdkJ3h8  
       2024-03-21 10:26:53 +08:00
    @ramirezyolis808 哥们上班了
    ZeekChatCom
        20
    ZeekChatCom  
       2024-03-21 14:36:27 +08:00 via iPhone
    @gzldc 今天休息😁
    T4b918jJOXdkJ3h8
        21
    T4b918jJOXdkJ3h8  
       2024-03-21 14:38:06 +08:00
    @ramirezyolis808 你这公司不错
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2835 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 13:42 · PVG 21:42 · LAX 06:42 · JFK 09:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.