Kubernetes 1.5 實踐Tomcat日誌NFS服務持久化
阿新 • • 發佈:2019-01-26
在配置Kubernetes1.5搭建內部測試環境後,日誌一直是一個不好解決的問題,由於許多開發人員和測試人員對ELK不適應,推廣起來也很費力。為此,在建立Tomcat時,也將日誌持久出來,供開發人員和測試人員使用
使用ELK管理日誌,
環境說明
*Kubernet 1.5, Centos 7
NFS伺服器配置
1. 軟體安裝
服務安裝
使用yum安裝
yum -y install nfs-utils rpcbind
2. 軟體配置
修改/etc/exports,加入以下內容
/opt/tomcat7logs *(rw,no_root_squash,no_all_squash,sync)
3. 使配置生效
使用下面命令讓配置生效。
exportfs -rv
4.節點操作
在每一個節點需要nfs-utils
yum install nfs-utils -y
Tomcat配置
修改Tomcat配置
修改logging.properties
通過pod名和pod名稱空間變數,唯一標識輸出檔名。
給所有的log字首加上{my.pod.name}_{my.pod.namespace}
比如:
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
改成
1catalina.org.apache.juli.AsyncFileHandler.prefix = ${my.pod.name}_${my.pod.namespace}_catalina.
修改 server.xml
也是通過pod名和pod名稱空間變數,唯一標識輸出檔名,這裡標識的是localhost-access日誌檔案。
找到
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
這個節點,改成
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="${my.pod.name}_${my.pod.namespace}_localhost-access-log" suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
修改 catalina.sh
通過容器傳入的變數在tomcat中並不能直接使用,需要在tomcat的啟動指令碼中,在java的啟動命令中加上-D選項。找到所有有-Dcatalina.base=”\”$CATALINA_BASE\”” 的上方或下方
-Dmy.pod.name="$MY_POD_NAME"
-Dmy.pod.namespace="$MY_POD_NAMESPACE"
建立Deployment
在yaml檔案中加入變數和nfs掛載
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: tomcat-dm
spec:
replicas: 3
selector:
matchLabels:
name: tomcat-dm
template:
metadata:
labels:
name: tomcat-dm
spec:
containers:
- name: tomcat
image: 192.168.7.248:5002/tomcat:1.1
imagePullPolicy: Always
volumeMounts:
- name: logstomcat7
mountPath: /opt/tomcat7/logs
readOnly: false
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
ports:
- containerPort: 8080
volumes:
- name: logstomcat7
nfs:
server: 192.168.7.206
path: /opt/tomcat7logs
測試完成
有什麼問題可以直接評論.