從Alibaba Cloud Linux 2(核心版本4.19.91-22.2.al7
)和Alibaba Cloud Linux 3(核心版本5.10.46-7.al8
)開始,在核心層面提供了容器資源檢視功能的相關介面,實現對容器資源的可見度增強。本文將對該功能的介面進行說明,並提供樣本情境供您參考。
背景資訊
Alibaba Cloud Linux的容器資源檢視功能介面預設狀態下是未啟動的,當您在啟動該功能後,如果在容器中使用top、free等命令,讓容器讀取以下介面的資料時,將直接擷取容器資源資訊,而不是擷取容器所在的宿主機(即ECS執行個體)資源資訊。
/proc/cpuinfo
/proc/meminfo
/sys/devices/system/cpu/online
介面說明
介面 | 說明 |
/proc/sys/kernel/rich_container_enable | 該介面控制容器資源檢視功能是否開啟。取值範圍:
預設值:0 |
/proc/sys/kernel/rich_container_source | 該介面控制cgroup介面的資料來源。取值範圍:
預設值:0 |
/proc/sys/kernel/rich_container_cpuinfo_source | 該介面控制/proc/cpuinfo介面以及/sys/devices/system/cpu/online介面顯示的CPU數量。取值範圍:
預設值:0 |
/proc/sys/kernel/rich_container_cpuinfo_sharesbase | 當/proc/sys/kernel/rich_container_cpuinfo_source介面的取值為2時,需要使用該介面作為計算公式的一部分擷取最終資料。取值範圍:大於等於2的整數值。 預設值:1024 |
介面使用樣本
本樣本中,已在一台Linux執行個體中部署Docker,並建立了一個記憶體大小為1 GB的容器。
如果您未開啟容器資源檢視功能,即/proc/sys/kernel/rich_container_enable介面的值為0。當您在容器中運行free -m命令時,查看到的資源資訊如下圖所示,該資訊為容器所在的宿主機(Linux執行個體)資源資訊。
如果您在宿主機(Linux執行個體)中運行命令echo 1 > /proc/sys/kernel/rich_container_enable開啟了容器資源檢視功能,當您在容器中運行free -m命令時,查看到的資源資訊如下圖所示,該資訊為容器資源資訊。
特殊情境說明
一般情況下,開啟容器資源檢視功能後,使用相關介面的預設值即可滿足常規需求,但您需要注意以下特殊情境的介面配置:
對於非共用PID Namespace的Pod,其中的每一個容器都是獨立的PID Namespace,如果使用systemd啟動某個特權容器,容器的進程號為1號,則採集監控資料的任務可能位於容器的某個子cgroup中,而不是根cgroup。
例如,當您通過SSH登入容器並運行cat /proc/cpuinfo命令後:
如果/proc/sys/kernel/rich_container_source取值為預設值0,則指標current實際是位於容器的sshd.service所建立的子cgroup中,此時查看的結果為錯誤資料。
如果您運行echo 1 > /proc/sys/kernel/rich_container_source命令,使用child reaper(即當前PID Namespace的1號進程)所在的cgroup作為資料來源,即可查看到正確的資料。