Spring boot Kubernetes部署-外部化日志文件
我有一个SpringBoot应用程序,其中包含以下docker文件Spring boot Kubernetes部署-外部化日志文件,spring-boot,kubernetes,logback,Spring Boot,Kubernetes,Logback,我有一个SpringBoot应用程序,其中包含以下docker文件 FROM docker.com/base/jdk1.8:latest MAINTAINER Application Engineering [ https://docker.com/ ] RUN mkdir -p /opt/docker/svc COPY application/weather-service.war /opt/docker/svc/ CMD java -jar /opt/docker/svc/weath
FROM docker.com/base/jdk1.8:latest
MAINTAINER Application Engineering [ https://docker.com/ ]
RUN mkdir -p /opt/docker/svc
COPY application/weather-service.war /opt/docker/svc/
CMD java -jar /opt/docker/svc/weather-service.war --spring.config.location=file:/conf/application.properties -Dlogging.config=/conf/logback.xml
我可以使用kubernetes configMap或secrets for application.properties,并使用卷装载选项,如下所示
"spec": {
"volumes": [
{
"name": "svc-prop",
"configMap": {
"name": "svc-app-config",
"items": [
{
"key": "application.properties",
"path": "application.properties"
}
]
}
}
],
"containers": [
"volumeMounts": [
{
"name": "svc-prop",
"mountPath": "/conf"
}
]
如何实现logback.xml的相同功能。在这种情况下,我需要使用机密作为文件吗
我不想将logback.xml文件与图像捆绑在一起,因为我们可能会在运行时更改日志级别
在Kubernetes中,还有其他更好的方法来保存spring boot应用程序的logback.xml吗?您已经完成了。。。当需要更新logback.xml时,使用ConfigMap并使用“kubectl edit”更新ConfigMap 当一个ConfigMap或一个Secret被更新时,它最终会反映在容器中,如果像via这样进行了配置,那么应用程序最终会接受更改。如果没有,则需要重新启动pod以获取更新的logback.xml 为logback创建configmap
apiVersion: v1
kind: ConfigMap
metadata:
name: logback-configmap
data:
logback.xml: |+
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<logger name="org.springframework.web" level="DEBUG"/>
</configuration>
在容器中装载configmap卷
volumeMounts:
- mountPath: /path/to/logback.xml
name: logback
通常,您不希望提供整个
logback.xml
文件,而是需要在运行时最频繁更新的logger
列表。
为了实现这一点,您可以使用以下功能:
logback.xml
文件,但logger
列表除外。改用包含元素:
和。要检查记录器文件是否正确装入,请执行以下命令:
$ kubectl exec restorun-7d757b7c6-wcslx -- ls -l /microservice/config/mount
total 0
lrwxrwxrwx 1 root root 26 Aug 14 05:52 loggers-include.xml -> ..data/loggers-include.xml
此外,如果您已在Logback的配置
元素中设置了debug=true
属性(请参见步骤1),则在应用程序启动期间,您应该在STDOUT中看到以下记录:
05:52:17,031 |-INFO in ch.qos.logback.core.joran.util.ConfigurationWatchListUtil@6e06451e - Adding [file:/microservice/config/mount/loggers-include.xml] to configuration watch list.
现在,您可以编辑您的ConfigMap(例如,将com.netflix.hystrix
设置为级别WARN
),保存其文件并告诉Kubernetes将更改应用于应用程序:
$ kubectl apply -f microservice-log-configmap.yaml
configmap "microservice-loggers" configured
同样,Logback应该通过在标准输出中记录以下消息来反映更改:
05:59:16,974 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.netflix.hystrix] to WARN
您还可以通过从Spring Boot Actuator直接询问来检查有效日志记录级别(如果您有权访问此端点):
$curlhttp:///actuator/loggers/com.netflix.hystrix
{
“configuredLevel”:“警告”,
“有效级别”:“警告”
}
如果级别保持不变,请等待一分钟,然后再次检查:通过Kubernetes和Logback传播更改需要一些时间。有关此主题的更多信息:
(请参阅安装的配置映射自动更新部分)
05:52:17,031 |-INFO in ch.qos.logback.core.joran.util.ConfigurationWatchListUtil@6e06451e - Adding [file:/microservice/config/mount/loggers-include.xml] to configuration watch list.
$ kubectl apply -f microservice-log-configmap.yaml
configmap "microservice-loggers" configured
05:59:16,974 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.netflix.hystrix] to WARN
$ curl http://<k8s-external-ip>/actuator/loggers/com.netflix.hystrix
{
"configuredLevel" : "WARN",
"effectiveLevel" : "WARN"
}