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

除了 supervisor 还有什么靠谱好用的容器内进程管理工具吗

  •  
  •   dzdh · 2022-09-21 13:31:10 +08:00 · 2361 次点击
    这是一个创建于 803 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不想有过多依赖,尽可能的减少镜像体积。

    比如 supervisor 需要 python 环境。pm2 需要 node 环境。可是程序是 php 的....

    第 1 条附言  ·  2022-09-22 09:10:28 +08:00

    nginx必须和fpm一起跑是因为有try_files等很多的自定义规则要验证本地脚本文件或者目录。当然可以规划pod运行多个容器同时共享volume。但是现阶段没有什么必要。而且对于php来说,无论是fpm还是nginx挂掉了,这个服务都没有存在的必要。

    29 条回复    2022-09-22 11:32:21 +08:00
    lovepocky
        1
    lovepocky  
       2022-09-21 13:32:29 +08:00 via iPhone
    systemd
    Jirajine
        2
    Jirajine  
       2022-09-21 13:35:53 +08:00
    runit 、s6
    6IbA2bj5ip3tK49j
        3
    6IbA2bj5ip3tK49j  
       2022-09-21 13:46:28 +08:00
    你容器用法就错了。
    dzdh
        4
    dzdh  
    OP
       2022-09-21 13:53:12 +08:00
    @lovepocky k8s 里不太适合吧
    dzdh
        5
    dzdh  
    OP
       2022-09-21 14:13:30 +08:00
    @Jirajine runit 测试接收不到退出信号

    s6 是个啥。压缩包解压只有 /package 和 /command 。容器镜像里没有 /init 命令
    julyclyde
        6
    julyclyde  
       2022-09-21 14:17:52 +08:00   ❤️ 2
    首先你在 docker 里用 supervisord (及同类产品)就用错了
    superchijinpeng
        7
    superchijinpeng  
       2022-09-21 14:26:57 +08:00
    为什么在容器里这么用?需要多个进程可以 Multi Containers 啊
    lambdaq
        8
    lambdaq  
       2022-09-21 14:31:20 +08:00
    https://skarnet.org/software/s6/ 这个看他简介把 supervisord 和 runit 都喷了一遍,就选他

    @julyclyde @xgfan 以前我也这么认为,但是现在用错的人太多感觉要改字典了
    dzdh
        9
    dzdh  
    OP
       2022-09-21 14:39:42 +08:00
    @superchijinpeng
    @julyclyde

    nginx+fpm 在一个 pod 里开两个容器共享存储然后 fastcgi_pass 127 么
    Jirajine
        10
    Jirajine  
       2022-09-21 15:29:52 +08:00
    @dzdh runit 和 s6 可以作为也可以不作为 pid 0 ,很多多进程的容器都是这么用的。
    virusdefender
        11
    virusdefender  
       2022-09-21 15:30:31 +08:00
    有个 go 写的 supervisor ,但是几年前用的时候有很多 bug ,现在不知道咋样了 https://github.com/ochinchina/supervisord
    dzdh
        12
    dzdh  
    OP
       2022-09-21 15:38:45 +08:00
    @virusdefender 这个看了看代码.....emm 咋说呢 有些地方的处理逻辑[可能]会发生意外导致进程退出没太敢用。我再去看看。
    zhoujinjing09
        13
    zhoujinjing09  
       2022-09-21 16:17:33 +08:00
    julyclyde
        14
    julyclyde  
       2022-09-21 17:01:01 +08:00
    @dzdh 为什么要 nginx+fpm 呢?你就 pod 里只运行 fpm 不就得了
    nginx 让 k8s ingress 来承担
    tcsky
        15
    tcsky  
       2022-09-21 20:20:10 +08:00
    MengiNo
        16
    MengiNo  
       2022-09-21 20:48:26 +08:00 via Android
    纯 docker 也有 docker compose 啊,自始至终感觉没啥必要往容器里塞两个(除了新手固有印象和一些“方便”党)。非得说,往 fpm 容器里装个 crond 也比装个 nginx 能接受点,毕竟从方便的角度纯 docker 确实欠缺这块。
    ClericPy
        17
    ClericPy  
       2022-09-21 20:59:57 +08:00
    没看到用容器的时候还想说 supervisord 就是平时玩玩用, 认真起来还是 systemd 那套. 看到容器... 总感觉怪怪的, 今天我手写个守护进程来保证同镜像更新代码热重启都觉得自己罪恶感, 用 supervisor 在容器里守护总感觉味道不太正
    wxyrrcj
        18
    wxyrrcj  
       2022-09-22 07:51:49 +08:00 via Android
    joker github 搜下
    julyclyde
        19
    julyclyde  
       2022-09-22 08:43:12 +08:00
    @lambdaq 哈哈,改字典
    我想起小时候学的“aiban 呆板”后来变成“daiban”了
    julyclyde
        20
    julyclyde  
       2022-09-22 08:43:47 +08:00
    @ClericPy 镜像作为一个“发行”单位,表面版本号还是应该和内涵版本号一致的。内更新不太好
    dzdh
        21
    dzdh  
    OP
       2022-09-22 09:06:19 +08:00
    @julyclyde #14

    try_files 的静态规则呢...
    julyclyde
        22
    julyclyde  
       2022-09-22 09:11:39 +08:00
    @dzdh 按说当代 URI 都不是由访客手工拼写的啊,为什么会有 try_files 的需求呢?你直接给它一个确保正确能用的 URI 不就行了?
    dzdh
        23
    dzdh  
    OP
       2022-09-22 09:13:12 +08:00
    @julyclyde 拿 laravel 来说 try_files $uri $uri/ /index.php 。我路由变化怎么办,老功能下线怎么办。用户访问旧 URL 直接返回 nginx 的 404 页么。当然不仅限这一种场景。
    julyclyde
        24
    julyclyde  
       2022-09-22 09:16:09 +08:00
    @dzdh error_page 指令?
    dzdh
        25
    dzdh  
    OP
       2022-09-22 09:27:44 +08:00
    @julyclyde #24

    不仅限这一种场景。项目比较老光 nginx 的配置不下上千行。

    参看 https://v2ex.com/t/881625 第六点 (这不是我司这不是我司这不是我司,只是其中一点类似)

    所以,问题是:有没有什么好用的容器多进程管理工具在容器中。
    julyclyde
        26
    julyclyde  
       2022-09-22 09:30:27 +08:00
    @dzdh 容器本身是一个独立的调度单位,再里面更加细分其实是不合适的

    如果下属进程故障,1 号进程有义务负责重启修复(不一定能成功),或者优雅退出,把错误交给上一级调度机制来处理(推卸责任)

    选哪个行为更好呢?
    dzdh
        27
    dzdh  
    OP
       2022-09-22 09:34:57 +08:00
    @julyclyde #26
    分离更好,但我们用不了。
    tairan2006
        28
    tairan2006  
       2022-09-22 11:14:39 +08:00
    有种为赋新词强说愁的感觉,上不了 k8s 就别上了……

    k8s 设计里,容器就是单进程模型,你搞这套还不如物理机得了。
    ClericPy
        29
    ClericPy  
       2022-09-22 11:32:21 +08:00 via Android
    @julyclyde 基础设施都没有呢,docker 都是偷偷装的... 烦
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3691 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:21 · PVG 12:21 · LAX 20:21 · JFK 23:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.