Ubuntu Kubernetes资源限制怎么设置
导读:Ubuntu 上 Kubernetes 资源限制设置指南 在 Ubuntu 节点上,Kubernetes 通过为 Pod/容器 设置 requests/limits 来管理 CPU、内存 等资源;调度器依据 requests 选择节点,ku...
Ubuntu 上 Kubernetes 资源限制设置指南
在 Ubuntu 节点上,Kubernetes 通过为 Pod/容器 设置 requests/limits 来管理 CPU、内存 等资源;调度器依据 requests 选择节点,kubelet 与 cgroups 在节点上强制执行 limits。常见单位:CPU 以毫核 1000m=1 核,内存以 Mi/Gi。若只设置 limits 而未设置 requests,多数准入控制器会把该 limits 值同时作为 requests 使用。自 v1.34 起(默认启用),可在 Pod 级 声明资源边界,便于多容器共享与预算控制。
一、容器与 Pod 级配置
- 基本字段与单位
- 在容器上设置:spec.containers[].resources.requests/limits.{ cpu,memory} ;Pod 总请求/限制为各容器之和。
- 单位:cpu:1000m=1 核;memory:Mi/Gi(如 64Mi、128Mi)。
- 最小可用示例(Nginx)
- 建议始终同时配置 requests 与 limits,避免调度偏差与 OOM 风险。
- 示例要点:容器级设置 cpu: “250m”/“500m”、memory: “64Mi”/“128Mi”;如需 Pod 级边界,可在 spec.resources 统一声明(v1.34+)。
- 完整 YAML 示例
- 容器级(通用)
apiVersion: v1 kind: Pod metadata: name: resource-demo spec: containers: - name: app image: nginx:1.14.2 resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m" - Pod 级边界(v1.34+,可选)
apiVersion: v1 kind: Pod metadata: name: pod-level-demo namespace: default spec: resources: requests: cpu: "1" memory: "100Mi" limits: cpu: "1" memory: "200Mi" containers: - name: ctr1 image: nginx resources: requests: cpu: "0.5" memory: "50Mi" limits: cpu: "0.5" memory: "100Mi" - name: ctr2 image: busybox command: ["sleep","inf"] - 调度与运行时行为要点
- 调度只看 requests;CPU limits 为硬性上限(超配会被限流);内存 limits 触发 OOM 终止;未设内存 limits 的 Pod 可能因节点压力被逐出。
- 容器级(通用)
二、命名空间级治理
- ResourceQuota:限制命名空间总资源与对象数量
apiVersion: v1 kind: ResourceQuota metadata: name: team-a-quota namespace: ns-test spec: hard: requests.cpu: "10" requests.memory: "40Gi" limits.cpu: "20" limits.memory: "100Gi" pods: "50" - LimitRange:约束容器/Pod 的默认与取值范围
apiVersion: v1 kind: LimitRange metadata: name: default-limits namespace: ns-test spec: limits: - default: cpu: "200m" memory: "256Mi" defaultRequest: cpu: "100m" memory: "128Mi" type: Container - 作用
- 防止单命名空间资源抢占,统一团队/项目的资源配置基线,降低运维复杂度。
三、进阶设置与注意事项
- QoS 等级与驱逐优先级
- Guaranteed:requests=limits(cpu 与 memory 均成对设置且相等)→ 优先级最高,OOM 最后被 kill。
- Burstable:部分设置或不等 → 中等优先级。
- BestEffort:未设置 requests/limits → 最低优先级,最先被驱逐。
- 临时存储与 emptyDir
- 使用内存介质的 emptyDir 会计入容器内存用量;若未设 emptyDir.sizeLimit,其上限受 Pod 内存 limits 约束;未设内存 limits 时存在耗尽节点内存的风险。
- 巨页 HugePages
- 需节点预先分配;不可超售(requests/limits 必须小于等于节点可用巨页)。
- 扩展资源
- 如 nvidia.com/gpu 等,可在 resources.requests/limits 中声明并使用。
四、验证与排错
- 查看与确认
- 查看 Pod 资源配置与状态:kubectl get pod -o yaml;kubectl describe pod ;kubectl top pod --containers。
- 观察是否发生 OOMKilled(内存超限)或 CPU 限流(CPU 受限但不会被 kill)。
- 快速自测思路
- 内存超限测试:设置容器 memory limit 较小(如 100Mi),运行压测分配超过该值的内存,观察状态为 OOMKilled。
- CPU 限流测试:设置容器 cpu limit(如 1 核),运行能打满 CPU 的进程,使用 top 查看实际使用被限制在 1000m。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Kubernetes资源限制怎么设置
本文地址: https://pptw.com/jishu/771256.html
