从Kubernetes中部署的应用程序连接到外部数据库

问题描述 投票:1回答:2

我正在minikube中部署Spring Boot应用程序,该应用程序连接到主机上运行的数据库。根据12因素应用程序建议,我使用环境变量进行必要的配置:

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做这个。)

请注意,必须在启动应用程序之前设置环境变量,否则它会崩溃。

spring-boot kubernetes environment-variables minikube
2个回答
1
投票

按照上面的Ansil的评论,我使用configmapsecret来传递这样的配置:

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

这些在deployment.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

完整的解释可以找到here


0
投票

我们没有直接选择create中的kubectl子命令来传递环境变量。

您可以使用Helm自定义部署。

(例如:https://docs.bitnami.com/kubernetes/how-to/deploy-java-application-kubernetes-helm/

© www.soinside.com 2019 - 2024. All rights reserved.