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