以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~
资源限制
1、基本介绍
Kubernetes 是一个完全以资源为中心的系统,资源限制是通过 Cgroups 等控制 Pod 使用节点资源(CPU、内存、存储)的一种机制,对于确保 Kubernetes 集群运行的稳定、高效至关重要。通过合理配置资源限制,可以避免资源争用和过载,同时提高应用程序的可靠性和性能。
资源限制的具体概念有:
2、工作原理
apiVersion: apps/v1
kind: Deployment
metadata:
nanme: demo-deployment
spec:
...
spec:
containers:
...
resources:
limits:
cpu: 1000m
memory: 1Gi
ephemeral-storage: 10Gi
requests:
cpu: 100m
memory: 100Mi
ephemeral-storage: 1Gi
🔔 说明1:如果没有设置 requests,则其值与 limits 的值相同
🔔 说明2:如果没有设置 limits, 则其值默认为 0,即没有限制
cpu:'1'=1c=1000m
memory:单位 k/Mi/Gi;无单位是字节,1000=1k
ephemeral-storage:单位 k/Mi/Gi,定义临时存储的需求和限制
# 定义资源配额对象
# resourcequota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: quota-demo
spec:
hard:
requests.cpu: 1000m
requests.memory: 1000Mi
limits.cpu: 4000m
limits.memory: 8000Mi
requests.storage: "1Gi"
persistentvolumeclaims: "2"
# 创建对象
kubectl apply -f resourcequota.yaml
# 查看对象
kubectl get resourcequotas
NAME AGE REQUEST LIMIT
quota-demo 4m5s persistentvolumeclaims: 15/2, requests.cpu: 3050m/1, requests.memory: 12912Mi/1000Mi, requests.storage: 1316Gi/1Gi limits.cpu: 63700m/4, limits.memory: 148200Mi/8000Mi
# 定义 LimitRange 对象
# limitrange.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: demo-limit-range
spec:
limits:
- type: Container
default:
cpu: 500m
memory: 1000Mi
defaultRequest:
cpu: 100m
memory: 200Mi
# 创建对象
kubectl apply -f limitrange.yaml
# 查看对象详情
kubectl describe limitranges
Name: demo-limit-range
Namespace: lanhuapp
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Container cpu - - 100m 500m -
Container memory - - 200Mi 1000Mi -
服务质量等级
服务质量等级(Qos,即 Quality Of Service)用于为不同 Pod 提供不同等级的资源供应保障。
服务质量等级分为以下三种:
需要长时间以稳定状态运行的 Pod,可以配置为 Guaranteed 级别,以确保节点资源不足时 Pod 保持稳定运行而不会被驱逐,而其它 pod 则可以配置为 Burstable 甚至 Best-Effort 级别