K8S 如何做到通知 deployment 下的所有 pod? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sniperking1234
V2EX    Kubernetes

K8S 如何做到通知 deployment 下的所有 pod?

  •  1
     
  •   sniperking1234 2023-08-31 16:10:16 +08:00 2897 次点击
    这是一个创建于 838 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我的程序里面需要有一个更新配置的动作,如果在多副本的情况下,怎么能通知到所有 Pod 中的程序都执行更新配置呢?如果用 http 的方式的话,肯定只能请求到其中 1 个 pod 上,不清楚 K8S 本身是否有机制或者技巧来通知所有 deployment 下的 pod

    第 1 条附言    2023-08-31 17:24:08 +08:00
    这里的配置可以理解为一系列的规则,存放到数据库里面,会比较大(超过 100m )。从数据库中读取到内存里面使用的时候是。所以当数据库中的配置更新的时候,我希望所有的 pod 能知道数据库更新了,然后读取数据库更新内存。所以 configmap 、secret 之类的方法就不适用了。
    24 条回复    2023-09-02 14:44:07 +08:00
    R4rvZ6agNVWr56V0
        1
    R4rvZ6agNVWr56V0  
       2023-08-31 16:38:22 +08:00
    x-y problem.
    Achilless
        2
    Achilless  
       2023-08-31 16:49:46 +08:00
    这种场景不是应该有配置中心吗
    Achilless
        3
    Achilless  
       2023-08-31 16:50:13 +08:00
    或者自带的 configmap
    mritd
        4
    mritd  
       2023-08-31 16:50:46 +08:00
    1 、首先确定你的配置加载方式
    2 、如果采用外部动态配置一般通过 配置中心 进行动态加载
    3 、如果采用物理文件打包到镜像里, 推荐直接发版本进行滚动更新
    4 、不要尝试在没有完整可追溯链路的情况下去更新敏感资源, 出问题你没法排查, 背锅妥妥的
    marunrun
        5
    marunrun  
       2023-08-31 16:54:55 +08:00
    一般来说是使用配置中心之类的。

    应用启动的时候会自动注册到配置中心,所有的配置也都是在配置中心管理,一旦配置修改,会通知所有在线的应用更新。

    不太确定你的更新配置这个动作是在哪里?
    ----

    然后就是 k8s 获取 deploy 下的所有 pod 这个肯定是有的, 可以搜下 client-go ,里面有 Pods().LIST() , 用 LabelSelector 搜索 app=deploy-name 应该就可以的。
    xiaooloong
        6
    xiaooloong  
       2023-08-31 16:57:03 +08:00
    「肯定只能请求到其中 1 个 pod 上」
    xiaooloong
        7
    xiaooloong  
       2023-08-31 16:57:37 +08:00
    「肯定只能请求到其中 1 个 pod 上」这肯定是请求的 Service 。用 Endpoint 吧,所有的 IP 都有。
    G2bN4dbX9J3ncp0r
        8
    G2bN4dbX9J3ncp0r  
       2023-08-31 17:02:22 +08:00
    pod 环境变量里读取配置

    用 configmap 或者 secret

    pod 重启就行
    ss098
        9
    ss098  
       2023-08-31 17:07:15 +08:00
    使用 helm 的话可以考虑使用 configmap hashing 作为 deployment 的 annotations

    https://stackoverflow.com/questions/54579641/does-helm-upgrade-on-a-configmap-automatically-inject-new-data-into-running-pod
    cheng6563
        10
    cheng6563  
       2023-08-31 17:15:20 +08:00
    写个 k8s 控制器呗,随便问问 AI 就知道了。
    sniperking1234
        11
    sniperking1234  
    OP
       2023-08-31 17:21:58 +08:00
    @GeekGao
    @Achilless
    @mritd
    @Marinaaaa
    @lidashuang
    @ss098
    这里面的配置不是大家理解应用的配置,可以理解为一系列的规则,存放到数据库里面,可能会比较大(比如 100m )。在使用的时候是从数据库中读取到内存里面。当数据库更新的时候,我希望所有的 pod 能知道数据库更新了,然后读取数据库更新内存。所以 configmap 、secret 之类的方法就不适用了。
    wzcloud
        12
    wzcloud  
       2023-08-31 17:24:45 +08:00
    spring-cloud-kubernetes, 可以做到热加在 configmap.
    rrfeng
        13
    rrfeng  
       2023-08-31 17:25:40 +08:00 via Android   1
    为啥 configmap 就不适用了??太大?你可以只放个版本号啊…
    sniperking1234
        14
    sniperking1234  
    OP
       2023-08-31 17:25:57 +08:00
    @wzcloud 刚刚 append 了一下问题,configmap 不适用
    sniperking1234
        15
    sniperking1234  
    OP
       2023-08-31 17:31:34 +08:00
    @rrfeng 容我想想,这样好像可以
    fcfangcc
        16
    fcfangcc  
       2023-08-31 17:34:03 +08:00
    存 ETCD ,然后所有应用 WATCH 这个 key
    Masoud2023
        17
    Masoud2023  
       2023-08-31 17:41:30 +08:00
    zookeeper ? etcd ? nacos ?
    blessingsi
        18
    blessingsi  
       2023-08-31 17:49:18 +08:00
    zk/etcd 的 watch 机制
    GOOD21
        19
    GOOD21  
       2023-08-31 18:22:11 +08:00
    pub/sub
    RealYourDad
        20
    RealYourDad  
       2023-08-31 22:01:46 +08:00
    k8s 是靠 watch 资源变更实现的,不过你这个大于 100M 的配置文件,多少有点过于离谱了,这得多少配置项了。。。
    dayeye2006199
        21
    dayeye2006199  
       2023-09-01 00:15:22 +08:00 via Android
    直接滚动更新整个 deployment ,大家自己去读配置不行吗?
    mritd
        22
    mritd  
       2023-09-01 09:01:13 +08:00
    @sniperking1234 这种可以推荐用个队列 mq 啥的, 或者 etcd 弄个 watch 之类的
    G2bN4dbX9J3ncp0r
        23
    G2bN4dbX9J3ncp0r  
       2023-09-01 18:21:15 +08:00
    @sniperking1234 挂个 nfs,自己 程序处理
    julyclyde
        24
    julyclyde  
       2023-09-02 14:44:07 +08:00
    我觉得不应该对“活体 pod”进行变更操作
    如果其中之一故障了,被自动补齐,新启动的这个 pod 就会被通知机制漏掉了

    我觉得还是应该更新 deployment 的 image ,或者各 pod 自行 pull 新的配置
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2848 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 14:23 PVG 22:23 LAX 06:23 JFK 09:23
    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