如何在kubernetes中通知应用程序有关更新的配置文件?

时间:2017-03-26 12:51:00

标签: docker kubernetes

进行configmap更新时,如何自动触发应用程序重新加载参数?应用程序使用POSIX信号。

2 个答案:

答案 0 :(得分:1)

根据您使用configmap值的方式,可以通过两种方式将configmap更新重新加载到正在运行的pod中。

  • 如果您将配置作为环境变量使用,您可以编写一个控制器,在配置中监视更新并在配置更改时使用新配置重新启动您的pod。

  • 如果您通过卷使用配置映射,则可以监视文件更改并将其通知容器中的进程并处理应用程序中的更新。例如,请参阅https://github.com/jimmidyson/configmap-reload

答案 1 :(得分:0)

这里提到了很好的解决方案,但是我试图找到一种无需修改现有部署管道即可完成的解决方案。 这是Helm图表中的filebeat守护程序集的示例,该文件在filebeat配置更改时会重新加载。这种方法并不陌生:使用活动探针从Pod 内部触发Pod 的重新加载。 postStart 计算configmap目录的md5和。活动度探针会对其进行检查。就是这样。

'...'只是为了减少残骸。您可以看到filebeat.yml文件直接挂载到/ etc中,并由filebeat本身使用。再次挂载configmap,专门用于观察configmap内容的更改。

一旦对configmap进行了编辑(或其他修改),则需要一段时间才能实际重新启动Pod。您可以分别调整所有这些内容。

#apiVersion: apps/v1
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: ...-filebeat
...
      containers:
      - name: ...-filebeat
        image: "{{ .Values.filebeat.image.url }}:{{ .Values.filebeat.image.version }}"
        imagePullPolicy: "{{ .Values.filebeat.image.pullPolicy }}"
        command: [ "filebeat" ]
        args: [
          "-c", "/etc/filebeat-config/filebeat.yml",
          "-e"
        ]
        env:
...
        resources:
...
    lifecycle:
      postStart:
        exec:
          command: ["sh", "-c", "ls -LRih /etc/filebeat-config | md5sum >> /tmp/filebeat-config-md5.txt"]
    livenessProbe:
      exec:
        # Further commands can be strung to the statement e.g. calls with curl
        command:
          - sh
          - -c
          - >
            x=$(cat /tmp/filebeat-config-md5.txt);
            y=$(ls -LRih /etc/filebeat-config | md5sum);
            if [ "$x" != "$y" ]; then exit 1; fi
      initialDelaySeconds: 60
      periodSeconds: 60
    volumeMounts:
    - name: filebeat-config
      mountPath: /etc/filebeat-config
      readOnly: true
....