Logging
kubernetes 儲存 pod stdout 日誌多長時間?
我在 kubernetes (1.17.0) 中執行將日誌寫入標準輸出的 pod。這個豆莢會持續很長時間。我使用 promtail 收集日誌並發送到 loki 儲存。所以我可以配置儲存日誌,例如過去 7 天。
但是,我不是很清楚 kubernetes 是如何跟踪這些日誌的嗎?我知道當 pod 被驅逐時 kubernetes 會刪除日誌,但我的 pod 不會被驅逐。這意味著 kubernetes 將儲存所有日誌,最終節點的 SSD 將滿?如何配置 Kubernetes 以刪除舊日誌?
查看官方 k8s 文件中的Logging 架構,有一些選項:
第一個是在節點級別記錄:
Kubernetes 目前不負責輪換日誌,但部署工具應該建立一個解決方案來解決這個問題。例如,在由
kube-up.sh
腳本部署的 Kubernetes 集群中,有一個logrotate
工具配置為每小時執行一次。您還可以設置容器執行時自動輪換應用程序的日誌,例如使用 Docker 的log-opt
. 在kube-up.sh
腳本中,後一種方式用於 GCP 上的 COS 鏡像,前一種方式用於任何其他環境。在這兩種情況下,預設情況下輪換配置為在日誌文件超過 10MB 時進行。第二個是帶有日誌代理的邊車容器:
Sidecar 容器還可用於輪換應用程序本身無法輪換的日誌文件。這種方法的一個例子是定期執行 logrotate 的小容器。但是,建議直接使用 stdout 和 stderr 並將輪換和保留策略留給 kubelet。logrotator 的好例子可以在這裡找到。
或者,您始終可以通過指定適當的標誌在 docker 級別設置日誌保留策略。查看 docker文件。