利用Kubernetes名称空间来管理内存和CPU资源(二)

  

<强>女主宣言

<节> <节> <节> <节> <节> <节> <节> <节> <节> <节> <节> <节> <节>

众所周知,Kubernetes是允许指定CPU和RAM的请求和限制的,这一特性对于单独的豆荚的资源消耗管理非常有用。在本系列文章中,我们将向大家展示集群资源的高效管理的三种策略。

但是,如果你是Kubernetes集群管理员,你可能还希望控制集群中资源的全局性消耗,并/或配置所有容器的默认资源需求。

值得高兴的是,Kubernetes支持名称空间级别的集群资源管理。正如你可能已经知道的,Kubernetes的名称空间提供了名称和资源配额的范围,这允许在多个用户,项目和团队之间有效地划分集群资源。在Kubernetes中,你可以定义缺省资源请求和限制,资源约束(最小和最大资源请求和限制),以及在给定名称空间中运行的所有容器的资源配额。这些特性使得集群中的应用程序能够高效地利用资源,并在不同的团队之间有效地分配资源,例如,使用名称空间的资源约束允许你控制生产和开发工作负载如何使用资源,从而允许它们消耗有限的集群资源的公平份额。这可以通过为生产和开发工作负载创建单独的名称空间来实现,并为它们分配不同的资源约束。

在系列文章中,我们将向你展示集群资源的高效管理的三种策略:

<李>

设置默认的资源请求和容器的限制

<李>

定义最小和最大的资源约束

<李>

为名称空间中的所有容器设置资源配额

这些策略将帮助你解决各种各样的用例,利用Kubernetes名称空间和资源管理的全部功能。

<节> <节> <节> <节> <节>

<节> <节> <节>

 kubectl  create  namespace  resource-constraints-demo 
  namespace "resource-constraints-demo" created

kubectl get limitrange resource-constraints-lr --namespace resource-constraints-demo --output=yaml

正如你所看到的,你的名称空间的默认资源请求和限制被自动设置为在 LimitRange 内指定的最大资源约束。现在,当我们在 resource-constraints-demo 名称空间中创建容器时,下面的规则将自动应用:

  • 如果容器没有指定它的资源请求和限制,则应用默认的资源请求和限制。

  • 名称空间中的所有容器都需要有大于或等于3亿的资源请求,用于CPU和500 Mi内存。

  • 名称空间中的所有容器都需要资源限制小于或等于8亿,用于CPU和1 Gi内存。

让我们创建一个pod来说明如何将名称空间资源约束应用到容器中:

该规范请求600 Mi RAM和0.4 CPU,并为这个pod中的httpd容器设置900 Mi RAM和0.7 CPU的限制。这些资源需求满足了名称空间的最小和最大约束。

我们保存为 default-resources-demo-pod-3.yaml 并在我们的名称空间中创建pod:

接下来,检查分配给pod中的容器的资源:

kubectl get pod resource-constraints-pod --namespace resource-constraints-demo --output=yaml

之所以成功创建pod,是因为容器的请求和限制在名称空间的最小和最大约束范围内。

现在,让我们看看如果我们指定的请求和限制超出了为名称空间定义的最小值和最大值,会发生什么。让我们用新的请求和限制来创建一个新的pod:


Error from server (Forbidden): error when creating "resource-constraints-pod-2.yaml": pods "resource-constraints-pod-2" is forbidden: [minimum memory usage per Container is 500Mi, but request is 200Mi., minimum cpu usage per Container is 300m, but request is 200m., maximum cpu usage per Container is 800m, but limit is 1200m., maximum memory usage per Container is 1Gi, but limit is 1200Mi.]

清理

在这个例子完成之后,让我们清理一下。

利用Kubernetes名称空间来管理内存和CPU资源(二)