Configmap для переменной env, указывающей на файл - PullRequest
1 голос
/ 06 апреля 2020

У меня есть переменная env с именем app_conf_path, которая указывает на \location\file.yaml, которая, в свою очередь, содержит все значения, необходимые для работы приложения. Приложению требуется app_conf_path, расположение которого file.yaml запустить приложение. Как я могу создать configmap для этого типа установки. Прямо сейчас у меня есть file.yaml в persistentvolume и переменная env указывает на mountlocation. Я узнал о configmaps только недавно. Буду признателен за любую помощь в этом.

Ответы [ 3 ]

1 голос
/ 06 апреля 2020

У меня есть переменная 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 с настройками конфигурации, которые мы использовали для создания файла конфигурации.

Вы не можете Вам не нужно беспокоиться о создании и поддержании тома отдельно.

Если у вас все еще есть какие-либо вопросы по этому поводу, дайте мне знать в комментариях.

0 голосов
/ 06 апреля 2020

Конфигурации могут быть созданы с использованием манифестов YAML или kubectl.


kubectl create configmap app_conf_path --from-file=file.yaml

OR

configmap/configmap-multikeys.yaml 

apiVersion: v1
kind: ConfigMap
metadata:
  name: app_conf_path

data:
  Key1: very
  Key2: value2

kubectl create -f filename.yaml

apiVersion: v1
kind: Pod
metadata:
  name: busy
spec:
  containers:
    - name: busy
      image: busybox
      volumeMounts:
      - name: config
        mountPath: /etc/config
  volumes:
    - name: config
      configMap:
        name: app_conf_path
0 голосов
/ 06 апреля 2020

Как правило, настройка конфигурации в configmap выглядит следующим образом:

data:
  file.yaml: |
    # Some config
    # content goes here

А затем в вашем шаблоне pod вы получите что-то вроде:

containers:
- ...
  env:
  - name: app_conf_path
    value: /config/file.yml
  volumeMounts:
  - name: config
    mountPath: /config
volumes:
- name: config
  configMap:
    name: your-configmap
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...