目录
一、Pod资源限制
Kubernetes 对资源的限制实际上是通过 CGROUP 来控制的,CGROUP 是容器的一组用来控制内核如果运行进程的相关属性集合。针对内存、CPU、和各种设备都有对应的 CGROUP。
默认情况下,Pod 运行没有 CPU 和内存的限额。这意味着系统中任何 Pod 将能够执行该节点所有的运算资源,消耗足够多的 CPU 和内存。一般会针对某些应用的 Pod 资源进行资源限制,这个资源限制是通过 resources 的 requests 和 limits 来实现
spec:
containers:
- image: nginx:latest
name: auth
resources:
limits:
cpu: "4"
memory: 2Gi
requests:
cpu: 250m
memory: 250Mi
#requests 要分配的资源,limits 为最高请求的资源,可以理解为初始值和最大值
二、名称空间资源限制
1.计算资源配额
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-resources
namespace: spark-cluster
spec: #期望
hard: #硬件
requests.cpu: "20" #硬件类型:requests.cpu,20个核心
requests.memory: 100Gi
limits.cpu: "40"
limits.memory: 200Gi
2.配置对象数量配额限制
apiVersion: v1
kind: ResourceQuota
metadata:
name: object-counts
namespace: spark-cluster
spec:
hard:
pods: "20"
configmaps: "10"
persistentvolumeclaims: "4"
replicationcontrollers: "20"
secrets: "10"
services: "10"
services.loadbalancers: "2"
3.配置 CPU 和内存 limitrange
apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
namespace: example
spec:
limits:
- default: # 默认限制值
memory: 512Mi
cpu: 2
defaultRequest: # 默认请求值(初始值)
memory: 256Mi
cpu: 0.5
max: # 最大的资源限制
memory: 800Mi
cpu: 3
min: # 最小限制
memory: 100Mi
cpu: 0.3
maxLimitRequestRatio: # 超售值
memory: 2
cpu: 2
type: Container # Container / Pod / PersistentVolumeClaim
三、资源限制实验
apiVersion: v1
kind: ResourceQuota
metadata:
name: resourcequota
namespace: default
spec:
hard:
pods: "5"
kubectl apply -f resource.yaml
#default名称空间下,只允许有5个pod
kubectl get ResourceQuota -n default
kubectl create deployment dev-deployment --image=nginx:latest --replicas=20
kubectl get deploy
kubectl get pod