k8s~为pod添加节点的资源限制
CPU单位
CPU资源以CPU核心数为单位进行度量的。在Kubernetes中,一个CPU相当于:
1 AWS vCPU
1 GCP Core
1 Azure vCore
一个超线程(在使用超线程的裸金属Intel处理器上)
请求0.5 CPU的容器所保证的CPU核数是请求节点上的1个CPU的一半。你可以用后缀m表示milli。例如
100m CPU
、100millicpu``和0.1 CPU
都是相同的。精度不允许超过1m。
不指定CPU限制
如果没有为容器指定CPU限制,则会出现以下情况之一:
* 容器对它可以使用的CPU资源没有上限。容器可以使用它运行的节点上可用的所有CPU资源。
* 容器在具有默认CPU限制的命名空间中运行,容器会自动分配默认限制。集群管理员可以使用LimitRange指定CPU限制的默认值。
CPU请求和限制的目的
通过配置集群中运行的CPU请求和容器的限制,可以有效地利用集群节点上可用的CPU资源。通过将Pod的CPU请求保持在较低的水平,可以很好地调度Pod。将CPU限制设置为大于CPU请求,你可以完成两件事:
- Pod可以利用CPU资源进行突发活动。
- 在突发活动期间,Pod可以使用的CPU资源数量被限制在某个合理的数量内。
在 Kubernetes 中,可以通过设置 CPU 和内存的限制来控制每个 Pod 或容器的资源使用。这样可以确保资源的合理分配,避免某些应用占用过多资源而影响整个集群的稳定性。
1. 配置 CPU 和内存的 Limit
在 Kubernetes 的 Pod 或 Deployment 定义中,可以通过 resources
字段来设置 CPU 和内存的请求(requests)和限制(limits)。以下是一个示例 YAML 文件:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: my-container
image: my-image:latest
resources:
requests:
memory: 512Mi # 请求的内存量
cpu: 500m # 请求的 CPU 核心数
limits:
memory: 1Gi # 限制的内存量
cpu: 1 # 限制的 CPU 核心数
2. 字段解释
- requests:表示容器启动时所需的最低资源量。Kubernetes 会根据这些请求来调度 Pod。
- limits:表示容器可以使用的最大资源量。如果容器超过了这个限制,Kubernetes 会采取措施,例如限制 CPU 使用或终止容器。
3. 单位说明
-
CPU:
- 可以用整数表示核心数(例如
1
表示一个核心)。 - 也可以用毫核心(m)表示,如
500m
表示半个核心。
- 可以用整数表示核心数(例如
-
Memory:
- 可以使用字节(B)、千字节(Ki)、兆字节(Mi)、吉字节(Gi)等单位。例如:
512Mi
表示 512 兆字节。
- 可以使用字节(B)、千字节(Ki)、兆字节(Mi)、吉字节(Gi)等单位。例如:
4. 示例应用
以下是一个更复杂的 Deployment 示例,包含多个容器的资源配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: app-container
image: my-app-image:latest
resources:
requests:
memory: 256Mi
cpu: 250m
limits:
memory: 512Mi
cpu: 1
- name: sidecar-container
image: my-sidecar-image:latest
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "500m"
5. 注意事项
- 合理配置:根据应用的实际需求合理配置资源请求和限制,避免过高或过低的设置。
- 监控与调整:使用监控工具(如 Prometheus、Grafana)观察 Pod 的资源使用情况,并根据需要进行调整。
- 测试与验证:在生产环境前进行充分的测试,以确保配置能够满足性能需求。
通过以上配置,你可以有效管理 Kubernetes 中的 CPU 和内存资源,确保应用的稳定运行。
合集:
kubernetes
分类:
kubernetes
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体
2019-10-31 java设计模式~装饰器模式
2019-10-31 java设计模式~单例
2013-10-31 DDD~WCF做中间件,实现多个项目的缓存共享
2013-10-31 爱上MVC3~在控制器或Action上动态设定模板页(Layout)
2012-10-31 EF架构~为EF DbContext生成的实体添加注释(T4模板应用)
2011-10-31 DataContext数据在F5刷新频繁时,出现数据读取错误(MVC LINQ)