在K8S中,Kubernets资源限制是如何配置的,是否根据Qos?

在 Kubernetes 中,资源限制(针对 CPU 和内存)通过容器的 resources 字段配置,主要包括 requests(资源请求)和 limits(资源限制)。而 QoS(服务质量等级,Quality of Service) 是 Kubernetes 根据 Pod 中容器的 requestslimits 配置自动划分的类别,用于在资源紧张时决定 Pod 的调度优先级和驱逐策略。

一、资源限制的配置方式

资源限制通过 Pod 规格中容器的 resources 字段定义,支持对 CPU内存 两种资源进行配置,核心参数为 requestslimits

1. 关键参数说明

  • requests:容器运行所需的 最小资源量,Kubernetes 调度器(kube-scheduler)会确保节点有足够的空闲资源满足 requests 后,才会将 Pod 调度到该节点。

    • CPU 单位:核心(cores),支持小数(如 0.5 表示 500m,即 0.5 核)。
    • 内存单位:字节(如 128Mi1Gi,1Mi = 1024×1024 字节)。
  • limits:容器允许使用的 最大资源量,Kubernetes 通过 cgroups 强制执行此限制。

    • 若容器内存使用超过 limits,会被 OOM(内存溢出)杀死(触发 OOMKilled 事件)。
    • 若 CPU 使用超过 limits,会被限流(throttled),但不会被杀死。

2. 配置示例

apiVersion: v1
kind: Pod
metadata:
  name: resource-demo
spec:
  containers:
  - name: resource-demo-container
    image: nginx
    resources:
      requests:  # 最小资源请求
        cpu: "100m"    # 100 毫核(0.1 核)
        memory: "64Mi" # 64MB
      limits:     # 最大资源限制
        cpu: "500m"    # 最多使用 0.5 核
        memory: "256Mi"# 最多使用 256MB
  • 若未配置 requests,默认与 limits 相等(若 limits 存在);若两者都未配置,则不做资源请求和限制。
  • 每个容器需单独配置资源(Pod 级别的资源配置由所有容器的配置汇总决定)。

二、QoS 分类及与资源配置的关系

Kubernetes 根据 Pod 中所有容器的 requestslimits 配置,自动将 Pod 划分为 3 类 QoS 等级,用于在节点资源不足时决定 Pod 的处理优先级(驱逐或保留)。

1. Guaranteed(保证级)

  • 触发条件:Pod 中 所有容器CPU 和内存 都设置了 requestslimits,且 requestslimits 相等。
    示例:
    resources:
      requests:
        cpu: "500m"
        memory: "1Gi"
      limits:
        cpu: "500m"  # 与 requests 相等
        memory: "1Gi" # 与 requests 相等
    
  • 特性:资源优先级最高,节点资源不足时最后被驱逐,适合核心服务(如数据库、关键 API)。

2. Burstable(突发级)

  • 触发条件:Pod 中 至少一个容器 设置了 requests(CPU 或内存),但不满足 Guaranteed 的条件(即 requestslimits 不相等,或部分资源未设置)。
    示例:
    # 仅设置 requests,未设置 limits
    resources:
      requests:
        cpu: "100m"
    
    # requests 与 limits 不相等
    resources:
      requests:
        cpu: "100m"
      limits:
        cpu: "500m"  # 大于 requests
    
  • 特性:资源优先级中等,节点资源不足时,会在 BestEffort 之后、Guaranteed 之前被驱逐,适合可容忍短暂中断的服务(如非核心业务逻辑)。

3. BestEffort(尽力而为级)

  • 触发条件:Pod 中 所有容器 均未设置 requestslimits(完全不限制资源)。
    示例:
    resources: {}  # 无任何配置
    
  • 特性:资源优先级最低,节点资源不足时最先被驱逐,适合非关键服务(如日志采集、临时任务)。

三、QoS 的核心作用

QoS 的核心目的是在节点资源(尤其是内存)紧张时,指导 kubelet 进行 Pod 驱逐,确保集群稳定性:

  • 驱逐顺序:BestEffortBurstable(资源使用超过 requests 的)→ Burstable(资源使用未超过 requests 的)→ Guaranteed(几乎不被驱逐,除非节点内存耗尽)。
  • 资源充足时,QoS 不影响 Pod 运行;资源紧张时,QoS 决定“牺牲”哪些 Pod 以保证核心服务可用。

总结

  1. 资源限制配置:通过容器的 resources.requests(最小需求)和 resources.limits(最大上限)定义,控制 CPU 和内存使用。
  2. QoS 与资源配置的关系:QoS 是 Kubernetes 根据资源配置自动划分的等级(GuaranteedBurstableBestEffort),无需手动指定。
  3. 实际意义:合理配置资源限制可避免单个 Pod 滥用资源,而 QoS 确保资源紧张时优先保护核心服务,是 Kubernetes 资源管理的核心机制。
posted @ 2025-08-07 09:15  天道酬勤zjh  阅读(30)  评论(0)    收藏  举报