Поиск по сайту:

Карты конфигурации в Kubernetes


На этой странице

  1. Предварительные условия
  2. Что будем делать?
  3. Создайте карту конфигурации и получите доступ к ее данным.
  4. Заключение

ConfigMap используется для хранения неконфиденциальных данных. Данные находятся в парах ключ-значение. Поды могут использовать ConfigMaps в качестве аргументов командной строки, переменных среды или файлов конфигурации в томе.

Используя ConfigMap, мы можем отделить конфигурацию среды от образов контейнеров. Это может помочь нам в создании наших переносных приложений. ConfigMap не обеспечивает шифрование, поэтому всегда рекомендуется не хранить конфиденциальную информацию в Configmap. Вместо использования config можно использовать секреты для хранения конфиденциальной информации, ключей безопасности или паролей.

Существуют следующие способы использования данных ConfigMap внутри модуля:

  1. Аргументы командной строки для контейнера
  2. Переменные среды для контейнера
  3. Добавить файл в том, доступный только для чтения.
  4. Напишите код для запуска внутри модуля, который использует Kubernetes API для чтения ConfigMap.

Чтобы узнать больше о Configmap, посетите официальную страницу Kubernetes здесь.

В этой статье мы увидим два примера доступа к данным из configmaps. В одном примере мы будем использовать карты конфигурации в качестве переменных среды в команде pod, а в другом мы заполним том данными, хранящимися в ConfigMap.

Предпосылки

  1. Кластер Kubernetes по крайней мере с 1 рабочим узлом.
    Если вы хотите научиться создавать кластер Kubernetes, нажмите здесь. Это руководство поможет вам создать кластер Kubernetes с 1 мастером и 2 узлами на экземплярах AWS Ubuntu 18.04 EC2.

Что мы будем делать?

  1. Создайте карту конфигурации и получите доступ к ее данным.

Создайте Configmap и получите доступ к его данным.

Создайте файл со следующим определением config-map.

vim my-configmap-demo1.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-configmap-demo1
data:
  variable_one: one
  variable_two: two

Configmap можно создать с помощью следующей команды.

kubectl create -f my-configmap-demo1.yaml

Получите подробную информацию о карте конфигурации, которую мы создали.

kubectl get configmaps
kubectl describe configmaps my-configmap-demo1

На приведенном выше снимке экрана видно, что наши данные \variable_one\ и \variable_two\ доступны на созданной нами карте конфигурации.

Теперь эта карта конфигурации доступна в модуле.

Чтобы получить доступ к данным configmap как к переменным среды в командах модуля, давайте создадим файл определения модуля со следующим содержимым.

vim my-pod-with-configmaps-as-environment-variables.yml
apiVersion: v1
kind: Pod
metadata:
  name: my-pod-configmap-demo
spec:
  containers:
    - name: my-container-configmap-demo
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "echo $(variable_one_env) $(variable_two_env)" ]
      env:
        - name: variable_one_env
          valueFrom:
            configMapKeyRef:
              name: my-configmap-demo1
              key: variable_one
        - name: variable_two_env
          valueFrom:
            configMapKeyRef:
              name: my-configmap-demo1
              key: variable_two
  restartPolicy: Never

Теперь мы готовы создать модуль, который может получать доступ к данным из configmap в качестве переменных среды.

kubectl get podss
kubectl create -f my-pod-with-configmaps-as-environment-variables.yml
kubectl get pod

Поскольку модуль успешно завершил свое выполнение и существует, поскольку нет процесса, который мог бы поддерживать работу модулей, мы можем проверить его журналы, чтобы узнать, была ли доступна карта конфигурации в модуле или нет. Чтобы убедиться в этом, мы использовали команду echo в модуле, которая будет печатать значения переменных.

kubectl get pods
kubectl logs my-pod-configmap-demo

На приведенном выше снимке экрана видно, что данные configmap были доступны в модуле, и он распечатал значения с помощью команды echo как \один\ и \два\.

Данные Configmap также доступны в виде файлов в томах.

Чтобы получить доступ к данным configmap через том, создайте определение модуля, используя следующий контент.

vim my-pod-with-configmaps-added-to-volume.yml
apiVersion: v1
kind: Pod
metadata:
  name: my-pod-configmap-demo2
spec:
  containers:
    - name: my-container-configmap-demo2
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "ls /etc/myconfig/" ]
      volumeMounts:
      - name: my-config-volume
        mountPath: /etc/myconfig
  volumes:
    - name: my-config-volume
      configMap:
        name: my-configmap-demo1
  restartPolicy: Never

Теперь давайте создадим модуль, который может иметь данные configmap, доступные в виде файлов из тома \my-config-volume\. Эти данные configmap будут доступны в каталоге \/etc/myconfig\ модуля.

kubectl get pods
kubectl create -f my-pod-with-configmaps-added-to-volume.yml
kubectl get pods

На этот раз модуль завершился успешно, так как нет процесса, поддерживающего работу модуля.

Но мы использовали команду \ls /etc/myconfig\, которая будет отображать содержимое каталога \/etc/myconfig\.

kubectl get pods

В журналах мы видим, что данные configmap были доступны в виде файлов в папке \/etc/myconfig\

kubectl logs my-pod-configmap-demo2

На приведенном выше снимке экрана видно, что данные configmap были доступны в модуле в виде файлов \variable_one\ и \variable_two\.

Заключение

В этой статье мы научились создавать карту конфигурации и получать к ней доступ двумя способами. Мы видели шаги для доступа к данным configmap в качестве переменных среды для команды модуля и файлов в томе в модуле.