K8S中ConfigMap更新的方式

最近的项目中,需要监控ConfigMap数据变化,然后通过grpc调用相应的接口通知业务系统发生变化。
首先我创建了另一个ConfigMap, 然后将它挂载到系统的/config目录下,然后监控这个目录的变化,
但发现我需要的某一个文件(比如db.properties)发生了修改, 则通知业务系统进行更新,

	if ev.Op&fsnotify.Write == fsnotify.Write {
						log.Println("写入文件 : ", ev.Name)
						var fileName = path.Base(ev.Name)
						if fileName == "db.properties" {
							log.Println("start call switchDB ")
							switchDB()
							log.Println("end call switchDB ")
						}
					}

当我把程序集成到docker镜像中后,通过rancher修改了ConfigMap, 程序什么也没有发生,没有任何调用Log,
但实际上通过cat /config/db.properties文件内容已经发生了变化,真是一个奇怪的情况,然后我打印了所有的目录变动记录,
发现configmap是用了符号链接,目录结构如下

drwxr-xr-x. 2 root root 27 Jun 25 08:47 ..2020_06_25_08_47_52.504274213
lrwxrwxrwx. 1 root root 31 Jun 25 08:47 ..data -> ..2020_06_25_08_47_52.504274213
lrwxrwxrwx. 1 root root 20 Jun 25 06:21 db.properties -> ..data/db.properties

当我们修改ConfigMap后, 然后重新创建新的目录(以时间命名的),最后将…data的符号链接
重新指向新创建的目录,最后删除原目录,对于我们最终使用的文件db.properties则没有任何变化。
以下是一次调用的过程

2020/06/25 08:47:52 创建文件 :  /config/..2020_06_25_08_47_52.504274213
2020/06/25 08:47:52 修改权限 :  /config/..2020_06_25_08_47_52.504274213
2020/06/25 08:47:52 重命名文件 :  /config/..data_tmp
2020/06/25 08:47:52 创建文件 :  /config/..data
2020/06/25 08:47:52 删除文件 :  /config/..2020_06_25_08_45_30.890655308
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章