У меня есть приложение, работающее внутри 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
и изменю содержимое, приложение, работающее в моем модуле, не получит уведомление об изменении файла. Я использую GO Lang для приложения, и оно не получает fsnotify в файле /myapp/config/config.json
, хотя я вижу, что после редактирования файл изменился.
Если я запустил то же приложение на своем ноутбуке, конечно, код получит fsnotify, и мое приложение обновит его конфигурацию. Тот же код из кубернетов с файлом из configmap, он не работает. Я читал другие вопросы по SOF подобные этому и другие, но ничего В частности, есть решение проблемы, с которой я сталкиваюсь.
Я понимаю, что файл (который поступает из configmap) является символической ссылкой, а фактический файл находится в папке с именем ..data/config.json
. Я также попытался добавить этот файл, но все еще не получил сигнал fsnotify. Можно ли получить сигнал fsnotify для файлов, поступающих из configmap (а также секретов) в приложении? Если да, может ли кто-нибудь помочь мне и показать, как это сделать (желательно на языке GO)?