k8s容器资源需求与资源限制
在Kubernetes中,我们可以通过为容器定义资源需求和限制来管理容器的资源使用。
- 资源需求(Resource Requests):指容器在调度和运行时需要的最小资源。当定义了资源需求后,Kubernetes会根据该需求进行调度,安排节点资源。如果节点不能满足指定的需求,Pod将不会被调度。资源需求包括:
- CPU:以CPU单位表示,1个单位CPU相对于1颗虚拟CPU(vCPU),或者等于1000个微核心(millicores,单位m)。
- Memory:默认以字节为单位表示,也可以使用日常单位K、M、G、T等。
- 资源限制(Resource Limits):指容器能够使用的最大资源限制。有两个限制:
- CPU:因为CPU是可压缩资源,所以容器进程无法超过该限制。
- Memory:一旦容器使用的内存超过该限制,容器可能会被OOM Killer。
要为容器定义资源需求和限制,可以编辑Pod的YAML文件并为容器指定资源需求和限制。例如:
apiVersion: v1
kind: Pod
metadata:
name: pod-with-resource
spec:
containers:
- name: container1
image: nginx
resources:
requests:
cpu: "0.1"
memory: "64Mi"
limits:
cpu: "0.2"
memory: "128Mi"
在上面的例子中,容器“container1”定义了CPU请求为0.1和Memory请求为64Mi,以及CPU限制为0.2和Memory限制为128Mi。
另外在Kubernetes中,可以通过对Pod定义服务质量类别(Quality of Service, QoS)来为Pod分配资源。服务质量类别有三种:保证(Guaranteed)、最小化(Burstable)和任意(BestEffort)。
-
保证(Guaranteed):该服务质量类别的Pod是一定能获得所需的资源的。意味着Pod的CPU和内存需求被定义且已满足。当使用保证的服务质量类别时,需要为Pod指定CPU和内存资源的需求,并且Pod的资源请求与资源限制应该相等。这可以确保该Pod得到足够多的资源,而不会造成过少或过多的资源调度。
-
最小化(Burstable):该服务质量类别的Pod对资源的需求具有一定的灵活性,可以根据可用资源的情况进行调整。这种类型的Pod可以随着时间的推移、负载消失或增加而调整资源的使用情况。当使用最小化的服务质量类别时,需要为Pod指定CPU或内存资源的需求,但是Pod的资源请求可以小于资源限制或者不做限制。
-
任意(BestEffort):该服务质量类别的Pod不需要任何保证,不需要任何资源限制或资源需求。Pod会尽可能多地使用可用资源,但资源可能不足时也不会发生错误。这种类型的Pod主要用于测试和开发场景。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)