Существует возможность, что другие члены сообщества указали передать переменную в модуль, но я бы посоветовал вам использовать декларативный подход к созданию объектов в Kubernetes. Зачем мне?
Есть хороший comi c, объясняющий различия между императивным и декларативным подходом.
Ниже приведены примеры:
- Создание базового c NGINX развертывания
- Создание
Configmap
и Secret
в декларативном подходе - Применить выше
Configmap
и Secret
к уже созданному NGINX развертыванию
Создать базовое c NGINX развертывание
Создать YAML
определение NGINX похоже на это:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
Примените его, запустив $ kubectl apply -f FILE_NAME.yaml
Создайте основу c ConfigMap
Создайте YAML определение ConfigMap
похоже на это:
apiVersion: v1
kind: ConfigMap
metadata:
name: config-for-nginx
data:
port: "12345"
Примените его, запустив $ kubectl apply -f FILE_NAME.yaml
Создайте основу c Secret
Создайте определение YAML из Secret
аналогично следующему:
apiVersion: v1
kind: Secret
metadata:
name: password-for-nginx
type: Opaque
data:
password: c3VwZXJoYXJkcGFzc3dvcmQK
Определите c взгляд:
password: c3VwZXJoYXJkcGFzc3dvcmQK
Этот пароль закодирован в base64 .
Чтобы создать этот пароль, вызовите команду из своего терминала: $ echo "YOUR_PASSWORD" | base64
Вставьте вывод в определение YAML
и примените его с помощью: $ kubectl apply -f FILE_NAME
.
Применить выше Configmap
и Secret
для уже созданного NGINX развертывания
Вы можете отредактировать ранее созданное NGINX развертывание и добавить часть, отвечающую за добавление ConfigMap
и Secret
, которая будет доступна как переменные окружения:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
env:
- name: NGINX_PASSWORD
valueFrom:
secretKeyRef:
name: password-for-nginx
key: password
- name: NGINX_PORT
valueFrom:
configMapKeyRef:
name: config-for-nginx
key: port
ports:
- containerPort: 80
Пожалуйста, обратите внимание на приведенную ниже часть c, которая добавит переменные окружения к созданным модулям в виде NGINX_PASSWORD
и NGINX_PORT
:
env:
- name: NGINX_PASSWORD
valueFrom:
secretKeyRef:
name: password-for-nginx
key: password
- name: NGINX_PORT
valueFrom:
configMapKeyRef:
name: config-for-nginx
key: port
secretKeyRef
- ссылка на созданный Secret
, а configMapKeyRef
- ссылка на созданный ConfigMap
.
. Примените его, запустив $ kubectl apply -f FILE_NAME.yaml
еще раз.
Он завершит работу старых модулей и создаст новые с новой конфигурацией.
Чтобы проверить, правильно ли настроены переменные среды, выполните следующие команды:
$ kubectl get pods
$ kubectl exec -it NAME_OF_THE_POD -- /bin/bash
$ echo $NGINX_PORT
$ echo $NGINX_PASSWORD
Вы должны увидеть переменные из ConfigMap
и Secret
соответственно.