k8s生产配置中的systemReserved 与 kubeReserved
设置原则:按硬件规格动态调整,而非固定值
这两个预留值不应是固定值,而应基于节点硬件规格(CPU 核数、内存大小)和节点角色(master/worker)动态设定。原因如下:
-
系统进程和 Kubernetes 系统组件的资源消耗会随节点规模、运行负载变化。
-
预留过小无法保护系统,过大会浪费可分配资源,特别是小规格节点上。
-
不同角色节点(master vs worker)承载的系统组件不同,预留需求也不同。
因此,正确做法是:在节点规格确定后,根据该规格按比例或经验公式计算预留值,并对同构节点池使用相同配置。一旦硬件规格固定且节点池同构,该值就可以作为固定配置应用于所有相同规格的节点。
推荐的计算方法
1. 基于比例的参考值
-
systemReserved:为操作系统保留。
-
CPU:节点总 CPU 的 5% ~ 10%,最低不低于 100m
-
内存:节点总内存的 5% ~ 10%,最低不低于 256Mi
-
-
kubeReserved:为 Kubernetes 系统组件(kubelet、容器运行时、CSI 等)保留。
-
CPU:节点总 CPU 的 5% ~ 10%,最低不低于 200m
-
内存:节点总内存的 5% ~ 10%,最低不低于 256Mi
-
对于k8s的节点(2 CPU / 3.5 GiB 内存),按上述比例计算:
-
systemReserved.cpu = 2 × 5% = 100m(正好最低值)
-
systemReserved.memory = 3.5Gi × 5% ≈ 179Mi → 取 256Mi(最低值)
-
kubeReserved.cpu = 2 × 5% = 100m → 但官方建议 kubeReserved.cpu 不低于 200m
-
kubeReserved.memory = 3.5Gi × 5% ≈ 179Mi → 取 256Mi
2. 特殊组件额外预留
-
Master 节点:需要额外考虑 etcd、kube-apiserver、kube-controller-manager、kube-scheduler 等控制平面组件的资源消耗。etcd 对内存和磁盘 I/O 敏感,建议预留更多内存(如 512Mi)。因此 master 节点的 kubeReserved 可适当调高。
-
Worker 节点:系统组件相对较少,按基础比例即可。但如果运行了额外的系统级 DaemonSet(如监控 agent、日志采集、安全代理),也应计入 kubeReserved 或通过资源请求/限制由调度器管理。
3. 结合驱逐阈值
kubelet 的 evictionHard 阈值(如 memory.available < 100Mi)应与预留值配合,确保节点在 OOM 前有足够的缓冲。
编辑配置文件重启验证
sudo vi /var/lib/kubelet/config.yaml
在文件顶层(与 apiVersion、kind 对齐)添加配置(如下-实际配置示例)。
sudo systemctl restart kubelet
确认 Allocatable 已减少
kubectl describe node <node-name> | grep -A 5 "Allocatable"
实际配置示例
小型节点(2 CPU / 3.5 GiB)
systemReserved: cpu: "100m" memory: "256Mi" kubeReserved: cpu: "200m" memory: "256Mi"
中型节点(4 CPU / 8 GiB)
systemReserved: cpu: "200m" memory: "512Mi" kubeReserved: cpu: "300m" memory: "512Mi"
大型节点(8 CPU / 32 GiB)
systemReserved: cpu: "400m" memory: "1Gi" kubeReserved: cpu: "800m" memory: "2Gi"
Master 节点(额外考虑 +etcd)
systemReserved: cpu: "200m" memory: "512Mi" kubeReserved: cpu: "500m" # 包含 etcd、apiserver 等 memory: "1Gi"
何时可以使用固定值
当节点规格完全相同且节点角色一致(如同构的 worker 节点池)时,可以设定统一的固定值。例如,所有 worker 节点都是 4C/8G,则可以统一配置。但一旦引入不同规格的节点(如混合部署 2C/4G 和 4C/8G),就需要分别设置。
最佳实践:将预留值写入自动化配置中(如 Ansible、Terraform、kubeadm 配置),根据节点规格计算,避免人为固定导致不适配。
总结
-
预留值应基于硬件规格按比例计算,并满足最低值要求。
-
角色不同(master/worker)需分别考虑。
-
同构节点池可以使用固定值,但规格变化时必须调整。
-
配置后应监控节点 Allocatable 使用率,必要时动态调整。
这样既能保护系统稳定性,又能最大化资源利用率。
更多推荐
所有评论(0)