Я пытаюсь сопоставить configMap в формате JSON с моим изображением докера в Kubernetes. Я использую пакет config npm для получения конфигураций.
Идея состоит в том, что у меня будет файл development.json в каталоге /config, оттуда его подхватит пакет конфигурации. Все это работает на локальном хосте. Имя файла конфигурации совпадает с именем переменной NODE_ENV, которую я также устанавливаю в файле deployment.yaml.
Я использую пространство имен по умолчанию
Это начало configMap (я вижу, что он создан в google kubernetes)
Я запускаю ls — это каталог конфигурации, чтобы увидеть, был ли смонтирован файл development.json, но это не так. Я хочу, чтобы /config был заменен и содержал только файл development.json
Я также пробовал с параметром subPath, но тот же результат
Что я делаю не так ? Должен ли я видеть в событиях, что configMap смонтирован. В журнале этого нет, за исключением случаев, когда я удаляю configMap и пытаюсь выполнить монтирование, поэтому я полагаю, что монтирование происходит.
apiVersion: v1
kind: ConfigMap
metadata:
name: config-development
namespace: default
data:
development.json: |
{
"production": false,
Вот крепление:
volumes:
- name: config-volume
configMap:
name: config-development
containers:
- name: salesforce-compare-api
image: XXXX
command: ["ls"]
args: ["config", "-la"]
imagePullPolicy: Always
env:
- name: NODE_ENV
value: "development"
volumeMounts:
- name: config-volume
mountPath: /config/development.json
Обычно, когда configmap не удается смонтировать, pod даже не запускается. Так что тот факт, что он запустился, показывает, что он смонтировался.
В любом случае ваш volumeMounts выглядит проблематично.
volumeMounts:
- name: config-volume
mountPath: /config/development.json
Это привело к тому, что полная карта конфигурации была смонтирована в папку с именем development.json, в то время как на самом деле вы хотите смонтировать только один файл.
Используйте для этого подпуть.
volumeMounts:
- name: config-volume
mountPath: /config/development.json
subPath: development.json
Тем не менее, если ваша папка config внутри контейнера в противном случае пуста, вы также можете удалить подпуть и смонтировать configmap в каталог / config, поскольку он не переопределит ничего важного.
volumeMounts:
- name: config-volume
mountPath: /config
Если вы хотите добиться этого, используйте второй представленный вариант. Кроме этого, можете ли вы запустить модуль и выполнить команду ls в /config, чтобы отобразить его содержимое? Вы можете добавить это к своему вопросу, возможно. Также покажите полную команду, которую вы используете, чтобы получить вывод ls.
@jani_r, вы уверены, что не путаете абсолютный и относительный пути? это относительно args: ["config", "-la"]
. Должно быть args: ["/config", "-la"]
, если ваш рабочий каталог не является корнем контейнера.
Я пробовал, то же самое. Файл development.json отсутствует в каталоге /config. Каталог /config не пуст, но я читал, что если вы сделаете это без subPath, весь каталог /config в контейнере докера будет заменен смонтированными данными. Это то, чего я хочу достичь.