configmap
ConfigMap - сущность k8s, предназначенная для хранения конфигураций приложений и значений переменных среды.
По своей сути ConfigMap - это именнованная пара ключ-значение, которая загружается в namespace k8s, а уже из него поды могут брать нужные значения.
Пример с переменными окружения.
# Через указание дериктивы envFrom можно передать все переменные окружения указанные в блоке data объекта ConfigMap.
# Через дериктиву env можно передавать конкретные переменные
---
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-config
data:
POSTGRES_ROOT_PASSWORD: root
POSTGRES_DB: mydatabase
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
POSTGRES_INITDB_ARGS: "--encoding=UTF8"
---
apiVersion: apps/v1
kind: Deployment
...
spec:
containers:
- name: postgres
image: postgres:latest
envFrom: # k8s возьмет все пары kv из блока data и передаст их в контейнер в неизменном виде
- configMapRef:
name: postgres-config
ports:
- containerPort: 5432
---
...
spec:
containers:
- name: postgres
image: postgres:latest
env: # k8s возьмет значения указаных нами ключей и присвоит их указанным нами переменным
- name: POSTGRES_DB # имя переменной, которая будет передана в контейнер
valueFrom: # говорим куберу, что значение нужно брать из переменной
ConfigMapKeyRef: # говорим, что значение нужно брать из ConfigMap
name: postgres-config # Имя ConfigMap
key: POSTGRES_DB # Имя ключа записанного в ConfigMap, может отличаться от нашего имени переменной
Пример с передачей конфигурации для nginx
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
data:
nginx.conf: | # записываем в ключ nginx.conf блок данных
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
---
apiVersion: apps/v1
kind: Deployment
...
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
volumeMounts: # монтируем в контейнер volume с конфигом
- name: nginx-config-volume # имя volume
mountPath: /etc/nginx/conf.d # путь монтирования в контейнере
volumes: # создаем тома
- name: nginx-config-volume # имя volume
configMap: # говорим k8s, что том нужно создать из объекта configMap
name: nginx-config
Важно понимать, что данные в объекте ConfigMap можно и нужно менять, только чтобы обновления были доставленны в нужные контейнеры - деплойменты должны быть перезапущенны. Либо необходимо создавать такие приложения которые будут автоматически обновляться при изменении связанных с ними объектов ConfigMap