|
Kubernetes对资源的限制实际上是通过cgroup来控制的,cgroup是容器的一组用来控制内核如何运行进程的相关属性集合,针对内存、CPU各种设备都有对应的cgroup。
默认情况下,Pod运行没有CPU和内存的限制,这就意味着系统中的任何pod将能够像执行该pod所在的节点一样,消耗足够多的CPU和内存,一般会针对某些应用的Pod资源进行资源限制,这个资源限制是通过resources的limits来实现的。
注:以下只是在yaml文件中进行资源限制的一个片段,并不是完整的yaml文件!
1)针对pod的资源限制[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: 260Mirequests: 要分配的资源,limits为最高请求的资源值。可以简单的理解为初始值和最大值。
2)基于名称空间的资源限制(可以具体制定限制某一个名称空间)1)计算资源配额[root@master limit]# vim compute-resource.yaml apiVersion: v1kind: ResourceQuotametadata: name: compute-resourcesspec: hard: ?pods: "20" ????#所有pod数量不可以超过20个 ?requests.cpu: "20" ????#初始请求的CPU不可以超过20m ?requests.memory: 100Gi ?#初始请求的内存不可以超过100G ?limits.cpu: "40" ?????#CPU的硬限制 ?limits.memory: 200Gi ???#内存的硬限制2)资源对象数量配额限制[root@master limit]# vim object-counts.yaml apiVersion: v1kind: ResourceQuotametadata: name: object-countsspec: hard: ?configmaps: "10" ??#最多可以创建10个configmap ?persistentvolumeclaims: "4" ??#最多可以创建4个PVC ?replicationcontrollers: "20" ??????#最多可以创建20个RC资源对象 ?secrets: "10" ?????????#最多可以创建10个secrets ???service.loadbalancers: "2" ??#最多可以创建2个svc3)配置CPU和内存的limitRange[root@master limit]# vim limitRange.yaml apiVersion: v1kind: LimitRangemetadata: name: mem-limit-rangespec: limits: - default: ??????memory: 50Gi ?#硬限制 ??cpu: 5 ??#硬限制 ?defaultRequest: ???#初始请求 ??memory: 1Gi ??cpu: 1 ?type: Container ???#限制对象为容器default 即 limit的值,defaultRequest 即 request的值。 |
|