Общие сведения о конфигурации Kubernetes
В репозитории приложений есть файл конфигурации , загруженный в файл index.html
, чтобы позволить переменным среды обновляться без необходимости полной сборки образа.
Файл конфигурации не содержит конфиденциальную информацию, его просто необходимо загрузить вместе с контейнером. Как подключить файл в контейнере без необходимости шифрования или кодирования?
Общие сведения о ConfigMaps
ConfigMaps являются аналогами секретов. Хотя Секреты предоставляют способ для хранения и передачи конфиденциальных данных, ConfigMaps — это объекты, которые позволяют хранить нечувствительные данные, используя ту же структуру ключ-значение, что и Секреты. Объект ConfigMaps позволяет отделить конфигурации от образов контейнеров, чтобы они оставались без состояния.
Вы создаете ConfigMap для хранения данных конфигурации отдельно от кода приложения и загружаете его аналогично тому, как мы загружаем объекты Secret в pod. Вы можете ссылаться только на ConfigMaps с помощью переменной среды или путем подключения их в виде файла в томе внутри контейнера.
ConfigMaps имеют ограничение на размер данных: в одном ConfigMap можно хранить до 1 МиБ данных. Ограничение размера помогает избежать больших и сложных файлов конфигурации, разбив большие конфигурации на небольшие блоки. С помощью ConfigMaps можно подключить только необходимые файлы конфигурации в контейнерах, что позволяет повысить степень детализации.
Как и секреты, ConfigMaps находятся в пространстве имен. Вы можете получить доступ к ConfigMap и подключить его только с помощью контейнеров, присутствующих в том же пространстве имен, в котором он был создан.
ConfigMaps также широко используются другими средствами, такими как Helm и Kubernetes Operators, для хранения и чтения состояний.
Обновления ConfigMap
Все ConfigMaps, которые монтируются как тома внутри pod, автоматически обновляются, как только изменяется их значение. Это изменение может произойти не сразу из-за конфигурации Kubelet, но это происходит автоматически, поэтому перезапуск pod не требуется.
Если ConfigMap привязан к переменным среды, он не обновляется автоматически. В таких случаях необходимо перезапустить Pod, чтобы изменения вступили в силу.
Создание и использование ConfigMaps
Вы можете создать ConfigMap, используя тот же подход, что и секрет: файл YAML. Спецификация ConfigMap выглядит следующим образом:
apiVersion: v1
kind: ConfigMap
metadata:
name: configmap-name
namespace: default
data:
key-name: "value as key"
key.name: |
multi line
property, called "file-like" values
Вы можете ссылаться на конфигурационные карты по одному или нескольким ключам в спецификации Pod или Deployment, как показано в следующем примере:
apiVersion: v1
kind: Pod
metadata:
name: configmap-as-env
namespace: default
spec:
containers:
- name: configmap-env
image: alpine
command: ["sleep", "3600"]
env:
- name: ENVIRONMENT_VARIABLE_NAME
valueFrom:
configMapKeyRef:
name: configmap-name
key: key-name
Их можно также подключить в виде файлов внутри pod с помощью томов, доступных только для чтения, как показано в следующем примере:
apiVersion: v1
kind: Pod
metadata:
name: configmap-as-env
namespace: default
spec:
containers:
- name: configmap-env
image: alpine
command: ["sleep", "3600"]
volumeMounts:
- name: volume-name
mountPath: "/path/to/mount"
readOnly: true
volumes:
- name: volume-name
configMap:
name: configmap-name
items:
- key: "key-name"
path: "path/to/mount/the/key"