【问题标题】:How to get notification inside an application in kubernetes when configmaps get updated更新配置映射时如何在 kubernetes 中的应用程序内获取通知
【发布时间】:2019-06-10 17:18:57
【问题描述】:

我有一个在kubernetes 内运行的应用程序,它有一个通过configmaps 挂载的文件。现在,从应用程序内部,当这个文件(来自 configmap)被更新时(让我们说通过kubectl update configmaps xyz 命令),我想执行一些操作。

假设我使用以下命令创建了一个配置映射:

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 编辑配置映射并更改内容,则在我的 pod 中运行的应用程序不会收到文件更改通知。我正在为应用程序使用 GO Lang,它没有收到文件 /myapp/config/config.json 上的 fsnotify,即使我可以看到编辑后文件已更改。

如果我在我的笔记本电脑上运行相同的应用程序,当然,代码会获取 fsnotify 并且我的应用程序会更新它的配置。来自 kubernetes 的相同代码与来自 configmap 的文件相同,但它不起作用。我已经阅读了其他 SOF 问题 like this 和其他各种问题,但没有针对我所面临的问题提供专门的解决方案。

我了解该文件(来自 configmap)是一个符号链接,实际文件位于名为 ..data/config.json 的文件夹中。我也尝试添加该文件,但仍然没有收到 fsnotify 信号。是否可以为来自应用程序中的 configmap(以及机密)的文件获取 fsnotify 信号?如果是这样,有人可以帮助我并展示如何做到这一点(最好在 GO 语言中)?

【问题讨论】:

    标签: go kubernetes configmap


    【解决方案1】:

    您可能会遇到问题like this

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

    因此,您似乎需要遵循符号链接链并注意这一点。由于您的应用程序是用go 编写的,因此您可以只使用spf13/viper,因为添加了WatchConfig and Kubernetes 功能。

    您也可以通过changes of a ConfigMap 上的 Kubernetes API 获得通知。这很可能需要预先配置一些access rules

    【讨论】:

    • 谢谢!这正是我想要的。我还没有测试它,但它清楚地描述了我面临的问题并解决了确切的问题!我只使用 Viper 库,但使用的是旧版本。您指出的链接提供了正确的信息,并且看起来 1.3.0 之后的所有版本都将具有此功能/修复。
    • 我不熟悉 go 怎么用 shell 做呢?
    【解决方案2】:

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

    【讨论】:

    • 对不起,不。我不想重新加载部署/应用程序。我希望应用程序获得通知,以便它可以对其状态进行一些动态更新。
    猜你喜欢
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多