Я вижу, что это не специфическое c поведение только для helm 3 . Обычно он работает в kubernetes таким образом.
Я только что проверил его на kubernetes v1.13 .
Сначала я создал ConfigMap
на основе этого файла:
apiVersion: v1
kind: ConfigMap
metadata:
name: json-test
data:
test.json: |-
{
"key": "val"
}
Когда я запускаю:
$ kubectl get configmaps json-test -o yaml
, я получаю ожидаемый результат:
apiVersion: v1
data:
test.json: |-
{
"key": "val"
}
kind: ConfigMap
metadata:
...
, но когда я создал свой ConfigMap
на основе json файла со следующим содержимым:
{
"key": "val"
}
, запустив:
$ kubectl create configmap json-configmap --from-file=test-json.json
Затем, когда я запустите:
kubectl get cm json-configmap --output yaml
я получу:
apiVersion: v1
data:
test-json.json: " { \n \"key\": \"val\"\n } \n"
kind: ConfigMap
metadata:
...
Похоже, что для kubernetes вполне нормально преобразовать исходный json формат в строку , когда из файла создается ConfigMap
.
Кажется, это не ошибка, поскольку у kubectl нет проблем с извлечением правильно отформатированного json формата из таких ConfigMap
:
kubectl get cm json-configmap -o jsonpath='{.data.test-json\.json}'
дает правильный вывод :
{
"key": "val"
}
Я бы сказал, что приложение должно извлекать json из такой строки , и это может быть сделано, вероятно, во многих например, прямой вызов kube-api
или serviceaccount
, настроенный на kubectl
в Pod
.