Общие сведения о конфигурации 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"

Проверка знаний

1.

Почему следует использовать ConfigMaps?

2.

Как использовать ConfigMaps в приложении?

3.

Является ли пространство имен ограничением для ConfigMaps?