【问题标题】:Edit file in k8s Pod in run time在运行时编辑 k8s Pod 中的文件
【发布时间】:2021-10-01 08:35:29
【问题描述】:

我有一个带有部署“X”的 k8s 集群(使用 OKD),有 1 个 pod“X_1”,并且该部署的卷中有一个文件“config.yaml”,用于配置正在运行的应用程序的某些方面。 此文件在ConfigMap 中设置为

data:
  x.config.file: |-
    ...

它与部署共享为:

template:
    metadata:
      creationTimestamp: null
      labels:
        app: x
        deploymentconfig: x
    spec:
      volumes:
        - name: config
          configMap:
            name: x-config
            items:
              - key: x.config.file
                path: config.yaml
            defaultMode: 420

在这个 pod 中运行的应用程序有一个 FileWatcher,它会在“config.yaml”文件被修改时检查它,它会根据文件的新状态更改其内部配置。

有没有办法在 k8s 中更改这个“config.yaml”文件,以便每个正在运行的 pod(在我的情况下只有一个,但是)获得新配置?

备选方案

有没有办法设置 k8s pod 以交互方式运行应用程序,因此终端选项卡中的命令直接转到应用程序(因此,以这种方式更改配置,而不是使用文件)。

更新

我已经检查过修改 ConfigMap,它实际上修改了内部文件。我 cat 来自终端的文件,它实际上会更新(有时需要时间)。 但问题是文件更新后没有调用inotify 回调。

【问题讨论】:

标签: kubernetes kubernetes-pod configmap file-watcher okd


【解决方案1】:

我终于在这里找到了问题。 k8s 在引用配置版本的子目录中创建ConfigMap 文件(在我的例子中,类似于:..2021_10_04_08_03_00.xxx)。并在预期的目录中创建一个符号链接,引用版本目录中的文件。

因此,正在更新的文件不是inotify 正在监视的实际文件。而关于inotify 文档(https://linux.die.net/man/7/inotify),链接文件中的更新不会被报告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 2022-01-22
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    相关资源
    最近更新 更多