有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
TKE 需要占用节点一定的资源来运行相关组件(例如:kubelet、kube-proxy、Runtime 等),因此会造成节点资源总数集群中可分配资源数存在差异。本文介绍 TKE 集群中的节点资源预留策略和注意事项,以便在部署应用时合理设置 Pod 的请求资源量和限制资源量。
说明:
本节节点资源预留的计算策略仅针对普通节点原生节点生效。

节点可分配资源计算策略

计算公式

ALLOCATABLE = CAPACITY - RESERVED - EVICTION - THRESHOLD
默认情况下,除 RESERVED 外为100MiB,即 ALLOCATABLE = CAPACITY - RESERVED - 100MiB。

节点 CPU 预留规则

节点 CPU
预留规则
说明
1c ≤ CPU ≤ 4c
固定预留 0.1c
-
4c < CPU ≤ 64c
4c 以下预留 0.1c,超过 4c 部分预留 2.5%
例如:CPU = 32c预留资源 = 0.1 + (32 - 4) * 2.5% = 0.8c
64c < CPU ≤ 128c
4c 以下预留 0.1c,4c~64c 预留 2.5%,超过 64c 部分预留 1.25%
例如:CPU = 96c预留资源 = 0.1 + (64 - 4) * 2.5% + (96 - 64) * 1.25% = 2c
CPU > 128c
4c 以下预留 0.1c,4c~64c 预留 2.5%,64c~128c 预留 1.25%,超过 128c 部分预留 0.5%
例如:CPU = 196c预留资源 = 0.1 + (64 - 4) * 2.5% + (128 - 64) * 1.25% + (196 - 128) * 0.5%= 2.74c

节点内存预留规则

节点内存
预留规则
说明
1G ≤ 内存 ≤ 4G
固定预留 25%
例如:内存 = 2G预留资源 = 2 * 25% = 512MB
4G < 内存 ≤ 8G
4G 以下预留 25%,超过 4G 部分预留 20%
例如:内存 = 8G预留资源 = 4 * 25% + (8 - 4) * 20% = 1843MB
8G < 内存 ≤ 16G
4G 以下预留 25%,4G~8G 预留 20%,超过 8G 部分预留 10%
例如:内存 = 12G预留资源 = 4 * 25% + (8 - 4) * 20% + (12 - 8) * 10%= 2252MB
16G < 内存 ≤ 128G
4G 以下预留 25%,4G~8G 预留 20%,8G~16G 预留 10%,超过 16G 部分预留 6%
例如:内存 = 32G预留资源 = 4 * 25% + (8 - 4) * 20% + (16 - 8) * 10% + (32 - 16) * 6% = 3645MB
内存 > 128G
4G 以下预留 25%,4G~8G 预留 20%,8G~16G 预留 10%,16G~128G 预留 6%,超过 128G 部分预留 2%
例如:内存 = 320G预留资源 = 4 * 25% + (8 - 4) * 20% + (16 - 8) * 10% + (128 - 16) * 6% + (320 - 128) * 2% = 13475MB
说明:
用户可以通过自定义 kubelet 参数的方式来修改 kube-reserved 以达到修改节点预留资源的目的,建议给节点组件预留充足的 CPU 和内存资源来保证节点的稳定性。

查看节点可分配资源

检查集群中可用的节点可分配资源,请执行以下命令,并将 NODE_NAME 替换为您要检查的节点的名称。输出结果包含CapacityAllocatable字段,并提供了针对 CPU、内存和临时存储的测量结果。
kubectl describe node NODE_NAME | grep Allocatable -B 7 -A 6

注意事项

该预留策略针对 k8s 1.16及以上版本、2022年6月24日后创建的新增节点自动生效,无需手动配置。
为保证业务稳定性,该预留策略不会对已有节点自动生效。因为该资源预留的计算方式可能会造成节点的可分配资源变少,对于资源水位较高的节点,可能会触发节点驱逐。
若您希望对已有节点应用该资源预留策略,您可以通过 容器服务控制台 将该节点在不直接销毁的情况下移出集群,然后添加已有节点,新添加的节点会默认执行该资源预留策略。