當kubelet參數默認配置無法滿足業務需求、您希望對集群節點進行個性化調整時,您可以在節點池維度自定義節點的kubelet參數配置,調整節點行為。例如,您可以調整集群資源預留以調配資源用量、自定義節點壓力驅逐閾值以緩解集群資源不足、調整拓撲管理器策略以提高系統性能等。
使用限制
僅1.20版本及以上的ACK集群支持自定義kubelet參數。如需升級集群,請參見手動升級集群。
僅1.22版本及以上的ACK靈駿集群支持自定義kubelet參數。如需升級集群,請參見升級ACK靈駿集群。
若您的集群版本不滿足限制條件,可能會出現非預期現象。
注意事項
自定義kubelet參數按批次變更節點配置,節點池中已有節點將即時生效,新增節點也會使用新配置。生效時,kubelet進程將重啟,可能會對節點運行和工作負載運行產生一定影響。請在業務低峰期操作。
如果未配置evictionHard、kubeReserved或systemReserved,系統則會使用默認值配置資源預留。默認值的計算方式,請參見節點資源預留策略。
資源預留配置的改變,可能會造成節點的可分配資源變少。對于資源水位較高的節點,可能會觸發節點驅逐。
強烈不建議您通過黑屏操作自行定義控制臺不支持的kubelet參數。黑屏操作存在很大的穩定性風險,需要您自行保證Userdata文件內容的正確性和兼容性,避免因配置錯誤或者配置被新版本棄用時導致節點不可用。
支持通過控制臺自定義的kubelet參數
字段 | 說明 | 默認值 | 建議取值范圍 |
allowedUnsafeSysctls | 設置允許使用的非安全的sysctl或sysctl通配符(以 重要 使用此參數前,請仔細評估相關風險并自行保證可用性。 | 不涉及 | 支持下述前綴的 sysctl 配置:
|
containerLogMaxFiles | 容器的日志文件個數上限。此值必須大于等于2,且容器運行時需為containerd。 | 10 | [2, 10]。 |
containerLogMaxSize | 容器日志文件輪換生成新文件的最大閾值。容器運行時需為containerd。 | 100Mi | 不涉及。 |
cpuCFSQuota | 允許為設置了CPU限制的容器實施CPU CFS配額約束。 | true | 可選值:
|
cpuCFSQuotaPeriod | 設置CPU CFS配額周期值。 需確保CustomCPUCFSQuotaPeriod特性門控已被啟用 | 100ms | 介于1毫秒和1秒之間,包含1毫秒和1秒。 |
cpuManagerPolicy | CPU管理器策略。 | none | 可選值:
|
eventBurst | 事件記錄的個數的突發峰值上限。 | 10 | [1, 100],且取值必須大于等于 |
eventRecordQPS | 每秒可生成的事件數量。 | 5 | [1, 50]。 |
evictionHard | 觸發Pod驅逐操作的一組硬性門限。 | imagefs.available<15%,memory.available<300Mi,nodefs.available<10%,nodefs.inodesFree<5% | 無。 |
evictionSoft | 設置一組驅逐閾值。 | 無 | 無。 |
evictionSoftGracePeriod | 設置一組驅逐寬限期。 說明 需已設置evictionSoft。 | 無 | 無。 |
featureGates | 實驗性特性的特性開關組。每個開關以 重要
| 不涉及 | 不涉及。 |
imageGCHighThresholdPercent | 配置鏡像的磁盤用量百分比閾值,一旦鏡像用量超過此閾值,鏡像垃圾收集會一直運行。 配置時,此值需大于imageGCLowThresholdPercent取值。 | 85 | [60, 95]。 |
imageGCLowThresholdPercent | 配置鏡像的磁盤用量百分比閾值,鏡像用量低于此閾值時不會執行鏡像垃圾收集操作。 配置時,此值需小于imageGCHighThresholdPercent取值。 | 80 | [30, 90]。 |
kubeAPIBurst | 每秒發送到APIServer的突發請求數量上限。 | 10 | [1, 100],且取值必須大于等于 |
kubeAPIQPS | 與APIServer通信的每秒查詢個數。 | 5 | [1, 50]。 |
kubeReserved | Kubernetes系統預留的資源配置。 | 默認自動計算,詳細信息請參見節點資源預留策略。 | 不涉及。 |
maxPods | Node能運行的Pod最大數量。 | 不涉及。取決于機器規格和容器網絡規劃等物理資源配置。 | 不涉及。 |
memoryManagerPolicy | 內存管理器需要使用的策略。 | None | 可選值:
|
podPidsLimit | 每個Pod中可使用的PID個數上限。 | 16384 | 無。 |
readOnlyPort | kubelet無鑒權只讀端口。 |
| 0 關于開放kubelet容器監控只讀端口(10255)的風險,請參見【產品變更】遷移低版本ACK集群監控端口至鑒權端口。 |
registryBurst | 突發性鏡像拉取的個數上限。 | 10 | [1, 100],且取值必須大于等于 |
registryPullQPS | 鏡像倉庫的QPS上限。 | 5 | [1, 50]。 |
reservedMemory | NUMA節點內存預留列表。 | 無。 | 無。 |
serializeImagePulls | 串行拉取鏡像。 | False | 可選值:
|
systemReserved | 系統預留的資源配置。 | 默認自動計算,詳細信息請參見節點資源預留策略。 | 不涉及。 |
topologyManagerPolicy | 拓撲管理器策略。借助NUMA架構,數據可以被分配到相同的NUMA節點,以減少跨節點訪問,提高系統性能。拓撲管理器可以作出與拓撲結構相對應的資源分配決定。更多信息,請參見控制節點上的拓撲管理策略。 | none |
|
ContainerLogMonitorInterval | 集群版本需為1.30及以上。白名單功能,請提交工單申請。 檢測容器日志執行輪轉操作的間隔時間。 | 10s | [3s,60s] |
ContainerLogMaxWorkers | 集群版本需為1.30及以上。白名單功能,請提交工單申請。 執行日志輪換操作的并發工作程序的最大數量。 | 1 | [1,20] |
通過控制臺自定義節點池kubelet參數
自定義kubelet參數生效時會重啟kubelet進程,可能會對業務產生一定影響。請在業務低峰期進行操作。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在節點池列表頁面,單擊目標節點池操作列下的更多> Kubelet配置。
仔細閱讀當前頁面上的注意事項,單擊自定義參數選擇需要配置的參數,設置每批次的最大并行數,然后單擊提交,按照頁面指引完成操作。
配置每批次的最大并行數后(推薦設置為10),kubelet配置將按批次對節點生效。執行需要一定時間,您可以在事件列表區域查看執行進度,并控制執行過程,例如暫停、繼續、取消等。
您可以使用暫停功能對已升級的節點進行驗證。執行暫停操作時,正在配置中的節點會繼續完成執行;尚未執行的節點在任務繼續前不會被執行自定義配置。
說明建議盡快完成自定義配置任務。處于暫停狀態的任務將在7天后自動取消,相關的事件和日志信息也會被清理。
FAQ
自定義配置會被棄用嗎?
隨著Kubernetes版本的演進,可能會有部分參數或FeatureGate被標記棄用或者從代碼移除。如果受容器服務 Kubernetes 版管理的自定義參數在新的版本不再適用時,相關配置會在集群升級期間被移除棄用。
如何啟用配置文件的方式管理kubelet?
容器服務 Kubernetes 版會根據社區的最佳實踐調整kubelet配置的管理方式。在1.20版本之后,逐步將已經被標記棄用的kubelet啟動命令(Command-Line Flags)改為配置文件。更多信息,請參見Kubelet Configuration (v1beta1)。
新增節點(新創建的節點和新添加的節點)會同時保留配置文件和原有的配置方式;存量節點不受影響。如需將節點統一為配置文件管理的方式,您可以參見支持通過控制臺自定義的kubelet參數觸發自定義配置,以統一節點池內全量節點的配置。
如何自定義控制臺不支持的參數?
強烈不建議您通過黑屏操作自行定義控制臺不支持的kubelet參數。如需執行此操作,請在充分評估變更風險后,執行以下命令,修改節點池的Userdata。Userdata修改完成后,新擴容的節點將會帶有您自行定義的配置。
echo 'KUBELET_CUSTOMIZED_ARGS=""' > /etc/kubernetes/kubelet-customized-args.conf
systemctl daemon-reload
systemctl restart kubelet
此外,針對支持通過控制臺自定義的kubelet參數,請避免通過黑屏修改Userdata的方式來自行定義,避免配置沖突,繼而導致節點池運維過程中產生非預期結果。
黑屏操作存在很大的穩定性風險,需要您自行保證Userdata文件內容的正確性和兼容性,避免因配置錯誤或者配置被新版本棄用時導致節點不可用。