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