当前位置: 首页 > news >正文

k8s资源管理

k8s资源管理

在 Kubernetes 集群的资源管理中,ResourceQuota、LimitRange 和 QoS 服务质量是三个核心概念。它们从不同层面和角度对资源进行管控,既相互独立又协同工作,共同确保集群资源的合理分配与高效利用,是保障集群稳定运行的重要机制。

ResourceQuota(资源配额)

概念

ResourceQuota 是 Kubernetes 提供的一种命名空间级别的资源总量管控机制,用于为特定命名空间(Namespace)设置资源使用的硬性约束。它不仅能限制命名空间内所有 Pod 对 CPU、内存等计算资源的总使用量,还能对 Pod、Service、ConfigMap、Secret 等 Kubernetes 对象的数量进行限制,防止资源滥用和过度分配。

层级关系与作用范围

  • 层级:作用于命名空间层级,是对整个命名空间的资源总量进行全局性约束,属于宏观层面的资源控制。

  • 作用范围:仅在设置了 ResourceQuota 的命名空间内有效,对其他命名空间无任何影响。其核心作用是在多团队、多项目共享集群资源的场景下,防止某个命名空间过度占用集群资源,保证不同命名空间之间资源分配的公平性,避免因个别命名空间资源耗尽而影响整个集群的稳定性。

配置方法

  1. 创建 YAML 文件(如 resource-quota.yaml):
apiVersion: v1
kind: ResourceQuota
metadata:name: example-quotanamespace: my-namespace  # 指定作用的命名空间
spec:hard:  # 硬性限制条件pods: "10"  # 限制该命名空间内Pod总数不超过10个replicationcontrollers: "5"  # 限制复制控制器数量requests.cpu: "10"  # 所有Pod的CPU请求总量不超过10核requests.memory: 10Gi  # 所有Pod的内存请求总量不超过10Gilimits.cpu: "20"  # 所有Pod的CPU限制总量不超过20核limits.memory: 20Gi  # 所有Pod的内存限制总量不超过20Giconfigmaps: "10"  # 限制ConfigMap数量
  1. 执行命令创建:kubectl apply -f resource-quota.yaml

  2. 验证配置:kubectl get resourcequota -n my-namespace,可查看配额的使用情况和限制值。

LimitRange(限制范围)

概念

LimitRange 是命名空间内针对单个 Pod 或容器的资源精细化管控机制,用于为其设置资源请求(Request)和限制(Limit)的默认值、最小值和最大值。当用户创建 Pod 或容器未指定资源配置时,它会自动填充默认值;若用户指定了资源配置,则会校验其是否在规定的最小和最大范围内,若超出范围则创建会失败。

层级关系与作用范围

  • 层级:作用于命名空间层级,但聚焦于命名空间内单个 Pod 或容器的资源约束,属于微观层面的资源控制。

  • 作用范围:仅在设置了 LimitRange 的命名空间内有效。其主要作用是规范单个 Pod 或容器的资源使用边界,避免单个 workload 过度占用资源而影响同命名空间内其他 workload;同时为资源配置不规范的 Pod 提供合理默认值,减少人为配置失误。

配置方法

  1. 创建 YAML 文件(如 limit-range.yaml):
apiVersion: v1
kind: LimitRange
metadata:name: example-limit-rangenamespace: my-namespace
spec:limits:- type: Container  # 针对容器的限制default:  # 容器未指定limit时的默认值cpu: "1"memory: 1GidefaultRequest:  # 容器未指定request时的默认值cpu: "500m"  # 500毫核memory: 512Mimax:  # 容器资源的最大值cpu: "2"memory: 2Gimin:  # 容器资源的最小值cpu: "200m"memory: 256Mi- type: Pod  # 针对Pod的限制(所有容器资源总和)max:cpu: "4"memory: 4Gi
  1. 执行命令创建:kubectl apply -f limit-range.yaml

  2. 验证配置:kubectl get limitrange -n my-namespace,可查看限制范围的具体规则。

QoS(服务质量)

概念

QoS(Quality of Service)服务质量是 Kubernetes 根据 Pod 的资源请求(Request)和限制(Limit)自动划分的优先级类别,用于在集群资源(CPU、内存)紧张时决定 Pod 的驱逐顺序。它通过资源配置定义 Pod 的重要程度,确保核心业务在资源竞争时优先存活。Kubernetes 定义了三种 QoS 级别:

  • Guaranteed(保证型):Pod 中所有容器的 CPU 和内存的 Request 与 Limit 均相等(且不为空)。这类 Pod 资源需求明确且有保障,在资源紧张时最后被驱逐,适用于核心业务。

  • Burstable(突发型):Pod 中至少有一个容器设置了 Request,但 Request 不等于 Limit(或部分容器未设置)。其资源需求有一定弹性,优先级低于 Guaranteed,在资源紧张时可能被驱逐,但优先于 BestEffort,适用于非核心但需要一定资源保障的业务。

  • BestEffort(尽力而为型):Pod 中所有容器均未设置 Request 和 Limit。这类 Pod 对资源没有保障,在资源紧张时最先被驱逐,适用于低优先级的测试或临时任务。

