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