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

K8s资源管理:高效管控CPU与内存

在 Kubernetes(k8s)中,资源管理是确保容器化应用高效、稳定运行的核心机制,主要通过对 CPU、内存等计算资源的分配、限制和调度进行管控,避免资源争抢、节点过载或资源浪费。

一、核心概念:资源请求(Requests)与资源限制(Limits)

Kubernetes 对容器的资源管理通过 resources 字段定义,包含两个关键配置:

1. 资源请求(Requests)
  • 定义:容器运行时最低需求的资源量(如 CPU、内存),Kubernetes 调度器会根据此值将 Pod 调度到有足够空闲资源的节点上。
  • 作用:确保 Pod 能获得运行所需的最小资源,避免被调度到资源不足的节点而无法启动。
  • 示例cpu: 100m(100 毫核,即 0.1 CPU 核心)、memory: 128Mi(128 兆字节)。
2. 资源限制(Limits)
  • 定义:容器运行时允许使用的最大资源量,防止单个容器过度占用资源,影响同一节点上的其他容器。
  • 作用:避免资源滥用导致节点崩溃(如内存泄漏导致节点 OOM 杀死进程)。
  • 示例cpu: 500m(最多使用 0.5 CPU 核心)、memory: 512Mi(最多使用 512MB 内存)。

二、配置示例:为容器设置资源请求与限制

在 Deployment、Pod 等资源的 YAML 配置中,通过 containers.resources 字段定义:

apiVersion: v1
kind: Pod
metadata:name: resource-demo
spec:containers:- name: resource-demo-containerimage: nginxresources:requests:  # 资源请求(调度依据)cpu: "100m"    # 最低需要 0.1 CPU 核心memory: "128Mi"  # 最低需要 128MB 内存limits:    # 资源限制(上限)cpu: "500m"    # 最多使用 0.5 CPU 核心memory: "512Mi"  # 最多使用 512MB 内存

三、资源类型与单位

1. CPU 资源
  • 单位
    • m(毫核):1 核 = 1000m,例如 500m 表示 0.5 核。
    • 直接写数字:如 1 表示 1 核。
  • 特点:CPU 是 “可压缩资源”,当容器使用超过限制时,会被 “限流”(throttled),但不会被杀死。
2. 内存资源
  • 单位
    • Mi(Mebibyte,2^20 字节,约 1.048MB)、Gi(Gibibyte,2^30 字节)。
    • M(Megabyte,10^6 字节)、G(Gigabyte,10^9 字节)(不推荐,易混淆)。
  • 特点:内存是 “不可压缩资源”,当容器使用超过限制时,会被 OOM(Out Of Memory)杀死并重启(取决于重启策略)。

四、资源管理策略

1. 保证 QoS(服务质量等级)

Kubernetes 根据资源配置将 Pod 分为 3 类 QoS 等级,影响节点资源不足时的驱逐策略:

  • Guaranteed(保证级)
    • 所有容器的 requests 与 limits 相等(且不为 0)。
    • 优先级最高,节点资源不足时最后被驱逐。
  • Burstable(可突发级)
    • 至少一个容器设置了 requests 但 requests < limits
    • 优先级中等,资源不足时可能被驱逐(早于 Guaranteed)。
  • BestEffort(尽力而为级)
    • 未设置任何 requests 或 limits
    • 优先级最低,资源不足时最先被驱逐。
2. 命名空间资源配额(Resource Quota)

通过 ResourceQuota 资源限制整个命名空间的资源使用上限,防止单个命名空间占用集群过多资源:

apiVersion: v1
kind: ResourceQuota
metadata:name: namespace-quotanamespace: my-namespace
spec:hard:pods: "10"  # 最多创建 10 个 Podrequests.cpu: "2"  # 所有 Pod 的 CPU 请求总和 ≤ 2 核requests.memory: "2Gi"  # 所有 Pod 的内存请求总和 ≤ 2Gilimits.cpu: "4"  # 所有 Pod 的 CPU 限制总和 ≤ 4 核limits.memory: "4Gi"  # 所有 Pod 的内存限制总和 ≤ 4Gi
3. 限制范围(LimitRange)

