Kubernetes对资源的限制其实是经过cgroup来控制的,cgroup是容器的一组用来控制内核如何运行进程的相关属性集合,针对内存、CPU各类设备都有对应的cgroup。vim
默认状况下,Pod运行没有CPU和内存的限制,这就意味着系统中的任何pod将可以像执行该pod所在的节点同样,消耗足够多的CPU和内存,通常会针对某些应用的Pod资源进行资源限制,这个资源限制是经过resources的limits来实现的。api
注:如下只是在yaml文件中进行资源限制的一个片断,并非完整的yaml文件!ide
[root@master limit]# vim cgroup-pod.yaml spec: containers: - name: xxx image: xxx ports: - protocol: TCP containerPort: 80 resources: limits: #硬限制 cpu: "4" memory: 2Gi requests: #运行pod时请求的资源数量 cpu: 260m memory: 260Mi
requests: 要分配的资源,limits为最高请求的资源值。能够简单的理解为初始值和最大值。code
[root@master limit]# vim compute-resource.yaml apiVersion: v1 kind: ResourceQuota metadata: name: compute-resources spec: hard: pods: "20" #全部pod数量不能够超过20个 requests.cpu: "20" #初始请求的CPU不能够超过20m requests.memory: 100Gi #初始请求的内存不能够超过100G limits.cpu: "40" #CPU的硬限制 limits.memory: 200Gi #内存的硬限制
[root@master limit]# vim object-counts.yaml apiVersion: v1 kind: ResourceQuota metadata: name: object-counts spec: hard: configmaps: "10" #最多能够建立10个configmap persistentvolumeclaims: "4" #最多能够建立4个PVC replicationcontrollers: "20" #最多能够建立20个RC资源对象 secrets: "10" #最多能够建立10个secrets service.loadbalancers: "2" #最多能够建立2个svc
[root@master limit]# vim limitRange.yaml apiVersion: v1 kind: LimitRange metadata: name: mem-limit-range spec: limits: - default: memory: 50Gi #硬限制 cpu: 5 #硬限制 defaultRequest: #初始请求 memory: 1Gi cpu: 1 type: Container #限制对象为容器
default 即 limit的值,defaultRequest 即 request的值。对象
———————— 本文至此结束,感谢阅读 ————————进程