资源的配额管理功能主要用于对集群中可用的资源进行分配和限制。为了开启配额管理,需要设置 kube-apiserver 的 –admission_control 参数,使之家在这两个准入控制器。
|
|
指定容器配额
对指定容器实施配额管理非常简单,只要在 Pod 或 ReplicationController 的定义文件中设定 resources 属性即可为某个容器指定配额。目前容器支持 CPU 和 Memory 两类资源的配额限制。
在下面这个 RC 定义文件中增加了 redis-master 的资源配额声明:
|
|
以上配置表示,系统将对名为 master 的容器限制 CPU 为 0.5(也可以写为500m),可用内存限制为 128MiB字节。
1 KB(kilobyte) = 1000 bytes = 8000 bits
1 KiB(kibibyte) = 2^10 bytes = 1024 bytes = 8192 bits
全局默认配额
除了可以直接在容器(或 RC)的定义文件中给指定的容器增加资源配额参数,我们还可以通过创建 LimitRange 对象来定义一个全局默认配额模版。这个默认配额模版会加载到集群中的每个 Pod 及容器上,这样就不用为每个 Pod 和容器重复设置了。
我们定义一个名为 limit-range-1 的 LimitRange:
|
|
上述设置表明:
- 任意 Pod 内所有容器的 CPU 使用限制在 0.25~2;
- 任意 Pod 内所有容器的内存使用限制在 32Mi~1Gi;
- 任意容器的 CPU 使用限制在 0.25~2,默认值为 0.25;
- 任意容器的内存使用限制在 32Mi~1Gi,默认值为 64Mi。
多租户配额管理
多租户在 Kubernetes 中以 Namespace 来体现,这里的多租户可以是多个租户、多个业务系统或者相互隔离的多种作业环境。一个集群中的资源总是有限的,当这个集群被多个租户的应用同时使用时,为了更好地使用这种有限的共有资源,我们需要将资源配额的管理单元提升到租户级别,只需要在不同租户对应的 Namespace 上加载对应的 ResourceQuota 配置即可达到目的。
假设我们集群拥有的总资源为:CPU 共有 128core;内存总量为 1024GiB;有两个租户,分别是开发组和测试组,开发组的资源配额为 32core CPU 及 256GiB 内存,测试组的资源配额为 96core CPU 及 768GiB 内存。
首先,创建开发组对应的命名空间:
|
|
接着,创建用于限定开发组的 ResourceQuota 对象,注意 metadata.namespace 属性被设定为开发组的命名空间:
|
|
测试组相应的 namespace 与 ResourceQuota 同上,略。