У меня есть переменная env
с именем app_conf_path
, которая указывает на \location\file.yaml
, который, в свою очередь, содержит все значения, необходимые для работы приложения. Приложению требуется это app_conf_path
, которое имеет местоположение file.yaml
для запуска приложения. Как я могу создать configmap
для этого типа установки?
Я начну говорить о понятиях ConfigMaps:
- ConfigMap - это словарь настроек конфигурации , Он состоит из пар ключ-значение строк.
- ConfigMaps полезны для отделения вашего кода от конфигурации.
- Вы можете создать карту конфигурации из каталогов , из буквальных значений или того, что мы хотим: из файла .
- ConfigMap можно рассматривать как том в кубернетах:
- На данные, хранящиеся в объекте
ConfigMap
, можно ссылаться в томе типа configMap
, а затем использовать в контейнерах приложений, работающих в модуле. - При ссылке на объект
configMap
вы можете просто укажите его имя в томе, чтобы ссылаться на него. Вы также можете настроить путь для использования для конкретной записи c в ConfigMap
Создание ConfigMap из файла:
- Для создания карты конфигурации вы запускаете команду:
kubectl create configmap <CONFIGMAP_NAME> --from-file=/location/file.yaml
- Вы также можете добавить более одного файла в один файл конфигурации, просто повторите аргумент
--from-file
, пример:
kubectl create configmap <CONFIGMAP_NAME> \
--from-file=path/db.properties \
--from-file=path/ui.properties
Я хочу прекратить монтировать persistentvolume
, который имеет этот file.yaml
, а file.yaml
является простой yaml
файл с деталями dbconnectionstrings
и paths
для других apps
Из представленных выше концепций вы намерены прекратить монтировать файл на PV для обслуживания. файл конфигурации может быть полностью реализован с помощью ConfigMap
.
- Я хотел бы предложить вам Пример ITHollow ConfigMap . Я собирался использовать его здесь, но ваше приложение уже построено с функцией поиска файла конфигурации снаружи. Я оставлю эту ссылку, чтобы вы могли увидеть, как вы можете использовать ConfigMap для других приложений, которые нуждаются во внешней настройке и не имеют жесткого кода для поиска в указанном файле c.
Воспроизводимый пример:
Это будет пример, который покажет вам, как выполнить ту часть, которую требует ваш вопрос.
- Это будет быть простым модулем
ubuntu
, в котором есть файл конфигурации, смонтированный в /tmp/file.yaml
, и этот путь к файлу будет переменной Env с именем app_conf_path
.
Во-первых, я ' Я создам файл с именем file.yaml
и добавим 3 значения:
$ cat file.yaml
key1: value1
key2: value2
key3: value3
ПРИМЕЧАНИЕ: имя file.yaml
не очень распространено, я Я использую его для эмуляции вашей среды, обычно мы используем что-то вроде app.properties
, и это не требует какой-либо предыдущей структуры, просто все значения в форме пары key:value
, как в моем примере.
- Теперь мы создадим файл конфигурации с именем
app.config
из файла file.yaml
. Файл находится в той же папке, где я запускаю команду, поэтому мне не нужно указывать полный путь:
$ kubectl create configmap app.config --from-file=file.yaml
configmap/app.config created
Имя файла становится ссылкой внутри configmap и будет использоваться позже .
- Давайте посмотрим созданную нами конфигурационную карту:
$ kubectl describe configmap app.config
Name: app.config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
file.yaml:
----
key1: value1
key2: value2
key3: value3
Events: <none>
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: ubuntu
image: ubuntu
command: [ "/bin/bash", "-c", "--" ]
args: [ "while true; do sleep 3000; done;" ]
volumeMounts:
- name: config-volume
mountPath: /tmp
env:
- name: app_conf_path
value: "/tmp/file.yaml"
volumes:
- name: config-volume
configMap:
name: app.config
ПРИМЕЧАНИЕ: Это очень интересный шаг. Мы создаем volume
, используя configmap
, и мы устанавливаем желаемое местоположение на mount
, что volume
. Каждый раздел configmap
будет файлом внутри этой папки. Поскольку мы создали его только из одного файла, это единственный файл, который будет смонтирован. Мы также установили ENV name
, который вам нужен, с value
в качестве пути к файлу.
- Теперь давайте применим его и откроем оболочку внутри стручка с помощью
kubectl exec -it <POD_NAME> -- /bin/bash
, чтобы увидеть наш результат:
$ kubectl apply -f app-deploy.yaml
deployment.apps/my-app created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-app-68b5b69fc8-xxqpw 1/1 Running 0 3s
$ kubectl exec -it my-app-68b5b69fc8-xxqpw -- /bin/bash
root@my-app-68b5b69fc8-xxqpw:/# printenv | grep app_conf_path
app_conf_path=/tmp/file.yaml
root@my-app-68b5b69fc8-xxqpw:/# cat $app_conf_path
key1: value1
key2: value2
key3: value3
Теперь мы достигли цели вашего запроса.
Внутри модуля есть файл конфигурации под названием file.yaml
с настройками конфигурации, которые мы использовали для создания файла конфигурации.
Вы не можете Вам не нужно беспокоиться о создании и поддержании тома отдельно.
Если у вас все еще есть какие-либо вопросы по этому поводу, дайте мне знать в комментариях.