阅读量:0
Kubernetes 在 Ubuntu 上的资源限制设置指南
一 核心概念与生效机制
- 在 Kubernetes 中,资源限制通过为容器设置 requests(调度所需的最小资源)与 limits(运行时上限)实现。调度器依据 requests 选择节点;kubelet 与内核通过 cgroup 强制执行 limits。其中,CPU 限制以 CFS 节流方式执行,内存限制由内核 OOM Killer 在超限时终止容器。若只设置 limits 而未设置 requests,且未启用准入默认,Kubernetes 会将 limits 的值同时作为 requests。自 v1.32 起可在 Pod 级别声明资源请求/限制(Alpha,默认关闭,当前支持 cpu/memory)。
二 在 Pod 或容器级别设置
- 在 Deployment/Pod YAML 的容器 spec 中使用 resources 字段即可,单位为:cpu(核,支持毫核 1000m=1 核)、memory(字节,如 Mi/Gi)。示例:
apiVersion: v1
kind: Pod
metadata:
name: app
spec:
containers:
- name: app
image: nginx:1.25
resources:
requests:
cpu: "250m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "256Mi"
- 说明:上述设置与节点是否为 Ubuntu 无关,属于集群通用配置;调度与限额由 kube-scheduler/kubelet 在节点上实施。
三 命名空间级别统一策略
- 使用 LimitRange 为命名空间设置默认请求/限制,以及最小/最大值,未显式声明时自动注入默认值,并做硬性边界校验:
apiVersion: v1
kind: LimitRange
metadata:
name: default-mem-cpu
namespace: dev
spec:
limits:
- type: Container
default:
cpu: "500m"
memory: "512Mi"
defaultRequest:
cpu: "100m"
memory: "128Mi"
min:
cpu: "100m"
memory: "64Mi"
max:
cpu: "2"
memory: "1Gi"
- 使用 ResourceQuota 限制命名空间资源总量(如总 CPU/内存、Pod 数量等),超出后拒绝新建:
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-quota
namespace: dev
spec:
hard:
pods: "10"
requests.cpu: "4"
requests.memory: "8Gi"
limits.cpu: "8"
limits.memory: "16Gi"
- 提示:LimitRange/ResourceQuota 对存量 Pod 不生效,只对后续创建的对象生效;如需让存量 Pod 受新规则约束,需滚动更新工作负载。
四 节点级别资源保护与驱逐
- 在 Ubuntu 上通常通过 kubelet 参数为系统与 Kubernetes 组件预留资源,并配置节点压力驱逐阈值,避免节点被“打满”导致不稳定。常见做法(示例值可按需调整):
- 编辑 kubelet 服务环境(常见路径:/etc/systemd/system/kubelet.service.d/10-kubeadm.conf),在 KUBELET_KUBECONFIG_ARGS 或 KUBELET_EXTRA_ARGS 中加入:
--system-reserved=cpu=500m,memory=1Gi
--kube-reserved=cpu=500m,memory=1Gi
--eviction-hard=memory.available<500Mi,nodefs.available<10%,imagefs.available<15%
--eviction-minimum-reclaim=memory.available=0Mi,nodefs.available=500Mi,imagefs.available=2Gi
--node-status-update-frequency=10s
--eviction-pressure-transition-period=20s
- 使配置生效并重启 kubelet:
sudo systemctl daemon-reload
sudo systemctl restart kubelet
- 含义要点:
- system-reserved/kube-reserved:为 OS 进程/Kubernetes 组件预留资源,提升节点稳定性。
- eviction-hard:当节点可用资源低于阈值(如 memory.available<500Mi)触发驱逐,释放资源。
- eviction-minimum-reclaim:每次回收至少释放的资源量,避免频繁驱逐震荡。
- 常见可监控的驱逐信号还包括 nodefs.available、nodefs.inodesFree、imagefs.available 等。
五 验证与最佳实践
- 验证方式
- 查看节点可分配与已分配资源:
kubectl describe node(关注 Allocatable/Allocated resources)。 - 查看 Pod 事件与状态:
kubectl describe pod(是否因配额/限额/驱逐失败)。 - 观察容器实际用量:
kubectl top pod。--containers - 在节点上核对 cgroup 限额(以实际容器为准):例如查看内存限制
cat /sys/fs/cgroup/memory/kubepods/burstable/pod/ /memory.limit_in_bytes
- 查看节点可分配与已分配资源:
- 最佳实践
- 始终为生产负载设置合理的 requests/limits,避免仅设 limits 导致调度偏差或 OOM 风险。
- 结合 HPA/VPA 做弹性与垂直伸缩,配合 Cluster Autoscaler 自动扩缩节点。
- 使用 Goldilocks 等工具基于历史用量给出 requests/limits 建议,并持续观测与调优。
以上就是关于“Kubernetes在Ubuntu上的资源限制怎么设置”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm