k8s容器環境多個Pod寫日誌永久保存到物理磁碟,日誌名稱重複問題? Flexvolume是否能完成我的需求?
中,push業務中日誌文件需要寫入物理機磁碟長期保存。但是每個pod默認寫入的路徑相同。會存在並發寫文件造成非預期問題。(注意:emptyDir 方式不能解決我們的需求,我們的需求是日誌長期保存。即便pod終止,也不會刪除。同時能夠區分一個pod對應一個日誌文件)。
Flexvolume是否能完成我的需求?
可以用statefulset+storageclass實現
(1)另外也可以繞一下:
1. 使用一個能持久化存儲的公用目錄,比方說hostpath:/data/logs
2. 將這個目錄掛載到所有pod的/data/logs路徑
3. 在pod的/data/logs創建一個不可能重名的文件夾,比如/data/logs/pod-name
4. 將log目錄軟鏈接到pod裡面的/data/logs/pod-name目錄
(2)建議將日誌持久化放到elasticsearch裡面去,集中化管理,還能結合告警、搜索、統計等,解決方案也挺多
1. 將srv與日誌採集agent綁定在一個pod裡面採集srv日誌
2. 將srv的log用emptyDir暴露在宿主機上,自動發現日誌文件
3. srv直接將log打到kafka等消息隊列裡面中轉
4. srv打syslog然後採集
Flexvolume看介紹似乎讓用戶能夠支持一些kubernetes不支持的卷類型
我是這麼做得。
在集群外部有機器開 NFS,pod 中使用volume 掛載,pod 中的日誌文件可以寫到外部的 NFS 中。當然要包括 HOSTNAME。
可以實現你的需求,但,從目錄結構上講 ,有一節不必要的 HOSTNAME,雖然不影響 grep。
如圖