cgroup v2 採用統一的層級結構和改進的記憶體管理機制,相容 Kubernetes 後續版本的增強功能。建議將節點遷移至預設啟用 cgroup v2 的新版作業系統,以提升叢集穩定性與資源管理效率。
Cgroup版本說明
Linux核心提供cgroup v1和cgroup v2兩個版本,用於限制、記錄和隔離進程組使用的實體資源(如CPU、記憶體、I/O等)。cgroup v2是新一代的cgroup 介面,在設計上解決了 v1 的多控制器層級問題,提供了更一致的資源控制能力。兩者在通用介面與子系統組織方式上存在差異,直接存取 cgroup 檔案系統的應用程式需進行適配。
詳見cgroup v1與cgroup v2的區別。
Kubernetes 自 1.31 版本 起將cgroup v1支援調整為維護模式,建議遷移至cgroup v2。cgroup v2主要優勢包括:
提升穩定性:採用統一的記憶體核算模型,有效管理頁面緩衝(Page Cache),解決cgroup v1中高磁碟I/O應用搶佔記憶體、導致其他應用被OOMKilled的問題。
統一的層級結構:所有資源控制器(如 CPU、記憶體)集中於單一層級,避免cgroup v1中多層級並存帶來的配置衝突與管理複雜性,簡化資源檢視與策略定義。
增強資源可觀測性:引入壓力失速資訊(Pressure Stall Information, PSI),量化應用因等待 CPU、記憶體或 I/O 資源而阻塞的時間,為效能瓶頸分析提供精細化指標支援。
檢查節點cgroup版本
遷移前,可登入節點,執行以下命令來確認當前的cgroup版本。
# 登入到目標節點後執行
stat -fc %T /sys/fs/cgroup/
# 預期輸出:
# cgroup2fs --> 代表 cgroup v2
# tmpfs --> 代表 cgroup v1
遷移步驟
節點層面:更換作業系統
ACK叢集節點的cgroup版本由其作業系統決定。如需遷移,請在節點池維度更換為支援cgroup v2的新版作業系統。ACK中預設使用cgroup v2的作業系統包括Alibaba Cloud Linux 3.2104 LTS 64位 容器最佳化版、Alibaba Cloud Linux 4 LTS 64位 容器最佳化版、ContainerOS 3.3及以上版本、RHEL 9及以上版本、Ubuntu 22及以上版本。
操作步驟及相關注意事項,請參見更換作業系統。
應用程式層面:確保工作負載相容性
由於 cgroup v1 與 v2 的檔案系統結構和參數命名不相容,任何直接讀取 /sys/fs/cgroup 路徑的應用均需驗證或升級以支援 cgroup v2。
分類 | 說明 |
Java應用 |
|
Go應用 | 若使用了 uber-go/automaxprocs 包,需升級至 v1.5.1 及以上版本。 |
cAdvisor | 如果使用cAdvisor作為獨立的DaemonSet來監控Pod和容器,需更新至 v0.43.0 及以上版本。 |
Nginx Ingress | 舊版本可能因無法正確解析 cgroup v2 中的 CPU 核心數資訊而導致記憶體超限並觸發 OOM,需升級至 v1.11.2 及以上版本。詳見GitHub Issue #9665。 升級ACK Nginx Ingress Controller時,請參見升級Nginx Ingress Controller組件。 |
其他需要關注的應用與組件
第三方監控與APM Agent:Prometheus Node Exporter、Datadog Agent、SkyWalking 等工具在採集節點或容器指標時依賴 cgroupfs 資料來源。未適配 cgroup v2 的版本可能導致資料缺失或異常。建議查閱官方文檔,升級至明確聲明支援 cgroup v2 的版本。
安全與審計工具:Falco、Sysdig 等通過 cgroup 資訊關聯事件歸屬。若組件版本不相容,可能導致檢測規則失效或誤判。建議升級至相容版本,並在測試環境驗證規則有效性。
效能敏感型應用與自訂指令碼:部分應用啟動指令碼會讀取 cgroup 檔案實現自動調優(如根據 CPU 配額設定線程數)。此類邏輯在 cgroup v2 下因路徑變更而失效。應審查相關指令碼,更新為適配 cgroup v2 的讀取方式。
生產環境使用建議
應用相容性
審查自研應用或指令碼,確保其不依賴cgroup v1檔案系統(如
cpu.cfs_quota_us)。由於檔案系統介面不相容,此類邏輯在cgroup v2下將失效,必須進行適配。節點自訂配置
更換作業系統會重設節點。所有自訂修改需通過節點池功能進行持久化,否則在節點重建後將丟失。相關配置方式及注意事項,請參見:
管理節點池OS參數(sysctl、THP)
監控警示:建議啟用阿里雲Prometheus監控,持續觀測叢集整體健康狀態及關鍵容器的資源使用趨勢,及時發現異常。