Карты конфигурации в Kubernetes
На этой странице
- Предварительные условия
- Что будем делать?
- Создайте карту конфигурации и получите доступ к ее данным.
- Заключение
ConfigMap используется для хранения неконфиденциальных данных. Данные находятся в парах ключ-значение. Поды могут использовать ConfigMaps в качестве аргументов командной строки, переменных среды или файлов конфигурации в томе.
Используя ConfigMap, мы можем отделить конфигурацию среды от образов контейнеров. Это может помочь нам в создании наших переносных приложений. ConfigMap не обеспечивает шифрование, поэтому всегда рекомендуется не хранить конфиденциальную информацию в Configmap. Вместо использования config можно использовать секреты для хранения конфиденциальной информации, ключей безопасности или паролей.
Существуют следующие способы использования данных ConfigMap внутри модуля:
- Аргументы командной строки для контейнера
- Переменные среды для контейнера
- Добавить файл в том, доступный только для чтения.
- Напишите код для запуска внутри модуля, который использует Kubernetes API для чтения ConfigMap.
Чтобы узнать больше о Configmap, посетите официальную страницу Kubernetes здесь.
В этой статье мы увидим два примера доступа к данным из configmaps. В одном примере мы будем использовать карты конфигурации в качестве переменных среды в команде pod, а в другом мы заполним том данными, хранящимися в ConfigMap.
Предпосылки
- Кластер Kubernetes по крайней мере с 1 рабочим узлом.
Если вы хотите научиться создавать кластер Kubernetes, нажмите здесь. Это руководство поможет вам создать кластер Kubernetes с 1 мастером и 2 узлами на экземплярах AWS Ubuntu 18.04 EC2.
Что мы будем делать?
- Создайте карту конфигурации и получите доступ к ее данным.
Создайте 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 в качестве переменных среды для команды модуля и файлов в томе в модуле.