我正在努力让我们的部署过程变得更简单。目前,我们为Spring Boot应用程序构建一个jar文件,然后使用以下DockerFile构建一个镜像。
FROM [DTRServer]/java/javaimage_mmddyyyy:8
EXPOSE 8080
COPY /conf/myapp-conf.yaml /etc/k8t/myapp-conf.yaml
ADD target/myapp_mmddyyyy.jar myapp.jar
ENTRYPOINT ["java", "-jar", "myapp.jar", "--spring.config.location=/etc/k8t/myapp-conf.yaml"]在我们的k8t中,我们创建了一个配置映射(app-config)。所以我们的deployment.yaml是这样的
containers:
- image: [DTRServer]/projectname/myappimage:0.2.4-43
imagePullPolicy: Always
name: myapp
ports:
- containerPort: 8080
volumeMounts:
- name: myapp-conf
mountPath: /etc/k8t/
volumes:
- name: myapp-conf
configMap:
name: myapp-conf为什么构建时需要在Dockerfile中指定spring.config.location?我们将使用Configmap。所以我删除了Dockerfile和deployment.yaml中的配置文件信息。
FROM [DTRServer]/java/javaimage_mmddyyyy:8
EXPOSE 8080
ADD target/myapp_mmddyyyy.jar myapp.jar
ENTRYPOINT ["java", "-jar", "myapp.jar"] containers:
- image: [DTRServer]/projectname/myappimage:0.2.4-43
imagePullPolicy: Always
name: myapp
ports:
- containerPort: 8080
volumes:
- name: myapp-conf
configMap:
name: myapp-conf然后,pod不喜欢它。它会抱怨找不到配置值。如何在没有配置信息的情况下构建镜像,并使用Configmap启动pod?
发布于 2021-01-15 06:37:58
Spring Boot2.4 configuration tree support可以与Kubernetes ConfigMaps一起使用。如果您希望从挂载的目录加载多个文件,使文件名成为关键字,内容成为值,则需要使用configtree:前缀。volumeMounts部分仍然需要存在于deployment.yml中,以指定应将ConfigMap数据挂载到何处。deployment.yml应该看起来像这样:
containers:
- image: [DTRServer]/projectname/myappimage:0.2.4-43
imagePullPolicy: Always
name: myapp
ports:
- containerPort: 8080
volumeMounts:
- name: myapp-conf
mountPath: /etc/k8t/
env:
- name: SPRING_CONFIG_IMPORT
value: configtree:/etc/k8t/
volumes:
- name: myapp-conf
configMap:
name: myapp-confhttps://stackoverflow.com/questions/65724528
复制相似问题