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