我有一个应用程序在kubernetes中运行,通过configmaps挂载了一个文件。现在,当这个来自configmap的文件(假设是通过kubectl update configmaps xyz命令更新)被更新时,我想在应用程序内部执行一些操作。
假设我使用以下命令创建了一个configmap:
kubectl create configmap myy-config --from-file=config.json
我有一个这样的部署:
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: myapp
spec:
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
-
image: "xyz"
name: myapp
ports:
-
containerPort: 5566
volumeMounts:
-
mountPath: /myapp/config
name: config
dnsPolicy: ClusterFirstWithHostNet
volumes:
-
name: config
configMap:
name: my-config
现在,如果我执行
kubectl exec -it <pod> sh
,我可以看到文件。如果我使用 kubectl edit configmap my-config
编辑 configmap 并更改其内容,则运行在我的 pod 中的应用程序不会收到文件更改通知。我正在使用 GO 语言编写应用程序,即使我可以看到编辑后文件已更改,但它也无法接收到文件 /myapp/config/config.json
上的 fsnotify 事件。如果我在笔记本电脑上运行相同的应用程序,当然,代码会得到 fsnotify 并更新配置。但是,从 kubernetes 中运行相同的代码,使用来自 configmap 的文件,它不起作用。我已经阅读了其他类似于这样的 SOF 问题(例如)以及其他各种问题,但没有一个专门针对我面临的问题提供解决方案。
我理解来自 configmap 的文件(符号链接)实际上位于名为
..data/config.json
的文件夹中。我尝试添加该文件,但仍未收到 fsnotify 信号。是否可能在应用程序内获取来自 configmap(以及 secrets)的文件的 fsnotify 信号?如果可以,请有人帮忙并展示如何实现(最好使用 GO 语言)。