Данные 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