什麼是 CGManager?
CGManager 是一個核心的特權守護進程,通過一個簡單的 D-Bus API 管理你所有的 cgroup。它被設計用來處理嵌套的 LXC 容器以及接受無特權的請求,包括解析用戶名稱空間的 UID/GID。
組件
cgmanager
這個守護進程在宿主機上運行,將 cgroupfs 掛載到一個獨立的掛載名稱空間(所以它不能從宿主機上看到),綁定 /sys/fs/cgroup/cgmanager/sock
用於傳入的 D-Bus 查詢,並通常處理宿主機上直接運行的所有客戶端。
cgmanager 既接受使用 D-Bus + SCM 憑證的身份驗證請求,用於在命名空間之間轉換 uid、gid 和 pid,也可以使用簡單的 「unauthenticated」(只是初始的 ucred)D-Bus 來查詢來自宿主機級別的查詢。
cgproxy
你可能會在兩種情況下看到這個守護進程運行。在宿主機上,如果你的內核老於 3.8(沒有 pidns 連接支持)或處於容器中(只有 cgproxy 運行)。
cgproxy 本身並不做任何 cgroup 配置更改,而是如其名稱所示,代理請求給主 cgmanager 進程。
這是必要的,所以一個進程可以直接使用 D-Bus(例如使用 dbus-send)與 /sys/fs/cgroup/cgmanager/sock
進行通信。
之後 cgproxy 將從該查詢中得到 ucred,並對真正的 cgmanager 套接字進行身份驗證的 SCM 查詢,並通過 ucred 結構體傳遞參數,使它們能夠正確地轉換為 cgmanager 可以理解的宿主機命名空間 。
cgm
一個簡單的命令行工具,與 D-Bus 服務通信,並允許你從命令行執行所有常見的 cgroup 操作。
通信協議
如上所述,cgmanager 和 cgproxy 使用 D-Bus。建議外部客戶端(所以不要是 cgproxy)使用標準的 D-Bus API,不要試圖實現 SCM creds 協議,因為它是不必要的,並且容易出錯。
相反,只要簡單假設與 /sys/fs/cgroup/cgmanager/sock
的通信總是正確的。
cgmanager API 僅在獨立的 D-Bus 套接字上可用,cgmanager 本身不連接到系統匯流排,所以 cgmanager/cgproxy 不要求有運行中的 dbus 守護進程。
你可以在這裡閱讀更多關於 D-Bus API。
許可證
CGManager 是免費軟體,大部分代碼是根據 GNU LGPLv2.1+ 許可條款發布的,一些二進位文件是在 GNU GPLv2 許可下發布的。
該項目的默認許可證是 GNU LGPLv2.1+
支持
CGManager 的穩定版本支持依賴於 Linux 發行版以及它們自己承諾推出穩定修復和安全更新。
你可以從 Canonical Ltd 獲得對 Ubuntu LTS 版本的 CGManager 的商業支持。
via: https://linuxcontainers.org/cgmanager/introduction/
作者:Canonical Ltd. 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive