
С его помощью мы можем создать карту конфигурации, связанную с внешним файлом.
kubectl create configmap database-config --from-file=database.properties
Но когда мы отредактируем yaml, то увидим, что туда сброшено полное содержимое файла.
Можно ли как-то просто указать файл в yaml, чтобы я сохранил файл свойств в той же папке, что и yaml-файл configmap, и применил к этой папке все yaml-файлы с помощью:
kubectl apply -f target_folder\
Пожалуйста, предложите.
решение1
Чтоconfigmap
ConfigMap — это API-объект, используемый для хранения неконфиденциальных данных в парах ключ-значение. Pod могут использовать ConfigMaps как переменные среды, аргументы командной строки или как файлы конфигурации в томе.
ConfigMap позволяет отделить специфичную для среды конфигурацию от образов контейнеров, что позволяет легко переносить ваши приложения.
Другими словами, когда configmap
создается из внешнего файла (как в вашем случае) или из других значений, сервер API проверит, все ли правильно, а затем сохранит его в etcd
. Это также объясняет причины, по которым, когда вы edit
видите configmap
весь его контекст. Это происходит, потому что configmap
считывается из etcd
, а не из каких-либо внешних источников.
Это также одна из причин, по которой не рекомендуется хранить большие файлы сохранения как configmaps или secrets — это повлияет на производительность кластера Kubernetes, поскольку все объекты кластера хранятся в etcd
.
Настроить
Это один из способов выполнить ваше требование по запуску одной команды для создания/настройки configmap
на основе файла в том же каталоге. Это автономный инструмент для настройки объектов Kubernetes через файл kustomization.
Я создал короткий и простой пример, чтобы продемонстрировать эту идею:
$ tree
.
├── application.properties
└── kustomization.yaml
0 directories, 2 files
$ cat kustomization.yaml
generatorOptions:
disableNameSuffixHash: true # this flag is used to avoid creation of new configmap, instead it will be modified when file context is changed
configMapGenerator:
- name: application-config
files:
- application.properties
$ cat application.properties
listen.url=localhost:9010
client.url=some_url:3000
Проверьте это, эта команда будеттолько рендеритьconfigmap, он пока не будет создан:
$ kubectl kustomize application.settings/
apiVersion: v1
data:
application.properties: |
listen.url=localhost:9010
client.url=some_url:3000
kind: ConfigMap
metadata:
name: application-config
Последний шаг —применятьэто:
$ kubectl apply -k application.settings/
configmap/application-config created
$ kubectl get cm
NAME DATA AGE
application-config 1 23s
Краткое пояснение к вышеприведенной команде:
Чтобы применить эти ресурсы, запустите kubectl apply с флагом --kustomize или -k.