首页主机资讯Ubuntu Kubernetes资源限制怎么设置

Ubuntu Kubernetes资源限制怎么设置

时间2025-12-13 02:47:04发布访客分类主机资讯浏览1260
导读:Ubuntu 上 Kubernetes 资源限制设置指南 在 Ubuntu 节点上,Kubernetes 通过为 Pod/容器 设置 requests/limits 来管理 CPU、内存 等资源;调度器依据 requests 选择节点,ku...

Ubuntu 上 Kubernetes 资源限制设置指南

Ubuntu 节点上,Kubernetes 通过为 Pod/容器 设置 requests/limits 来管理 CPU、内存 等资源;调度器依据 requests 选择节点,kubeletcgroups 在节点上强制执行 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"]
      
    • 调度与运行时行为要点
      • 调度只看 requestsCPU 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
Debian如何解决Node.js版本冲突 Node.js在Debian上如何实现高可用

游客 回复需填写必要信息