溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Kubernetes日志有關知識點有哪些

發布時間:2021-12-24 13:40:51 來源:億速云 閱讀:164 作者:小新 欄目:云計算

小編給大家分享一下Kubernetes日志有關知識點有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

關于日志

#1 多種多樣的日志

應用程序具有日志,用于排查問題。集群具有日志,用于排查問題。容器環境具有日志機制,容器化應用應將日志寫入標準輸出與標準錯誤。

#2 但這些日志機制存在問題

但是由容器引擎提供的日志功能遠遠不夠:容器崩潰,驅逐POD實例,節點崩潰,在這些情況下我們依舊希望訪問日志。因此日志需要獨立存儲,并且生命周期與節點、容器等等無關。

該概念被稱為“集群日志”。

#3 集群日志

“集群日志”需要單獨存儲,但是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)

使用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日志有關知識點有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女