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

252 天前
 sniperking1234

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

2011 次点击
所在节点    Kubernetes
24 条回复
GeekGao
252 天前
x-y problem.
Achilless
252 天前
这种场景不是应该有配置中心吗
Achilless
252 天前
或者自带的 configmap
mritd
252 天前
1 、首先确定你的配置加载方式
2 、如果采用外部动态配置一般通过 配置中心 进行动态加载
3 、如果采用物理文件打包到镜像里, 推荐直接发版本进行滚动更新
4 、不要尝试在没有完整可追溯链路的情况下去更新敏感资源, 出问题你没法排查, 背锅妥妥的
Marinaaaa
252 天前
一般来说是使用配置中心之类的。

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

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

然后就是 k8s 获取 deploy 下的所有 pod 这个肯定是有的, 可以搜下 client-go ,里面有 Pods().LIST() , 用 LabelSelector 搜索 app=deploy-name 应该就可以的。
xiaooloong
252 天前
「肯定只能请求到其中 1 个 pod 上」
xiaooloong
252 天前
「肯定只能请求到其中 1 个 pod 上」这肯定是请求的 Service 。用 Endpoint 吧,所有的 IP 都有。
lidashuang
252 天前
pod 环境变量里读取配置

用 configmap 或者 secret

pod 重启就行
ss098
252 天前
使用 helm 的话可以考虑使用 configmap hashing 作为 deployment 的 annotations

https://stackoverflow.com/questions/54579641/does-helm-upgrade-on-a-configmap-automatically-inject-new-data-into-running-pod
cheng6563
252 天前
写个 k8s 控制器呗,随便问问 AI 就知道了。
sniperking1234
252 天前
@GeekGao
@Achilless
@mritd
@Marinaaaa
@lidashuang
@ss098
这里面的配置不是大家理解应用的配置,可以理解为一系列的规则,存放到数据库里面,可能会比较大(比如 100m )。在使用的时候是从数据库中读取到内存里面。当数据库更新的时候,我希望所有的 pod 能知道数据库更新了,然后读取数据库更新内存。所以 configmap 、secret 之类的方法就不适用了。
wzcloud
252 天前
spring-cloud-kubernetes, 可以做到热加在 configmap.
rrfeng
252 天前
为啥 configmap 就不适用了??太大?你可以只放个版本号啊…
sniperking1234
252 天前
@wzcloud 刚刚 append 了一下问题,configmap 不适用😂
sniperking1234
252 天前
@rrfeng 容我想想,这样好像可以
fcfangcc
252 天前
存 ETCD ,然后所有应用 WATCH 这个 key
Masoud2023
252 天前
zookeeper ? etcd ? nacos ?
blessingsi
252 天前
zk/etcd 的 watch 机制
GOOD21
252 天前
pub/sub
zaunist
252 天前
k8s 是靠 watch 资源变更实现的,不过你这个大于 100M 的配置文件,多少有点过于离谱了,这得多少配置项了。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/969802

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX