django 应用里面的脚本怎么在 k8s 平台启动更合适? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
linxuan716
V2EX    Kubernetes

django 应用里面的脚本怎么在 k8s 平台启动更合适?

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

    这些脚本依赖于 django 环境,大概有 3 类 1 、偶尔需要执行一次的脚本 2 、定时执行的脚本 3 、监听 redis 指定键的脚本 这三类脚本加在一块大概有 100 多个,如果每个脚本都打成一个镜像,觉得太重,只是镜像文件就要占用很多的存储空间,有没有更加合适的方式?大家给提供下

    9 条回复    2025-08-02 20:45:26 +08:00
    coderth
        1
    coderth  
       115 天前
    全部打到一个镜像里面去不就行了,不同 pod 用不同的启动命令运行不同的脚本
    FarmerChillax
        2
    FarmerChillax  
       115 天前
    看下来,按我的理解第三个应该是要常驻运行的。那么可以将第一、第二个的脚本封装成一个 API 接口,按需执行。
    linxuan716
        3
    linxuan716  
    OP
       115 天前
    @FarmerChillax 你意思是封装成一个 API 接口,再建一个常驻运行的脚本定时调用吗?
    encro
        4
    encro  
       115 天前
    问 ai 都会给出 4 中答案啊,明显都可以
    akaHenry
        5
    akaHenry  
       115 天前
    100 多个脚本, 梳理一下, 做一些技术改造.

    1. 偶尔执行的. 改成 django admin 后台配置页面触发. 任务流, 改成 消息队列(生产者-消费者模型).

    基于 队列(kafka, rabbitmq, nats 都可以) 解耦: 动作触发(生产者) 和 动作执行(消费者).

    推荐 nats, 运维简单.

    工作流改造成:

    a. admin 侧, 触发动作, send task(参数包) 到消息队列, admin 结束.

    b. 消息队列的 监听者 worker, 收到 task, 解析参数, 执行具体任务, 结束.

    2. 定时任务, 可以试试 huey 和 django-huey, 支持 redis 监听不同的 queue 来分别监听 + 执行.

    比 celery 简单. 注意如果启用了 django 时区, huey 配置也要启用时区, 否则是 UTC 时间.(小坑) 其他使用挺完美.

    https://github.com/coleifer/huey

    https://github.com/gaiacoop/django-huey

    经过上述改造. 如果不考虑高可用, 单副本下, 你大概只需要部署 2-3 个容器实例, 就够了.

    需要注意, 如果是 k8s 多副本实例, 需要 MQ 消息 幂等唯一消费, 可以引入一个分布式锁判定, 可以简单用 redis 锁.

    上面的方案, 算是比较标准的做法.

    不要滥用 django scripts 的一些方便用法. (后期维护一堆烂脚本, 显然是不明智的)
    FarmerChillax
        6
    FarmerChillax  
       115 天前
    @linxuan716 脚本定时调用就没必要常驻了吧
    momocraft
        7
    momocraft  
       115 天前
    打包一个镜像 分别用于 job cronjob daemonset (或者别的)
    seers
        8
    seers  
       115 天前 via Android
    其实单独打包镜像不会很多,镜像的 layer 很多都是共用的
    bingfengfeifei
        9
    bingfengfeifei  
       115 天前
    1. 打成两个镜像,一个是基础运行环境镜像,另一个是代码包镜像,busybox 装就行,最小化。
    2. 使用 InitContainer 组合代码和运行环境变成一个 POD 。这样可以升级的时候,只升级代码包
    3. 执行不同脚本,你可以用不同的 POD
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2855 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by slitude
    VERSION: 3.9.8.5 22ms UTC 14:11 PVG 22:11 LAX 06:11 JFK 09:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86