Данные ConfigMap (формат yml) - Кубернетес

У меня есть файл application.yml (Spring), который имеет почти 70 полей, хочу переместить эти поля в ConfigMap. В процессе настройки ConfigMap, мы поняли, что все 70 полей были разбросаны. Пример: webservice.endpoint.transferfund Будет трудной задачей преобразовать все 70 полей как плоские, есть ли альтернатива.

Пожалуйста, предложите.

Ниже работает Config:

apiVersion: v1
kind: ConfigMap
metadata:
  name: configmapname
  namespace: default
data:
  webservice.endpoint.transferfund: http://www.customer-service.app/api/tf
  webservice.endpoint.getbalance: http://www.customer-service.app/api/balance
  webservice.endpoint.customerinfo: http://www.customer-service.app/api/customerinfo

Ниже конфиг не работает, пробовал в формате yml.

apiVersion: v1
kind: ConfigMap
metadata:
  name: configmapname
  namespace: default
data:
  application.yaml: |-
    webservice:
      endpoint:
        transferfund: http://www.customer-service.app/api/tf
        getbalance: http://www.customer-service.app/api/balance
        customerinfo: http://www.customer-service.app/api/customerinfo 

в src / main / resources / application.yml есть поля ниже для доступа к ключам ConfigMap:

webservice:
  endpoint:
    transferfund: ${webservice.endpoint.transferfund}
    getbalance: ${webservice.endpoint.getbalance}
    customerinfo: ${webservice.endpoint.customerinfo}

Обновлено:

Описание ConfigMap:

C:\Users\deskktop>kubectl describe configmap configmapname
Name:         configmapname
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
application.yaml:
----
webservice:
  endpoint:
    transferfund: http://www.customer-service.app/api/tf
    getbalance: http://www.customer-service.app/api/balance
    customerinfo: http://www.customer-service.app/api/customerinfo
Events:  <none>

Сценарий развертывания: (имя configMapRef предоставляется как имя configmap, как показано выше)

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: configmap-sample
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: configmap-sample
    spec:
      containers:
      - name: configmap-sample
        image: <<image>>
        ports:
        - name: http-api
          containerPort: 9000
        envFrom:
        - configMapRef:
            name: configmapname
        resources:
          limits:
            memory: 1Gi
          requests:
            memory: 768Mi
        env:
        - name: JVM_OPTS
          value: "-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1 -Xms768M"   

2 ответа

ConfigMap - это словарь настроек конфигурации. Он состоит из пар ключ-значение строк. Затем Kubernetes добавляет эти значения в ваши контейнеры.

В вашем случае вы должны сделать их плоскими, потому что Kubernetes не поймет их.

В документации по созданию ConfigMap вы можете прочитать, что:

kubectl create configmap <map-name> <data-source>

где - это имя, которое вы хотите присвоить ConfigMap, а также каталог, файл или буквальное значение, из которого извлекаются данные.

Источник данных соответствует паре ключ-значение в ConfigMap, где

  • ключ = имя файла или ключ, который вы указали в командной строке, и
  • значение = содержимое файла или литеральное значение, которое вы указали в командной строке.

Вы можете использовать kubectl describe или же kubectl get чтобы получить информацию о ConfigMap.

РЕДАКТИРОВАТЬ

Вы можете создать ConfigMap из файла с определенным ключом.

Определите ключ для использования при создании ConfigMap из файла

Синтаксис может выглядеть так:

kubectl create configmap my_configmap --from-file=<my-key-name>=<path-to-file> И ConfigMap может выглядеть следующим образом:

apiVersion: v1
kind: ConfigMap
metadata:
  creationTimestamp: 2019-07-03T18:54:22Z
  name: my_configmap
  namespace: default
  resourceVersion: "530"
  selfLink: /api/v1/namespaces/default/configmaps/my_configmap
  uid: 05f8da22-d671-11e5-8cd0-68f728db1985
data:
  <my-key-name>: |
    key=value
    key=value
    key=value
    key=value

Также мне удалось найти Create Kubernetes ConfigMaps из конфигурационных файлов.

функциональность

Проектор может:

  • Возьмите необработанные файлы и поместите их в ConfigMap
  • Глоб-файлы в вашем конфигурационном репо и вставьте ВСЕ из них в ваш configmap
  • Извлечение полей из ваших структурированных данных (yaml/json)
  • Создайте новые структурированные выходные данные из подмножества источника yaml / json, вытянув некоторые поля и отбросив другие
  • Перевести туда и обратно между JSON и YAML (преобразовать источник YAML в вывод JSON и т. Д.)
  • Поддержка извлечения сложных полей, таких как объекты + массивы из источников, а не только скаляры!

Вам необходимо смонтировать ConfigMap как том. В противном случае контент будет жить в переменных среды. Пример, который я публикую здесь, взят из https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "ls /etc/config/" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        # Provide the name of the ConfigMap containing the files you want
        # to add to the container
        name: special-config
  restartPolicy: Never

Вы упомянули, что используете application.yaml в контексте проекта Spring. Так что, если вам все равно, используете ли вы файлы конфигурации.yaml или.property, вы можете просто использовать файлы свойств, потому что создание configMap поддерживает их. Работает с--from-env-file флаг:

kubectl create configmap configmapname --from-env-file application.properties

Итак, в вашем файле развертывания вы можете напрямую получить доступ к ключам:

...
env:
  - KEYNAME
    valueFrom:
       configMapKeyRef:
          name: configmapname
          key: KeyInPropertiesFile
Другие вопросы по тегам