ACK需要占用一定的节点资源来为kube组件和system进程预留资源,从而保证OS内核和系统服务、Kubernetes守护进程的正常运行。这会导致节点的资源总数Capacity与可分配的资源数Allocatable之间存在差异。ACK存在默认的资源预留策略,也支持通过kubelet配置自定义资源预留。
注意事项
-
该预留策略仅适用于1.16.9及以上版本的集群。
-
修改资源预留的值,请参见自定义节点池kubelet配置。不支持通过黑屏手动对kubelet配置文件进行修改,以避免配置冲突,导致后续节点池运维过程中的非预期结果。
-
该预留策略对新添加的节点自动生效,无需手动配置。
-
对于已存在节点:
-
如果已存在节点没有进行过节点池运维操作,例如,自定义配置、节点池升级等,出于稳定性考虑,该预留策略不会对此类已存在节点自动生效。
-
即使节点未配置过资源预留,已存在节点会在集群升级、节点池升级、修改节点池自定义Kubelet参数后,默认应用资源预留。
-
改变资源预留的值可能会造成节点的可分配资源变少。对于资源水位较高的节点,可能会触发节点驱逐。
-
如果您希望对已存在节点应用该资源预留策略,您可以将已有节点移除出集群,然后重新添加节点。新添加的节点会默认执行该资源预留策略。移除节点和添加节点的标准操作及带来的影响,请参见移除节点、添加已有节点。
-
查询节点可分配资源
执行以下命令,查看节点的资源总量和可分配资源。
kubectl describe node [NODE_NAME] | grep Allocatable -B 7 -A 6
预期输出:
Capacity:
cpu: 4 #节点的CPU总核数。
ephemeral-storage: 123722704Ki #节点的临时存储总量,单位KiB。
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 7925980Ki #节点的内存总量,单位KiB。
pods: 64
Allocatable:
cpu: 3900m #节点可分配的CPU核数。
ephemeral-storage: 114022843818 #节点可分配的临时存储,单位Byte。
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 5824732Ki #节点可分配的内存,单位KiB。
pods: 64
计算节点可分配资源
可分配资源的计算公式:可分配资源(Allocatable) = 总资源(Capacity)-预留资源(Reserved)-驱逐阈值(Eviction-Threshold)
公式说明:
-
总资源对应查询节点命令输出中的
Capacity
字段。 -
关于预留资源的相关信息,请参见资源预留策略。
-
关于驱逐阈值的相关信息,请参见节点压力驱逐。
资源预留策略
节点的预留资源量通常要考虑以下因素:
-
由于规格较高的ECS节点通常会运行更多的Pod,为了保证节点的性能,ACK会为Kubernetes组件预留更多资源。
-
由于Windows节点需要使用额外的资源来运行Windows操作系统和Windows Server相关组件,Windows节点通常会比Linux节点需要更多的预留资源。更多信息,请参见创建Windows节点池。
预留资源包括给kube组件预留的资源(kubeReserved)和给system进程预留的资源(systemReserved)。kubeReserved和systemReserved各占预留资源的50%。例如,节点总CPU 1 Core,则预留CPU为100 milliCore,其中kubeReserved占用50 milliCore,systemReserved占用50 milliCore。修改资源预留的值,请参见自定义节点池kubelet配置。
ACK会根据CPU和内存所在的不同区间来计算预留的资源量,节点的总预留资源量等于各区间的预留资源量之和。
-
CPU:计算节点的总CPU预留量示意图如下。
以32核的节点为例,总的CPU预留量计算如下:
100+(32000-4000)×2.5%=800 milliCore
-
内存:计算节点的总内存预留量示意图如下所示。
以256 GiB内存的节点为例,总的内存预留量计算如下:
4×25%+(8-4)×20%+(16-8)×10%+(128-16)×6%+(256-128)×2%=11.88 GiB
ACK节点预留资源示例
节点总资源 |
预留资源 |
||
CPU (单位:Core) |
Memory (单位:GiB) |
CPU (单位:milliCore) |
Memory (单位:MiB) |
1 |
2 |
100 |
512 |
2 |
4 |
100 |
1024 |
4 |
8 |
100 |
1843 |
8 |
16 |
200 |
2662 |
16 |
32 |
400 |
3645 |
32 |
64 |
800 |
5611 |
64 |
128 |
1600 |
9543 |
128 |
256 |
2400 |
12164 |
256 |
512 |
3040 |
17407 |
512 |
1024 |
4320 |
27893 |
常见问题
如何查看节点总CPU和内存?
CPU
执行如下命令,查询节点总CPU。
cat /proc/cpuinfo | grep processor
预期输出:
processor : 0
processor : 1
processor : 2
processor : 3
内存
执行如下命令,查询节点总内存。
cat /proc/meminfo | grep MemTotal
预期输出:
MemTotal: 7660952 kB
相关文档
-
配置自定义资源预留和驱逐阈值,请参见自定义节点池kubelet配置。
-
根据可分配资源,您可以为业务Pod设置所需资源(request),节点上所有业务Pod所需资源之和不应该大于节点的可分配资源,否则业务Pod会因节点容量不足而调度失败。ACK为K8s原生的工作负载提供了资源画像能力,通过对资源使用量历史数据的分析,辅助您填写Pod所需资源。设置业务Pod所需资源的具体操作,请参见创建无状态工作负载Deployment。
-
如果您希望对已存在节点应用自定义资源预留策略,您可以将已有节点移除出集群,然后重新添加节点。新添加的节点会默认执行自定义资源预留策略。移除节点和添加节点的标准操作及带来的影响,请参见移除节点、添加已有节点。
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/167878.html