ConfigMaps — это объекты Kubernetes, которые позволяют отделить данные/файлы конфигурации от содержимого изображения, чтобы обеспечить переносимость контейнерных приложений.
ConfigMaps связывают файлы конфигурации, аргументы командной строки, переменные окружения, номера портов и альтернативные артефакты конфигурации с вашими контейнерами Pod и системными частями во время выполнения.
ConfigMaps полезны для хранения и обмена неконфиденциальными незашифрованными данными конфигурации. Как и в Secrets, вы сможете создавать карты конфигурации из файлов и с объявлением yaml.
мы можем использовать карты конфигурации, связав его имя и том.
Создайте карту конфигурации:
Вы можете создавать карты конфигурации из каталогов, файлов или литеральных значений, используя kubectl create configmap .
$ cat app.properties
environment=production
logging=INFO
logs_path=$APP_HOME/logs/
parllel_jobs=3
wait_time=30sec
а также
kubectl create configmap app-config \
--from-file configs/app.properties
configmap "app-config" создан
что то же самое, что
kubectl create configmap app-config \
--from-file configs/
а также
kubectl create configmap app-config \
--from-literal environment=production \
--from-literal logging=INFO
.......
Список конфигмап:
kubectl get configmap/app-config
ИМЯ ДАННЫЕ ВОЗРАСТ
app-config 1 1m
Посмотреть конфигурационную карту:
kubectl описать configmap/app-config Имя: app-config Пространство имен: по умолчанию Ярлыки: < нет > Аннотации: < нет >Данные ==== app.properties: ---- environment=production logging=INFO logs_path=$APP_HOME/logs/ parllel_jobs=3 wait_time=30secСобытия: <нет>
Использование объявления YAML:
Файл configmap YAML будет выглядеть следующим образом:
вид: ConfigMap
apiVersion: v1
метаданные:
имя: пространство имен app-config
: данные по умолчанию
:
app.properties: |
среда = производственное
ведение журнала = ИНФОРМАЦИЯ
logs_path = $APP_HOME/logs/
parllel_jobs = 3
wait_time = 30 секунд
Вот базовая карта конфигурации nginx для приложения PHP.
---
apiVersion: v1
data:
nginx.conf: |-
events {
}
http {
server {
listen 80 default_server;
слушать [::]:80 default_server;
индекс index.html index.htm index.php;
корень /var/www/html;
имя сервера _;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}
}
}
вид: метаданные ConfigMap
:
имя: nginx-config
Использование карт конфигурации
ConfigMaps можно использовать для заполнения отдельных переменных среды, как показано ниже:
apiVersion: v1
вид:
метаданные модуля: имя: спецификация
моего приложения : контейнеры: - имя: образ моего приложения: мое приложение: последняя среда: - имя: значение ОКРУЖАЮЩЕЙ СРЕДЫ: configMapKeyRef: имя: ключ конфигурации приложения : среда - имя : LOG_MODE valueFrom: configMapKeyRef: имя: ключ app-config : ведение журнала — имя: LOG_PATH valueFrom: configMapKeyRef: имя: ключ app-config : logs_path — имя: THREDS_CLOUNT
valueFrom:
configMapKeyRef:
имя: ключ конфигурации приложения
: parllel_jobs
ConfigMaps также можно использовать в томах.
Самый простой способ — заполнить том файлами, где ключ — это имя файла, а содержимое файла — значение ключа:
---
apiVersion: v1 type:
Pod
metadata:
name: nginx-web
spec:
containers:
-
image: "nginx:1.7.9"
name: nginx
ports:
-
containerPort: 443
name: nginx-https
-
containerPort: 80
name: nginx-http
volumeMounts:
-
mountPath: /etc/nginx/nginx.conf
name: nginx-config
subPath: nginx.conf
volumes:
-
configMap:
name: nginx-config
name: nginx-config
Contents
Секреты Kubernetes против ConfigMaps
- Используйте секреты для вещей, которые на самом деле являются секретными, такими как ключи API, учетные данные и т. д.
- Используйте ConfigMaps для несекретных данных конфигурации
В будущем, вероятно, будут некоторые отличия для секретов, такие как ротация или поддержка поддержки секретного API с помощью HSM и т. д. В целом, нам нравятся API на основе намерений, и намерение определенно отличается для секретных данных от обычных. конфиги.
Одно заметное отличие в реализации заключается в том, что kubectl apply -f
:
- ConfigMaps считаются «неизменными», если данные не изменились.
- Секреты всегда «настраиваются» — даже если файл не изменился
И ConfigMaps, и Secrets хранят данные в виде пары ключ-значение. Основное отличие заключается в том, что Secrets хранит данные в формате base64, тогда как ConfigMaps хранит данные в виде обычного текста .
Если у вас есть некоторые важные данные, такие как ключи, пароли, учетные данные сервисных учетных записей, строка подключения к БД и т. д., вам всегда следует использовать секреты , а не конфигурации.
И если вы хотите выполнить некоторую настройку приложения, используя переменные среды, которые вы не хотите хранить в секрете/скрывать, например, тему приложения, URL-адрес базовой платформы и т. д., тогда вы можете использовать ConfigMaps.
Каково расположение каталога ConfigMap в модуле Kubernetes?
Многие приложения требуют настройки с помощью некоторой комбинации файлов конфигурации, аргументов командной строки и переменных среды. Эти артефакты конфигурации должны быть отделены от содержимого образа, чтобы обеспечить переносимость контейнерных приложений. Ресурс ConfigMap API предоставляет механизмы для внедрения в контейнеры данных конфигурации, при этом контейнеры не зависят от Kubernetes. ConfigMap можно использовать для хранения подробной информации, такой как отдельные свойства, или общей информации, такой как целые файлы конфигурации или большие двоичные объекты JSON.
Я не могу найти, где сохраняются configmaps. Я знаю, что они созданы, однако я могу прочитать их только через панель управления minikube.
ConfigMaps в Kubernetes можно использовать по-разному, и монтирование в виде тома — один из таких способов.
Вы можете выбрать, где вы хотите смонтировать ConfigMap на вашем Pod. Пример из документации K8s:
Карта конфигурации:
apiVersion: v1
вид:
метаданные ConfigMap:
имя: пространство имен special-config
: данные по умолчанию
:
special.how: очень
special.type: charm
Pod
apiVersion: v1 type
: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: gcr.io/google_containers/busybox
command: [ "/bin/sh", "-c", " cat /etc/config/special.how" ]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: special-config
restartPolicy: Never
Обратите внимание на определение тома и соответствующие монтирования тома.
Другие способы включают в себя:
- Потребление через переменные окружения
- Использование через аргументы командной строки
Полные примеры см. в документации .
Обновите k8s ConfigMap или Secret, не удаляя существующий
Вы можете получить YAML из kubectl create configmap
команды и передать его в kubectl replace
, например:
kubectl create configmap foo --from-file foo.properties -o yaml --dry-run | кубектл заменить -f -
Для справки в будущем, kubectl replace
теперь это очень удобный способ добиться этого
kubectl replace -f some_spec.yaml
Позволяет обновить полную configMap (или другие объекты)
Смотрите документ и примеры прямо здесь
Скопировать/вставить из справки:
# Замените модуль, используя данные из pod.json. kubectl заменить -f ./pod.json# Замените модуль на основе JSON, переданного на стандартный ввод. кошка pod.json | кубектл заменить -f -# Обновите версию (тег) образа модуля с одним контейнером до v4 kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | кубектл заменить -f -# Принудительно заменить, удалить и заново создать ресурс kubectl replace --force -f ./pod.json
Для небольших изменений configMap
используйтеedit
kubectl edit configmap <cfg-name>
kubectl replace
терпит неудачу, если configmap еще не существует:
$ kubectl create configmap foo --from-file foo.properties -o yaml --dry-run | кубектл заменить -f -Ошибка с сервера (NotFound): ошибка при замене "STDIN": configmaps "falco-config" не найден
Лучшим решением является использование kubectl apply
, которое создаст configmap, если оно отсутствует, иначе обновит configmap, если оно присутствует:
$ kubectl create configmap foo --from-file foo.properties -o yaml --dry-run | kubectl применить -f -configmap/falco-config настроен