小編給大家分享一下Kubernetes日志有關知識點有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
應用程序具有日志,用于排查問題。集群具有日志,用于排查問題。容器環境具有日志機制,容器化應用應將日志寫入標準輸出與標準錯誤。
但是由容器引擎提供的日志功能遠遠不夠:容器崩潰,驅逐POD實例,節點崩潰,在這些情況下我們依舊希望訪問日志。因此日志需要獨立存儲,并且生命周期與節點、容器等等無關。
該概念被稱為“集群日志”。
“集群日志”需要單獨存儲,但是Kubernetes并沒有提供日志后端存儲,需要我們自己集成。本文結合官方「Logging Architecture」文檔,整理與日志有關內容。
使用kubectl logs查看日志,添加--previous選項查看已崩潰容器的日志。
如果在POD實例中具有容器,可以指定容器名查看特定容器日志。
由容器應用寫入標準輸出與標準錯誤的日志,會被容器引擎重定向。例如在Docker中,由日志驅動處理(在Kubernetes中,被配置寫入JSON格式的文件中)。
注意,使用Docker日志驅動無法處理多行日志,需要在日志收集工具中進行處理。
如果容器重啟,則kubelet會保存單個容器及它的日志。若驅逐POD實例,所有對應的容器將被驅逐,包括日志。
另外節點日志還要考慮輪轉問題,防止日志消耗過多磁盤。但是Kubernetes當前不負責日志輪轉,這個問題應該由容器應用處理。另外可以可以配置容器環境處理日志輪轉,例如使用Docker的--log-opt選項。
當執行kubectl logs時,由對應節點的kubelet響應,直接讀取日志文件。注意,如果外部系統執行輪轉,日志截斷為多個文件時,則kubectl logs只能讀取組后一個文件。
系統組件也有日志,但是分為兩類:(1)運行在容器內的組件;(2)運行在容器外的組件;
運行在容器外的組件,例如kubelet及Docker等等:如果使用systemd管理,則日志寫入journald中;如果未使用systemd管理,則日志寫入/var/log中;
運行在容器內的組件,例如kube-proxy或scheduler等等:使用默認日志機制,將日志寫入/var/log中;
同樣,寫入/var/log中的日志也需要輪轉。
由于Kubernetes沒有提供集群日志解決方案,有以下集中途徑解決:
使用節點級日志代理,運行在每個節點中 使用專用容器(Sidecar),收集應用程序日志 從應用程序中直接將日志寫入后端日志存儲
下面我們將簡述各種解決方法
以DeamonSet在每個節點運行POD實例,用于直接讀取日志文件。但是這只適用于將日志寫入標準錯誤與標準輸出的容器。
常用解決方案有Elasticsaerch+Fluentd服務。
使用Sidecar容器(與應用容器處于相同POD實例的容器),有兩種方式:(1)Sidecar容器將應用日志“流入”自己的標準輸出;(2)Sidecar容器運行日志代理,收集應用程序日志;
# 流式Sidecar容器:
當Sidecar容器使用自身的標準錯誤與標準輸出時,可以利用kubelet與每個節點的日志代理。Sidecar容器可以讀取文件、套接字、journald,然后將日志寫入自己的標準錯誤、標準輸出中。
這種方法可以從應用程序不同部分中分離出不同的日志流,即使有些應用程序可能不支持寫入標準輸入、與標準輸出。日志重定向每次只需要處理很小日志,因此不會出現過渡的開銷。另外由于Sidecar的標準輸出與標準錯誤與kubelet處理,因此可以通過kubectl logs查看日志。
雖然Sidecar是額外的容器,但是它可以簡單到只運行tail命令。Sidecar是一種涉及模式。
另外節點級日志代理會自動處理日志,無需進一步配置。還可以配置收集代理來根據“源容器”日志類型進行解析。
盡管CPU使用降低,但是會增加磁盤使用量。如果你的應用程序需要將日志寫入文件,那盡量寫入到標準輸出中,而不是使用Sidecar容器處理。
# 帶有日志代理的Sidecar容器:
如果節點級日志代理無法滿足需求,可以運行在Sidecar容器中運行日志收集代理。該代理可以經過配置,適用于特定應用程序。但是該類型的Sidecar會消耗更多資源,并且不能使用kubectl logs查看日志。
最后一種方法是將日志直接寫入后端存儲,這是一種日志存儲方案,但是與Kubernetes集群的關系并不大,這里不再討論。
在 Kubernetes Cluster 中,需要處理的日志分為以下幾種:
容器外日志:kubelet、Docker 容器內日志:(已寫標準輸入、標準錯誤)容器應用程序,包括集群組件(比如kube-porxy,etcd等等) 容器內日志:(未寫標準輸入、標準錯誤)容器應用應用,寫入容器本地
使用 DaemonSet 運行 POD 實例,在節點中收集日志。
以上是“Kubernetes日志有關知識點有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。