我的程序里面需要有一个更新配置的动作,如果在多副本的情况下,怎么能通知到所有 Pod 中的程序都执行更新配置呢?如果用 http 的方式的话,肯定只能请求到其中 1 个 pod 上,不清楚 K8S 本身是否有机制或者技巧来通知所有 deployment 下的 pod
1
GeekGao 241 天前
x-y problem.
|
2
Achilless 241 天前
这种场景不是应该有配置中心吗
|
3
Achilless 241 天前
或者自带的 configmap
|
4
mritd 241 天前
1 、首先确定你的配置加载方式
2 、如果采用外部动态配置一般通过 配置中心 进行动态加载 3 、如果采用物理文件打包到镜像里, 推荐直接发版本进行滚动更新 4 、不要尝试在没有完整可追溯链路的情况下去更新敏感资源, 出问题你没法排查, 背锅妥妥的 |
5
Marinaaaa 241 天前
一般来说是使用配置中心之类的。
应用启动的时候会自动注册到配置中心,所有的配置也都是在配置中心管理,一旦配置修改,会通知所有在线的应用更新。 不太确定你的更新配置这个动作是在哪里? ---- 然后就是 k8s 获取 deploy 下的所有 pod 这个肯定是有的, 可以搜下 client-go ,里面有 Pods().LIST() , 用 LabelSelector 搜索 app=deploy-name 应该就可以的。 |
6
xiaooloong 241 天前
「肯定只能请求到其中 1 个 pod 上」
|
7
xiaooloong 241 天前
「肯定只能请求到其中 1 个 pod 上」这肯定是请求的 Service 。用 Endpoint 吧,所有的 IP 都有。
|
8
lidashuang 241 天前
pod 环境变量里读取配置
用 configmap 或者 secret pod 重启就行 |
9
ss098 241 天前
使用 helm 的话可以考虑使用 configmap hashing 作为 deployment 的 annotations
https://stackoverflow.com/questions/54579641/does-helm-upgrade-on-a-configmap-automatically-inject-new-data-into-running-pod |
10
cheng6563 241 天前
写个 k8s 控制器呗,随便问问 AI 就知道了。
|
11
sniperking1234 OP |
12
wzcloud 241 天前
spring-cloud-kubernetes, 可以做到热加在 configmap.
|
13
rrfeng 241 天前 via Android 1
为啥 configmap 就不适用了??太大?你可以只放个版本号啊…
|
14
sniperking1234 OP @wzcloud 刚刚 append 了一下问题,configmap 不适用😂
|
15
sniperking1234 OP @rrfeng 容我想想,这样好像可以
|
16
fcfangcc 241 天前
存 ETCD ,然后所有应用 WATCH 这个 key
|
17
Masoud2023 241 天前
zookeeper ? etcd ? nacos ?
|
18
blessingsi 241 天前
zk/etcd 的 watch 机制
|
19
GOOD21 241 天前
pub/sub
|
20
zaunist 240 天前
k8s 是靠 watch 资源变更实现的,不过你这个大于 100M 的配置文件,多少有点过于离谱了,这得多少配置项了。。。
|
21
dayeye2006199 240 天前 via Android
直接滚动更新整个 deployment ,大家自己去读配置不行吗?
|
22
mritd 240 天前
@sniperking1234 这种可以推荐用个队列 mq 啥的, 或者 etcd 弄个 watch 之类的
|
23
lidashuang 240 天前
@sniperking1234 挂个 nfs,自己 程序处理
|
24
julyclyde 239 天前
我觉得不应该对“活体 pod”进行变更操作
如果其中之一故障了,被自动补齐,新启动的这个 pod 就会被通知机制漏掉了 我觉得还是应该更新 deployment 的 image ,或者各 pod 自行 pull 新的配置 |