use*_*872 5 logback spring-boot kubernetes
我有一个带有以下 docker 文件的 Spring Boot 应用程序。
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
Run Code Online (Sandbox Code Playgroud)
我可以将 kubernetes configMap 或 secrets 用于 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"
}
]
Run Code Online (Sandbox Code Playgroud)
我如何才能为 logback.xml 实现相同的目标。在这种情况下,我是否需要将机密用作文件?
我不想将 logback.xml 文件与图像捆绑在一起,因为我们可能会在运行时更改日志级别。
还有其他更好的方法可以在 Kubernetes 中为 Spring Boot 应用程序保留 logback.xml 吗?
通常您不想提供整个logback.xml文件,而是logger需要在运行时最频繁更新的列表。为了实现这一点,您可以使用Logback 的文件包含功能:
logback.xml像往常一样写你的文件,除了logger列表。改用include元素: <configuration scan="true" scanPeriod="10 seconds" debug="true">
<appender ...></appender>
<root level="INFO">...</root>
<!-- Import loggers configuration from external file -->
<include file="config/mount/loggers-include.xml"/>
</configuration>
Run Code Online (Sandbox Code Playgroud)
注意这些scan*属性。它们对于在运行时重新加载日志配置至关重要。
使用loggers-include.xmldata 部分定义 Kubernetes ConfigMap 中的所有记录器:
apiVersion: v1
kind: ConfigMap
metadata:
name: microservice-loggers # the name to refer to from deployment (see below)
namespace: upc
data:
loggers-include.xml: |+
<included>
<logger name="org.springframework.cloud.netflix.zuul" level="INFO"/>
<logger name="com.netflix.zuul" level="INFO"/>
<logger name="com.netflix.hystrix" level="INFO"/>
<logger name="com.netflix.ribbon" level="DEBUG"/>
<logger name="com.netflix.loadbalancer" level="INFO"/>
</included>
Run Code Online (Sandbox Code Playgroud)
请注意,所有包含的内容都必须包含在included标签中才能被 Logback 正确解析。
将 ConfigMap 的数据作为config/mount/loggers-include.xml文件挂载到容器中:
apiVersion: apps/v1
kind: Deployment
...
spec:
...
template:
...
spec:
# declare the volume created from ConfigMap
volumes:
- name: config-volume # used with this name below
configMap:
name: microservice-loggers # declared in previous step
containers:
- name: microservice
...
ports:
...
# mount the volume declared above to container's file system
volumeMounts:
- mountPath: /microservice/config/mount
name: config-volume # declared above
Run Code Online (Sandbox Code Playgroud)
请注意,mount目录不得由容器本身或其映像创建。此外,如果存在这样的目录,则在挂载过程中将删除其所有内容。
应用 ConfigMap并运行声明的部署。要检查 loggers 文件是否正确挂载,请执行以下命令:
$ 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
Run Code Online (Sandbox Code Playgroud)
此外,如果您debug=true在 Logback 的configuration元素中设置了 属性(请参阅步骤 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.
Run Code Online (Sandbox Code Playgroud)现在您可以编辑您的 ConfigMap(例如设置com.netflix.hystrix为 level WARN),保存其文件并告诉 Kubernetes 将更改应用于应用程序:
$ kubectl apply -f microservice-log-configmap.yaml
configmap "microservice-loggers" configured
Run Code Online (Sandbox Code Playgroud)
同样,Logback 应该通过将以下消息记录到标准输出来反映更改:
05:59:16,974 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.netflix.hystrix] to WARN
Run Code Online (Sandbox Code Playgroud)
您还可以通过直接从 Spring Boot Actuator 询问来检查有效的日志级别(如果您有权访问此端点):
$ curl http://<k8s-external-ip>/actuator/loggers/com.netflix.hystrix
{
"configuredLevel" : "WARN",
"effectiveLevel" : "WARN"
}
Run Code Online (Sandbox Code Playgroud)如果级别保持不变,请等待一分钟并再次检查:更改通过 Kubernetes 和 Logback 传播需要一些时间。有关此主题的更多信息:
您已经完成了...使用 ConfigMap 并在需要更新 logback.xml 时使用“kubectl edit”来更新 ConfigMap。
当 ConfigMap 或 Secret 被更新时,它最终会反映在容器内,如果这样配置,例如通过scan,那么应用程序最终将获取更改。如果没有,则需要重新启动 pod 以获取更新的 logback.xml。
为 logback 创建一个配置映射。
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>
Run Code Online (Sandbox Code Playgroud)
将 configmap 指定为部署中的卷。
volumes:
- configMap:
name: logback-configmap
name: logback
Run Code Online (Sandbox Code Playgroud)
在您的容器中安装 configmap 卷。
volumeMounts:
- mountPath: /path/to/logback.xml
name: logback
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6898 次 |
| 最近记录: |