层级关系与作用范围

  • 层级:作用于Pod 层级,是对单个 Pod 基于资源配置的优先级划分。

  • 作用范围:覆盖集群中所有 Pod,直接影响 Pod 在资源竞争场景下的存活概率。它是 Kubernetes 调度和驱逐机制的重要依据,确保资源优先分配给更重要的业务。

配置方法与验证

QoS 级别由 Pod 中容器的资源 Request 和 Limit 自动决定,无需直接配置,只需正确设置资源参数:

  • Guaranteed 配置示例
apiVersion: v1
kind: Pod
metadata:name: guaranteed-pod
spec:containers:- name: example-containerimage: nginxresources:requests:  # request与limit相等cpu: "1"memory: 1Gilimits:cpu: "1"memory: 1Gi
  • Burstable 配置示例
apiVersion: v1
kind: Pod
metadata:name: burstable-pod
spec:containers:- name: example-containerimage: nginxresources:requests:  # request小于limitcpu: "500m"memory: 512Milimits:cpu: "1"memory: 1Gi
  • BestEffort 配置示例
apiVersion: v1
kind: Pod
metadata:name: best-effort-pod
spec:containers:- name: example-containerimage: nginx  # 未设置任何request和limit
  • 验证 QoS 级别:执行 kubectl describe pod ,在输出的 “QoS Class” 字段可查看该 Pod 的 QoS 级别。

三者的层级关系与协同作用

  • 层级递进:ResourceQuota(命名空间总量)→ LimitRange(命名空间内单个 Pod / 容器)→ QoS(单个 Pod 优先级),形成从宏观到微观、从总量到个体的资源管控链条。

  • 协同逻辑

  1. ResourceQuota 划定命名空间的资源 “总池子”,确保集群资源在不同命名空间间的公平分配;

  2. LimitRange 细化 “总池子” 内单个 Pod / 容器的资源边界,避免个体过度占用;

  3. QoS 基于前两者的资源配置,定义 Pod 优先级,在资源不足时保障核心业务存活。

通过三者的配合,Kubernetes 实现了资源从分配、约束到调度的全流程管理,既保证资源利用效率,又确保集群稳定性和业务可用性。

http://www.dtcms.com/a/329567.html

相关文章:

  • 集成电路学习:什么是CV计算机视觉
  • 加密界的“瑞士军刀“-----VeraCrypt 加密原理与实操
  • 【数据结构】——栈(Stack)的原理与实现
  • iscc2025决赛wp
  • Redis面试精讲 Day 20:Redis大规模部署性能调优
  • MCP协议更新:从HTTP+SSE到Streamable HTTP,大模型通信的进化之路
  • [Oracle数据库] ORACLE的用户维护和权限操作
  • 多模态RAG赛题实战之策略优化--Datawhale AI夏令营
  • javaswing json格式化工具
  • 何解决PyCharm中pip install安装Python报错ModuleNotFoundError: No module named ‘json’问题
  • Day 39: 图像数据与显存
  • C++ stack and queue
  • Python3:使用venv虚拟环境
  • 猫头虎AI分享:Excel MCP,让AI具备操作Excel表格|创建销售数据表、复制工作表、填充数据、写公式、绘制图表、调节颜色、添加透视表、保存为PDF
  • Oracle数据库空间深度回收:从诊断到优化实战指南
  • Codeforces Round 1042 (Div. 3)
  • 友思特方案 | FPGA 加持,友思特图像采集卡高速预处理助力视觉系统运行提速增效
  • 【记录贴】STM32 I2C 控制 OLED 卡死?根源在 SR1 与 SR2 的读取操作
  • ELK开启安全策略
  • @系统管理 - Ansible 补丁管理方案(Windows Linux)
  • 从零开始:用PyTorch实现线性回归模型
  • MySQL的MVCC多版本并发控制
  • 01数据结构-Prim算法
  • 一场名为“默契”的清洁革命
  • Github学生认证
  • 从钢板内部应力视角,重新认识护栏板矫平机
  • Lombok插件介绍及安装(Eclipse)
  • Linux操作系统应用编程——文件IO
  • LCP 17. 速算机器人
  • 车载软件架构 --- MCU刷写擦除相关疑问?