節點的部分資源需要運行一些必要的Kubernetes系統組件和Kubernetes系統資源,使該節點可作為您的集群的一部分。因此,您的節點資源總量與節點在Kubernetes中的可分配資源之間會存在差異。節點的規格越大,在節點上部署的容器可能會越多,所以kubernetes自身需預留更多的資源。
為了保證節點的穩定性,CCE集群節點上會根據節點的規格預留一部分資源給Kubernetes的相關組件(kubelet,kube-proxy以及docker等)。
CCE對用戶節點可分配的資源計算法則如下:
Allocatable = Capacity - Reserved - Eviction Threshold
即,節點上可配置值=總量-預留值-驅逐閾值。
mem_reserved_total = reserved_value_for_system + reserved_value_for_pods
- reserved_value_for_system:
? total_mem <= 8GB,reserved_value_for_system = 0MB
? 8GB < total_mem <= 16GB, reserved_value_for_system = ( (total_mem – 8GB)*1024*10% )MB
? 16GB < total_mem <= 128GB, reserved_value_for_system = ( 8GB*1024*10% + (total_mem – 16GB)*1024*6% )MB
? total_mem > 128GB, reserved_value_for_system = ( 8GB*1024*10% + 112GB*1024*6% + (total_mem – 128GB)*1024*2% )MB
- reserved_value_for_pods:
total_mem <= 2GB:
reserved_value_for_pods = total_mem *25%
total_mem > 2GB:
? 0 < pods <= 16, reserved_value_for_pods = 700 MB
? 16 < pods <= 32, reserved_value_for_pods = ( 700 + (pods - 16)*18.75 )MB
? 32 < pods <= 64, reserved_value_for_pods = ( 1024 + (pods - 32)*6.25 )MB
? 64 < pods <= 128, reserved_value_for_pods = ( 1230 + (pods - 64)*7.80 )MB
? pods > 128, reserved_value_for_pods = ( 1740 + (pods - 128)*11.20 )MB
其中:
- “total_mem”為內存總量。
- “pods”為節點的最大實例數。
- “mem_reserved_total”為總預留值。
- “reserved_value_for_system”為系統組件預留值。
- “reserved_value_for_pods”為Kubelet管理Pod所需預留值。
須知:
對于小規格節點,需根據實際使用情況調整節點的最大實例數。或者在CCE控制臺創建節點時,需考慮根據節點規格自適應調整節點的最大實例數參數。
- total_cpu <= 1core,reserved_value= total_cpu *6%
- 1core < total_cpu <= 2core, reserved_value= 1core*6% + (total_cpu– 1core)*1 %
- 2core < total_cpu <= 4core, reserved_value= 1core*6% + 1core*1% + (total_cpu– 2core)*0.5%
- total_cpu > 4core, reserved_value= 1core*6% + 1core*1% + 2core*0.5% + (total_cpu– 4core)*0.25%
其中:
- “total_cpu”為CPU總量。
- “reserved_value”為預留值。
- CCE對節點預留了額外的100Mi給kubelet驅逐所用。