Mss*_*ssm 2 environment-variables contextpath spring-boot kubernetes minikube
我有一个 springboot 应用程序,我想将其部署在 Kubernetes 上(我使用的是 minikube),并使用从环境变量中获取的自定义上下文路径。
我编译了一个 app.war 文件。在Linux中导出环境变量如下:
export SERVER_SERVLET_CONTEXT_PATH=/app
然后在我的机器上启动我的应用程序,如下所示:
java -jar app.war --server.servlet.context-path=$(printenv CONTEXT_PATH)
它按预期工作,我可以使用 url localhost:8080/app/访问我的应用程序抛出浏览器
我想在 minikube 上实现同样的目标,所以我准备了这些配置文件:
Dockerfile:
FROM openjdk:8
ADD app.war app.war
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.war", "--server.servlet.context-path=$(printenv CONTEXT_PATH)"]
Run Code Online (Sandbox Code Playgroud)部署配置文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: esse-deployment-1
labels:
app: esse-1
spec:
replicas: 1
selector:
matchLabels:
app: esse-1
template:
metadata:
labels:
app: esse-1
spec:
containers:
- image: mysql:5.7
name: esse-datasource
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: root
- image: esse-application
name: esse-app
imagePullPolicy: Never
ports:
- containerPort: 8080
env:
- name: server.servlet.context-path
value: /esse-1
volumes:
- name: esse-1-mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-persistent-storage-claim
---
apiVersion: v1
kind: Service
metadata:
name: esse-service-1
labels:
app: esse-1
spec:
selector:
app: esse-1
ports:
- protocol: TCP
port: 8080
targetPort: 8080
type: NodePort
Run Code Online (Sandbox Code Playgroud)但是,pod 内的 java 容器无法启动,这是 spring 抛出的异常:
bean 初始化失败;嵌套异常是 java.lang.IllegalArgumentException: ContextPath 必须以 '/' 开头且不以 '/' 结尾
利用configmaps。
configmap 将保存 springboot 应用程序的 application.properties。
---
apiVersion: v1
kind: ConfigMap
metadata:
name: esse-config
data:
application-dev.properties: |
spring.application.name=my-esse-service
server.port=8080
server.servlet.context-path=/esse-1
Run Code Online (Sandbox Code Playgroud)
注意:将覆盖 springboot 应用程序的上下文路径。 server.servlet.context-path=/esse-1
现在在您的部署 yaml 中引用此配置映射。
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: esse-deployment-1
labels:
app: esse-1
spec:
replicas: 1
selector:
matchLabels:
app: esse-1
template:
metadata:
labels:
app: esse-1
spec:
containers:
- image: mysql:5.7
name: esse-datasource
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: root
- image: esse-application
name: esse-app
imagePullPolicy: Never
command: [ "java", "-jar", "app.war", "--spring.config.additional-location=/config/application-dev.properties" ]
ports:
- containerPort: 8080
volumeMounts:
- name: esse-application-config
mountPath: "/config"
readOnly: true
volumes:
- name: esse-application-config
configMap:
name: esse-config
items:
- key: application-dev.properties
path: application-dev.properties
- name: esse-1-mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-persistent-storage-claim
Run Code Online (Sandbox Code Playgroud)
注意:这里我们将 configmap 安装在 springboot 应用程序容器的/config文件夹中。也--spring.config.additional-location=/config/application-dev.properties指向 application.properties 配置文件。
将来,如果您想添加任何新配置或更新现有配置的值,只需在 configmap 及其中进行更改即可kubectl apply。然后,为了反映这些新的配置更改,只需缩小和扩大部署即可。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
1526 次 |
| 最近记录: |