k8s pod “cpu和内存“ 资源限制

文章介绍了Kubernetes中Pod的资源限制概念,包括requests和limits的用途,以及它们如何影响CPU和内存的分配。requests用于调度阶段,保证容器的基础需求,而limits则设定资源使用的上限。当内存超过limit时,会触发OOM机制;CPU超过limit则会被限制但不会被杀死。文章还提到了dockerrun命令中与CPU限制相关的选项,如--cpu-shares,--cpu-period和--cpu-quota。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载用于收藏学习:原文

Pod资源限制

为了保证充分利用集群资源,且确保重要容器在运行周期内能够分配到足够的资源稳定运行,因此平台需要具备
Pod的资源限制的能力。 对于一个pod来说,资源最基础的2个的指标就是:CPU和内存。
Kubernetes提供了个采用requests和limits 两种类型参数对资源进行预分配和使用限制。

requests:

  1. 容器使用的最小资源需求,作用于schedule阶段,作为容器调度时资源分配的判断依赖
  2. 只有当前节点上可分配的资源量 >= request 时才允许将容器调度到该节点
  3. request参数不限制容器的最大可使用资源
  4. requests.cpu被转成docker的–cpu-shares参数,与cgroup cpu.shares功能相同 (无论宿主机有多少个cpu或者内核,–cpu-shares选项都会按照比例分配cpu资源)
  5. requests.memory没有对应的docker参数,仅作为k8s调度依据

limits:

  1. 容器能使用资源的最大值
  2. 设置为0表示对使用的资源不做限制, 可无限的使用
  3. 当pod 内存超过limit时,会被oom
  4. 当cpu超过limit时,不会被kill,但是会限制不超过limit值
  5. limits.cpu会被转换成docker的–cpu-quota参数。与cgroup cpu.cfs_quota_us功能相同
  6. limits.memory会被转换成docker的–memory参数。用来限制容器使用的最大内存

对于 CPU,我们知道计算机里 CPU 的资源是按 “时间片”的方式来进行分配的,系统里的每一个操作都需要 CPU 的处理,所以,哪个任务要是申请的 CPU 时间片越多,那么它得到的 CPU 资源就越多。然后还需要了解下 CGroup 里面对于 CPU 资源的单位换算:
1 CPU = 1000 millicpu(1 Core = 1000m)
这里的 m 就是毫、毫核的意思,Kubernetes 集群中的每一个节点可以通过操作系统的命令来确认本节点的 CPU 内核数量,然后将这个数量乘以1000,得到的就是节点总 CPU 总毫数。比如一个节点有四核,那么该节点的 CPU 总毫量为 4000m。

docker run命令和 CPU 限制相关的所有选项如下:

选项描述
–cpuset-cpus=“”允许使用的 CPU 集,值可以为 0-3,0,1
-c,–cpu-shares=0CPU 共享权值(相对权重)
cpu-period=0限制 CPU CFS 的周期,范围从 100ms~1s,即[1000, 1000000]
–cpu-quota=0限制 CPU CFS 配额,必须不小于1ms,即 >= 1000,绝对限制
docker run -it --cpu-period=50000 --cpu-quota=25000 ubuntu:16.04 /bin/bash

> 将 CFS 调度的周期设为 50000,将容器在每个周期内的 CPU 配额设置为 25000,表示该容器每 50ms 可以得到 50% 的 CPU 运行时间。
注意:若内存使用超出限制,会引发系统的OOM机制,因CPU是可压缩资源,不会引发Pod退出或重建

————————————————
版权声明:本文为优快云博主「凤舞飘伶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/woshaguayi/article/details/129387686

### 使用Prometheus监控Kubernetes中的CPU内存并计算资源限制 #### 配置Prometheus以监控特定命名空间内的Pods 为了实现对特定命名空间下的Pod进行CPU内存使用的监控,可以在`prometheus.yml`文件中定义相应的job来抓取这些数据。例如: ```yaml scrape_configs: - job_name: 'kubernetes-pods' kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_namespace] action: keep regex: default|kube-system # 只保留defaultkube-system两个命名空间的数据 ``` 此配置会告诉Prometheus仅收集来自`default``kube-system`这两个命名空间下pods的指标信息[^4]。 #### 查询CPU内存使用情况 一旦Prometheus开始正常工作并与Kubernetes集成之后,可以利用PrometheuQL查询语句获取所需的信息。对于查看某个容器在过去一段时间内的平均CPU利用率(单位为core),可采用如下表达式: ```promql rate(container_cpu_usage_seconds_total{container!="",image!=""}[5m]) ``` 而要获得同一时间段内该容器所消耗的最大RAM量,则应执行下面这条命令: ```promql max_over_time(container_memory_working_set_bytes{container!="",image!=""}[5m]) ``` 以上两条指令均需替换其中的大括号部分以匹配实际环境中待监测的目标对象名称、标签或其他属性条件[^1]。 #### 计算合理的资源请求与限制值 当掌握了各个应用组件的历史性能表现后,便可以根据业务需求设定适当的服务级别目标(SLO),进而推导出最优资源配置方案。通常建议预留一定比例的安全边际作为缓冲区以防突发流量冲击造成系统过载;同时也要注意避免过度分配而导致硬件成本浪费。一般而言,长期负载峰值加上约20%-30%余量即是一个较为理想的初始估算范围。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值