【轉】ephemeral-storage引發的pod驅逐問題


目錄

(1).問題現象

(2).問題查證過程

(3).原因總結

(4).解決方式

正文

大前提:單節點2核16G搭建微服務完整的容器化環境,需要容器化很多微服務組件。

(1).問題現象

describe不能啟動的pod,發現兩條關鍵日志:

A.0/1 nodes are available: 1 node(s) had taints that the pod didn't tolerate.

說明當前所在work-node資源不容許此pod部署,發生了pod驅逐。

B.The node was low on resource: ephemeral-storage.

說明了發生pod驅逐的原因。

詳細日志如下:

(2).問題查證過程

1.ephemeral-storage(短暫存儲)的概念和作用

ephemeral-storage是為了管理和調度Kubernetes中運行的應用的短暫存儲。

在每個Kubernetes的節點上,kubelet的根目錄(默認是/var/lib/kubelet)和日志目錄(/var/log)保存在節點的主分區上,這個分區同時也會被Pod的EmptyDir類型的volume、容器日志、鏡像的層、容器的可寫層所占用。ephemeral-storage便是對這塊主分區進行管理,通過應用定義的需求(requests)和約束(limits)來調度和管理節點上的應用對主分區的消耗。

我們使用df -h可以看到/var/lib下有很多容器相關的目錄,這些都是ephemeral-storage:

2.image鏡像重新下載

查證時無意中發現pod在啟動時要重新下載相關鏡像,說明由於磁盤容量不夠時,kubernetes會清理鏡像文件去騰空磁盤,省出資源去優先啟動pod。

符合上述1中所述的“鏡像層占用ephemeral-storage”。

因為筆者機器打算做一個單節點的kubernetes集群,去部署微服務的allinone環境,image會很多,占用空間會很大。原有的20G根本不夠用。

3.本地pv存儲占用磁盤

如2所述,kubernetes中的allinone的各個組件的持久化存儲都是用的本地盤(系統盤),都開的是1G,那么原有的20G更不夠了。

4.有些容器化組件沒有使用持久存儲

造成應用的日志全部打印到了容器里,也就是/var/log目錄下,耗用了ephemeral-storage。

(3).原因總結

根本原因:Kubernetes使用的系統盤容量不足;觸發項如下:

1.image鏡像太多,耗用太多ephemeral-storage;

2.本地pv存儲全部掛載了系統盤目錄下;

3.有些容器沒有使用持久化存儲,日志等全部打印到了ephemeral-storage。

(4).解決方式

原則:讓ephemeral-storage只存儲kubernetes體系下的日志,系統盤容量要充足。

1.image鏡像層的存儲指定非系統盤;

2.本地pv存儲掛載非系統盤;(生產環境禁止使用本地磁盤,必須使用雲存儲)

3.容器必須都使用持久化存儲,禁止把日志都打到容器里。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM