#spring-boot #kubernetes #environment-variables #minikube
#весенняя загрузка #kubernetes #среда-переменные #мини-куб
Вопрос:
Я развертываю приложение Spring Boot в minikube, которое подключается к базе данных, запущенной на хосте. Следуя рекомендациям 12 factor app, я использую переменные среды для необходимой конфигурации:
SPRING_DATASOURCE_DRIVER_CLASS_NAME=org.postgresql.Driver
SPRING_DATASOURCE_PASSWORD=...
SPRING_DATASOURCE_URL=jdbc:postgresql://<HOST_IP_FROM_K8S>:5432/myservice
SPRING_DATASOURCE_USERNAME=...
Документы kubernetes показывают только, как устанавливать переменные среды в службе и развертывании .файлы yaml, которые я не хочу делать. Есть ли способ передать переменные среды в командной строке для minikube или kubectl при создании развертывания? (В Docker я делаю это с помощью -e .)
Обратите внимание, что переменные среды должны быть установлены перед запуском приложения, иначе оно выйдет из строя.
Комментарии:
1. Для ввода переменных в модуль лучше использовать ConfigMaps. Мы можем передавать переменные env с помощью kubectl , но могу ли я узнать, как вы пытаетесь запустить приложение? это как модуль или вы ожидаете комбинацию Yaml и ваших переменных env?
2. Я начинаю с
kubectl create -f deployment.yaml
. Я ожидал бы установить переменные env в этой командной строке, потому что они должны быть доступны приложению при его запуске.
Ответ №1:
Следуя комментарию Ansil выше, я использовал configmap
и secret
для передачи конфигурации следующим образом:
kubectl create secret generic springdatasourcepassword --from-literal=SPRING_DATASOURCE_PASSWORD=postgres
kubectl create secret generic springdatasourceusername --from-literal=SPRING_DATASOURCE_USERNAME=postgres
kubectl create configmap springdatasourcedriverclassname --from-literal=SPRING_DATASOURCE_DRIVER_CLASS_NAME=org.postgresql.Driver
kubectl create configmap springdatasourceurl --from-literal=SPRING_DATASOURCE_URL=jdbc:postgresql://172.18.0.1:5432/bookservice
Ссылки на них содержатся в развертывании.файл yaml, подобный этому:
env:
- name: GET_HOSTS_FROM
value: dns
- name: SPRING_DATASOURCE_DRIVER_CLASS_NAME
valueFrom:
configMapKeyRef:
name: springdatasourcedriverclassname
key: SPRING_DATASOURCE_DRIVER_CLASS_NAME
- name: SPRING_DATASOURCE_URL
valueFrom:
configMapKeyRef:
name: springdatasourceurl
key: SPRING_DATASOURCE_URL
- name: SPRING_DATASOURCE_PASSWORD
valueFrom:
secretKeyRef:
name: springdatasourcepassword
key: SPRING_DATASOURCE_PASSWORD
- name: SPRING_DATASOURCE_USERNAME
valueFrom:
secretKeyRef:
name: springdatasourceusername
key: SPRING_DATASOURCE_USERNAME
Полное объяснение можно найти здесь .
Комментарии:
1. если я запускаю приложение spring boot в локальной среде, возможно ли использовать все секреты kubectl? поскольку да, где следует ссылаться на файл secret.yml и deployment.yml? переменные среды, созданные для этих 2 файлов, в моем случае не видны
Ответ №2:
У нас нет прямой опции с create
подкомандой kubectl
для передачи переменных среды.
Вы можете использовать Helm для настройки развертывания.
(Пример: https://docs.bitnami.com/kubernetes/how-to/deploy-java-application-kubernetes-helm /)
Комментарии:
1. Это передает учетные данные в . файл yaml, который вы не должны делать.