將節點遷移至 cgroup v2

更新時間:
Copy as MD

cgroup v2 採用統一的層級結構和改進的記憶體管理機制,相容 Kubernetes 後續版本的增強功能。建議將節點遷移至預設啟用 cgroup v2 的新版作業系統,以提升叢集穩定性與資源管理效率。

Cgroup版本說明

Linux核心提供cgroup v1cgroup v2兩個版本,用於限制、記錄和隔離進程組使用的實體資源(如CPU、記憶體、I/O等)。cgroup v2是新一代的cgroup 介面,在設計上解決了 v1 的多控制器層級問題,提供了更一致的資源控制能力。兩者在通用介面與子系統組織方式上存在差異,直接存取 cgroup 檔案系統的應用程式需進行適配。

詳見cgroup v1cgroup v2的區別

Kubernetes 自 1.31 起將cgroup v1支援調整為維護模式,自1.35版本起不再支援 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

遷移步驟

節點層面:更換作業系統

節點的 cgroup 版本由其作業系統決定。

  • ECS(含EGS)節點池

    可在節點池維度更換作業系統。以下作業系統預設使用 cgroup v2:

    • Alibaba Cloud Linux 3.2104 LTS 64位 容器最佳化版

    • Alibaba Cloud Linux 4 LTS 64位 容器最佳化版

    • ContainerOS 3.3 及以上版本

    • RHEL 9 及以上版本

    • Ubuntu 22 及以上版本

  • 靈駿節點池

    按以下步驟手動完成節點重裝並重新加入叢集。

    1. 移除節點:在 ACK 叢集中移除靈駿節點。移除前可選擇是否需要節點排水

      節點排水依賴叢集中是否存在可容納被驅逐 Pod 的目標節點,請確認資源充足。
    2. 重裝系統:在靈駿叢集中執行節點重裝。登入靈駿控制台重裝節點時,選擇預設使用 cgroup v2 的作業系統鏡像。

    3. 重新加入叢集:等待重裝完成後,通過添加已有靈駿節點的方式將其重新加入 ACK 叢集。

  • 混合雲節點池

    作業系統由您自行管理,需手動將節點作業系統升級至支援 cgroupv2 的版本,避免節點升級失敗或重新接入叢集失敗。

應用程式層面:確保工作負載相容性

由於 cgroup v1 與 v2 的檔案系統結構和參數命名不相容,任何直接讀取 /sys/fs/cgroup 路徑的應用均需驗證或升級以支援 cgroup v2。

分類

說明

Java應用

  • DragonWell:11.0.16.12、8.15.16-GA及以上版本。

  • OpenJDK/HotSpot:jdk8u372、11.0.16、15及以上版本。

  • IBM Semeru Runtimes:8.0.382.0、11.0.20.0、17.0.8.0及以上版本。

  • IBM Java:8.0.8.6及以上版本。

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下將失效,必須進行適配。

  • 節點自訂配置

    更換作業系統會重設節點。所有自訂修改需通過節點池功能進行持久化,否則在節點重建後將丟失。相關配置方式及注意事項,請參見:

  • 監控警示:建議啟用阿里雲Prometheus監控,持續觀測叢集整體健康狀態及關鍵容器的資源使用趨勢,及時發現異常。