我有一个在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>我可以看到该文件.如果我使用kubectl编辑configmap my-config编辑配置图并更改内容,则在我的pod中运行的应用程序不会获得文件更改通知.我正在使用GO Lang进行应用程序,它没有收到文件/myapp/config/config.json上的fsnotify,即使我可以看到编辑后文件已更改.
如果我在我的笔记本电脑中运行相同的应用程序,当然,代码获取fsnotify并且我的应用程序更新它的配置.来自kubernetes的相同代码,来自configmap的文件,它不起作用.我已经阅读了其他SOF问题like this和其他各种问题,但没有具体解决我面临的问题.
据我所知,该文件(来自configmap)是一个符号链接,实际文件位于一个名为..data / config.json的文件夹中.我也尝试添加该文件,但仍未获取fsnotify信号.是否有可能获得来自应用程序中的configmap(以及机密)的文件的fsnotify信号?如果是这样,有人可以帮助我并说明如何做(最好是在GO朗)?
最佳答案 您可能遇到问题
like this:
When a ConfigMap changes, the real path to the config files it contains changed, but this is kinda “hidden” by 2 levels of symlinks: [..]
因此,似乎您需要遵循符号链接链并观察它.由于您的应用程序是用go编写的,因此您可以使用spf13/viper
,因为添加了功能WatchConfig and Kubernetes.
或者,您可以在changes of a ConfigMap获得Kubernetes API的通知.这需要最先配置一些access rules.