Al tener una actualización del mapa de configuración, ¿cómo activar automáticamente la recarga de parámetros por parte de la aplicación? La aplicación usa señales POSIX para eso.
Dependiendo de cómo esté consumiendo los valores del mapa de configuración, puede haber dos formas de volver a cargar las actualizaciones del mapa de configuración en un pod en ejecución.
Si está consumiendo las configuraciones como variables de entorno, puede escribir un controlador, que observa las actualizaciones en las configuraciones y reinicia sus pods con una nueva configuración cada vez que cambia la configuración.
Si está consumiendo el mapa de configuración a través de volúmenes, puede observar los cambios en los archivos y notificarlos a su proceso en el contenedor y manejar la actualización en la aplicación. Consulte https://github.com/jimmidyson/configmap-reload por ejemplo.
Hay buenas soluciones mencionadas aquí, pero traté de encontrar una solución que se pudiera hacer sin modificar las canalizaciones de implementación existentes, etc. Aquí hay un ejemplo de un Filebeat Daemonset de un gráfico de Helm que se recarga cuando cambia la configuración de filebeat. El enfoque no es nuevo: use la sonda de vida para activar una recarga del pod desde dentro del propio pod . postStart calcula una suma md5 del directorio configmap; la sonda de actividad lo comprueba. Eso es todo.
Los '...' son solo para cortar la cruft. Puede ver que el archivo filebeat.yml se monta directamente en /etc y lo utiliza el mismo filebeat. El mapa de configuración se vuelve a montar, específicamente con el fin de observar los cambios en el contenido del mapa de configuración.
Una vez que se edita el mapa de configuración (o se modifica de otro modo), toma algún tiempo antes de que el módulo se reinicie realmente. Puedes ajustar todo eso por separado.
#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 eg 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 ....