为了账号安全,请及时绑定邮箱和手机立即绑定

configmaps 更新时如何在 kubernetes 的应用程序中获取通知

configmaps 更新时如何在 kubernetes 的应用程序中获取通知

Go
温温酱 2023-06-01 16:21:52
我有一个应用程序在其中运行kubernetes,其中有一个通过configmaps. kubectl update configmaps xyz现在,当这个文件(来自 configmap)更新时(比方说通过命令),我想从应用程序内部执行一些操作。假设我使用以下命令创建了一个 configmap:kubectl create configmap myy-config --from-file=config.json我的部署是这样创建的:apiVersion: apps/v1beta2kind: Deploymentmetadata:  name: myappspec:  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我可以看到该文件。如果我使用编辑 configmapkubectl edit configmap my-config并更改内容,则在我的 pod 中运行的应用程序不会收到文件更改通知。我正在为应用程序使用 GO Lang,它没有收到文件上的 fsnotify,/myapp/config/config.json即使我可以看到编辑后文件已更改。如果我在笔记本电脑上运行相同的应用程序,当然,代码会收到 fsnotify 并且我的应用程序会更新它的配置。来自 kubernetes 的相同代码与来自 configmap 的文件,它不起作用。我已经阅读过其他类似这样的SOF 问题和其他各种问题,但没有什么特别针对我面临的问题的解决方案。我知道该文件(来自 configmap)是一个符号链接,实际文件位于一个名为..data/config.json. 我也尝试添加该文件,但仍然没有收到 fsnotify 信号。是否有可能为来自应用程序中的 configmap(以及机密)的文件获取 fsnotify 信号?如果是这样,有人可以帮助我并展示如何去做(最好是在 GO lang 中)吗?
查看完整描述

2 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

您可能会遇到这样的问题:

当 ConfigMap 发生变化时,它包含的配置文件的真实路径也发生了变化,但这有点被 2 级符号链接“隐藏”了:[..]

因此,您似乎需要遵循符号链接链并观察它。由于您的应用程序是用 编写的,go您可以直接使用,因为添加了WatchConfig 和 Kubernetesspf13/viper功能。

或者,您可以通过 Kubernetes API 获得有关ConfigMap 更改的通知。这很可能需要预先配置一些访问规则。


查看完整回答
反对 回复 2023-06-01
?
烙印99

TA贡献1829条经验 获得超13个赞

听起来Reloader就是您要找的那个。它将监视 configmap/secret 并更新与其相关的部署。



查看完整回答
反对 回复 2023-06-01
  • 2 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信