Docker 和 kubelet 的 cgroup driver


在用minikube安裝k8s的時候,有一個強烈的要求就是docker與kubelet的驅動,必須是保持一致的,需要都使用system或cgroupfs,一直搞不清這兩個驅動的區別在哪。

首先當然要了解cgroup的概念;cgroups,其名稱源自控制組群(control groups)的簡寫,是Linux內核主要用於限制和隔離一組進程對系統資源的使用,也就是做資源QoS。可控制的資源主要包括CPU、內存、block I/O、網絡帶寬等等。cgroup 是將任意進程進行分組化管理的 linux 內核功能,cgroup 本身是提供將進程進行分組化管理的功能和接口的基礎結構(各自的細節資源管控下的tasks文件記錄了這個Cgroup的所有進程(包括線程))

現在的cgroups適用於多種應用場景,從單個進程的資源控制,到實現操作系統層次的虛擬化;

Cgroups是透過階層式的方式來管理的,和程序、子群組相同,都會由它們的 parent 繼承部份屬性。然而,這兩個模型之間有所不同

由於k8s官網推薦使用systmed(docker默認安裝也是systemd)

如下圖所示,我們可以看到對應的總資源管理及細節的資源管理:圖1為總的資源管控,圖2為細節的資源管控

 

 

 

 那么 systemd 和 cgroupfs 這兩種驅動有什么區別呢?

1. systemd cgroup driver 是 systemd 本身提供了一個 cgroup 的管理方式,使用systemd 做 cgroup 驅動的話,所有的 cgroup 操作都必須通過 systemd 的接口來完成,不能手動更改 cgroup 的文件

2. cgroupfs 驅動就比較直接,比如說要限制內存是多少、要用 CPU share 為多少?直接把 pid 寫入對應的一個 cgroup 文件,然后把對應需要限制的資源也寫入相應的 memory cgroup 文件和 CPU 的 cgroup 文件就可以了

所以可以看出來 systemd 更加安全,因為不能手動去更改 cgroup 文件,當然我們也推薦使用 systemd 驅動來管理 cgroup。

 

 

 

 

 

 

 


免責聲明!

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



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