所在位置 > 新闻中心 > 新闻详情

使用Kubeunetes管理资源

2017-11-2

导读:
了解如何使用Kubernetes集群来控制和执行诸如负载均衡计数、CPU之类的组件的资源配额和消耗。

如果HAL不能解锁pod,那么用户在大型的Kubernetes群集中运行就可能遇到问题。这一系列问题可以通过更精确的控制和资源利用来得到解决或缓和,这也是Kubernetes配额发挥作用的地方。

通过对每个命名空间应用配额,特别是当开发人员和团队被允许管理自己的pod或以特别的方式创建新服务时,可以控制和减少自动缩放集群中的基础设施成本。通过为每个命名空间定义和配额来避免资源匮乏,进而控制pod的资源消耗。

在新的Kubernetes集群中,通常看到两个“命名空间”的资源,叫做“kube-system”和“default”。“kube-system”命名空间会根据安装包含系统pod,外加群集的核心组件,如kube-apiserver,etcd,kube-controller-manager,kube-scheduler,dashboard,kube-dns等。

在“默认”命名空间中,可以找到能进行默认调度的pod(如果在pod 单中未指定另一个命名空间)。通过为每个团队创建一系列开发命名空间,有效地将Kubernetes集群的控制权分配给其他团队,团队可以通过自定义配额来控制自身在开发/测试环境中的资源消耗,使得所有程序都在同一个集群中运行。

要应用配额,就需要定义一个ResourceQuota对象,如图所示。还应该将这些清单分类,附加到其他命名空间,以便日后能轻松地重新使用它们。

1
现在将示例保存命名为“quota.yml”的文件,并将此配额附加在所选择的命名空间中,如图:
2
(结果显示“resourcequota dev-quota created”表示操作已成功完成。)如果有一些pod正在运行,可以使用以下命令查看每个资源的使用情况以及权限问题,如下图:
3

4

结果会显示pod当前的消耗量和极限值。如果超过了限制,系统可能会终止。

特别注意,在为命名空间设置自定义的CPU或内存资源后,应确保每次部署pod的“请求”和“限制”已经被指定。另一种方案是,创建一个“默认限制范围”对象,这将适用于每个将要运行但是却没有被指定限制和请求的pod。

运行以下命令验证已有的默认限制:
5
如果显示如下结果:
6
在该命名空间中设置所有的默认值是没有必要的,但是内存请求、内存限制、CPU限制是非常重要的,如果没有这三个值,任何一个pod都无法对错误消息进行判定:
7
(在pod清单中需要三个值的原因是在于100毫秒“默认请求”的存在,如上图所示,此默认请求还将会被应用于任何在定义中未指定“cpu请求”值的pod )
如果一些计算配额被激活,却没有在pod的定义或命名空间中被指

计算配额是:
1.CPU请求
2.内存请求
3. CPU限制
4.内存限制

当一个或多个设置被限制时,可以跳过并将其添加到窗格清单,并在调度期间使用所需的默认值。
以下是创建的没有被指定pod默认值的限制清单示例:
8
可以将其命名为“default-limits.yml”保存到文件中,并使用以下命令创建对象:

9
检查是否创建成功:

10
创建成功后就会出现如下内容:

11
在没有指定“resources.limits”和“resources.requests”字段的情况下排定pod时,就看不到出现的错误。

设置配额后,任何会导致该命名空间超出配额阈值的资源都无法被创建。

以下是可以设置的支持配额资源的完整列表:

12

返回列表