K8S上的ELK和應用日誌上報實戰
來源:DevOps
ID:Idevops168
本次實戰的基礎結構如下圖所示:
一共有兩個Pod:ELK和web應用;
ELK的Pod會暴露兩個服務,一個暴露logstash的5044端口,給filebeat用,另一個暴露kibana的5601端口,給搜索日誌的用戶訪問的時候用;
web應用暴露一個服務,給用戶通過瀏覽器訪問;
實戰步驟簡介
部署ELK的pod和服務;
部署web應用的pod和服務;
web應用的pod從一個擴展為三個;
體驗ELK;
部署ELK
我們從ELK Sever開始部署吧:
1. ssh登錄到可以執行kubectl命令的機器上去;
2. 創建elk的部署腳本elkhost.yaml,內容如下:
如上所示,暴露了兩個端口:kibana的5601和logstash的5044;
3. 在elkhost.yaml所在目錄執行命令kubectl create -f elkhost.yaml,即可創建elk對應的pod,如下:
4. 將kibana的5601端口以NodePort的方式對外暴露,這樣外部就可以通過節點IP地址來訪問kibana服務了,創建部署腳本elkkibana-svc.yaml,kibana的服務通過node節點的30001端口對外暴露,內容如下:
5. 將logstash的5044端口以ClusterIP的方式對外暴露,這樣其他pod的filebeat就可以通過服務名加5044端口來訪問logstash服務了,創建部署腳本elkhost-svc.yaml,logstash的服務通過5044端口對K8S內部的pod暴露,內容如下:
6. 在elkhost-svc.yaml所在目錄執行命令kubectl create -f elkhost-svc.yaml && kubectl create -f elkkibana-svc.yaml,即可創建elkhost和elkkibana這兩個服務,如下:
7. 執行命令查看elkhost的pod部署在K8S的哪個node節點上:
如上所示,Node: willzhao-vostro-3267/192.168.31.89顯示了這個pod部署的節點IP是192.168.31.89;
8. 打開瀏覽器,輸入192.168.31.89:30001,即可訪問到Kibana服務,如下圖:
部署應用
ELK Sever已經OK,接下來部署web應用:
1. 創建elkwebdemo的部署腳本elkwebdemo.yaml,內容如下:
2. 在elkwebdemo.yaml所在目錄執行命令kubectl create -f elkwebdemo.yaml,即可創建elk對應的pod,如下:
3. 創建elk對外服務的部署腳本elkwebdemo-svc.yaml,web的服務通過node節點的30002端口對外暴露,內容如下:
5. 在elkwebdemo-svc.yaml所在目錄執行命令kubectl create -f elkwebdemo-svc.yaml,即可創建elkwebdemo對應的pod,如下:
6. 執行命令查看elkwebdemo的pod部署在K8S的哪個node節點上:
如上所示,Node: willzhao-vostro-3267/192.168.31.89顯示了這個pod部署的節點IP是192.168.31.89;
7. 打開瀏覽器,輸入http://192.168.31.89:30002/hello/tom,即可訪問到web服務,如下圖:
設置kibana
再次打開kibana頁面,如下圖所示,點擊紅框中的“Discover”,發現已經搜集到了上報的日誌,如綠框所示:
如下圖設置:
繼續設置,如下圖:
再此點擊左上角的”Discover”,既可開始搜索web應用日誌,如下圖:
web應用擴容
現在我們模擬生產環境的在線擴容:
1. 將web應用從一個擴展到三個,執行以下命令:
2. 可以看到web應用對應的pod已經擴展了,如下所示:
3. 為了能多上報一些日誌,在瀏覽器上多刷新幾次這個地址:http://192.168.31.89:30002/hello/tom
4. 回到kibana頁面,如下圖,點擊紅框中的“host”,展開的信息顯示,這些日誌來自三個host:
5. 打開K8S的dashboard頁面看一下容器信息,如下圖,可以見到三個web容器的hostname和kibana中的host是一樣的:
K8S上的ELK和應用日誌上報實戰