03
2018
04

kubernetes--资源管理

概念

默认情况下,kubernetes不会限制pod等资源对象使用系统资源,单个pod或者容器可以无限制使用系统资源。

kubernetes的资源管理分为资源请求(request)和资源限制(limit),资源请求能够保证Pod有足够的资源来运行,而资源限制则是防止某个Pod无限制地使用资源,导致其他Pod崩溃。kubernetes1.5之前的版本只支持CPU和内存这两种资源类型。

三种方式

kubernetes的资源管理有3种方式,分别是单个资源对象的资源管理(以下简称resource)、limitranges、resourcequotas。resource和limitranges可以单独使用,也可以同时使用,而resourcequotas必须配合resource或者limitranges使用。limitranges和resourcequotas是针对于namespace的。

单个资源对象的资源管理

resource是针对资源对象中单个容器进行资源管理,在创建/变更资源对象时指定的。

详情请见https://www.lianglong.org/article/304.html

limitranges

LimitRange(简称limits)基于namespace的资源管理,包括pod和container的最小、最大和default、defaultrequests等。一旦创建limits,以后创建资源时,K8S将该limits资源限制条件默认&强制给pod,创建后发现不符合规则,将暂停创建pod。

详情请见https://www.lianglong.org/article/306.html

resourcequotas

Resource Quotas(资源配额,简称quota)是为了namespace进行资源配额,限制资源使用的一种策略。对于资源管理来说,quota是管理该namespace下所有资源对象的CPU、内存的limits和request的总量,如果超过该限制,资源对象无法创建。

详情请见https://www.lianglong.org/article/308.html

配置规则

1、每个namespace有且只有一个limits和quota

2、limits的同种类型(CPU或者memory)配置规则:

       每容器(type: container):max>=default>=defaultRequest>min

       每pod(type: pod):max>=min

       pod和容器对应关系:容器max*容器数<=pod max;容器min*容器数<=pod min

 3、在同一个namespace下,limits和单个资源对象的资源管理(resource)同时使用,同种类型(CPU或者memory)配置规则:resource的单个资源配置范围不能超过limit的容器范围,总和不能超过limit的pod范围。

      具体如下:

              resource的request的总和(如有多个容器,所有的)>= limits的容器的defaultrequets*容器数 >= limits的pod的min

              resource的limit的总和(如有多个容器,所有的)<= limits的容器的requets*容器数 <= limits的pod的max

       配置正确,kubernetes将按照resource进行资源管理,如果配置错误,无法创建对象。

4、quota需要配合limits或者resource,如果没有配置limits时,每次创建对象时,必须配置resource,否则无法创建对象

5、该namespace下,所有pod/容器的CPU或者memory的limit、request的任意一种总量大于quota相对应的值后,无法分配更多的系统资源,无法创建新的资源对象,无法扩容RC、RS等。

使用心得

1、资源管理对象单一性

              尽量使用limits针对容器(更好)或者pod的资源管理,尽量不同时针对容器和pod,在一pod多容器情况下,即使有充足系统资源,创建资源对象失败几率高。

              在limits使用的namespace下,最好不要在创建资源时使用resource。

2、资源管理类型单一性

               使用资源限制(limit或者max)或者资源请求(request或者min)

               同时使用时,最好保持“1、资源管理对象单一性”

3、服务部署单一性

              由于limits会针对该namespace下的所有pod或者容器,所以在该namespace下尽量部署资源需求相同的服务

 4、合理配置

本文基于kubernetes 1.5.2版本编写

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。