通过 LimitRange 为命名空间内未指定资源配置的容器设置默认的 requests 和 limits,避免用户忘记配置资源:

apiVersion: v1
kind: LimitRange
metadata:name: default-resourcesnamespace: my-namespace
spec:limits:- default:  # 默认的 limits(若容器未指定则生效)cpu: "500m"memory: "512Mi"defaultRequest:  # 默认的 requests(若容器未指定则生效)cpu: "100m"memory: "128Mi"type: Container  # 作用于容器

五、资源监控与调优

  1. 监控工具
    • Metrics Server:提供基础的 CPU / 内存指标(kubectl top pod 命令依赖它)。
    • Prometheus + Grafana:高级监控,可自定义资源使用仪表盘。
  2. 调优原则
    • 避免 requests 过高:导致资源闲置,调度效率下降。
    • 避免 limits 过低:导致应用因资源不足崩溃(如内存限制低于实际需求)。
    • 对核心服务使用 Guaranteed 级 QoS,确保稳定性。

总结

Kubernetes 的资源管理通过 “请求 - 限制” 机制、QoS 分级、命名空间配额等功能,实现了对容器资源的精细化管控。合理配置资源不仅能避免资源争抢和节点故障,还能提高集群整体的资源利用率,是保障应用稳定运行的关键实践。

http://www.xdnf.cn/news/20143.html

相关文章:

  • React学习之路永无止境:下一步,去向何方?
  • Jmeter基础教程详解
  • STM32H750 RTC介绍及应用
  • 国产GEO工具哪家强?巨推集团、SEO研究协会网、业界科技三强对比
  • 用C++实现日期类
  • upload-labs通关笔记-第17关文件上传关卡之二次渲染jpg格式
  • 关于如何在PostgreSQL中调整数据库参数和配置的综合指南
  • Vue基础知识-脚手架开发-子传父(props回调函数实现和自定义事件实现)
  • Win11 解决访问网站525 问题 .
  • 【RK3576】【Android14】如何在Android kernel-6.1 的版本中添加一个ko驱动并编译出来?
  • Django 常用功能完全指南:从核心基础到高级实战
  • [光学原理与应用-401]:设计 - 深紫外皮秒脉冲激光器 - 元件 - 布拉格衍射在深紫外皮秒声光调制器(AOM)中的核心作用与系统实现
  • 小程序:12亿用户的入口,企业数字化的先锋军
  • Linux编程——网络编程(UDP)
  • 计算机网络模型入门指南:分层原理与各层作用
  • 对接旅游行业安全需求:旅游安全急救实训室的功能构建与育人目标
  • 网络安全初级-渗透测试
  • 用AI做TikTok影视解说,全流程全自动成片,不懂外语也能做全球矩阵!
  • 办公任务分发项目 laravel vue mysql 第一章:核心功能构建 API
  • 系统越拆越乱?你可能误解了微服务的本质!
  • 【Linux系统】线程同步
  • 正则表达式与转义符的区别。注意输入的东西经过了一次转义,一次正则表达式。\\转义是单斜杠\\在正则表达式也是单斜杠所以\\\\经过两道门才是字符单斜杠
  • MongoDB Change Streams:实时监听数据变化的实战场景
  • clickhouse迁移工具clickhouse-copier
  • Python EXCEL 小技巧:最快重新排列dataframe函数
  • 工业机器人标杆的数字化突围,珞石机器人如何以CRM实现业务重塑
  • 技术视界 | 跨域机器人通信与智能系统:打破壁垒的开源探索
  • 【Linux】环境变量与程序地址空间详解
  • ansible-角色
  • MySQL知识