1. 程式人生 > >Kubernetes 1.5 實踐Tomcat日誌NFS服務持久化

Kubernetes 1.5 實踐Tomcat日誌NFS服務持久化

在配置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 &quot;%r&quot; %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

測試完成

有什麼問題可以直接評論.