|
本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。 |
SUSE Rancher Prime项目中的资源配额工作原理
Rancher中的资源配额具有与 原生Kubernetes版本相同的功能。然而,在Rancher中,资源配额得到了扩展,可以将其应用于项目。
在标准Kubernetes部署中,资源配额应用于单个名称空间。然而,您不能通过单个操作同时将配额应用于您的名称空间。相反,资源配额必须多次应用于名称空间。
在下图中,Kubernetes管理员试图在没有Rancher的情况下强制执行资源配额。管理员希望应用一个资源配额,为其集群中的每个名称空间设置相同的CPU和内存限制(Namespace 1-4)。然而,在Kubernetes的基础版本中,每个名称空间需要一个唯一的资源配额。管理员必须创建四个具有相同配置规格的不同资源配额(Resource Quota 1-4),并单独应用于名称空间。
基础Kubernetes:应用于每个名称空间的唯一资源配额
在Rancher中,资源配额稍有不同。在Rancher中,您将资源配额应用于项目,然后配额传播到每个名称空间,之后Kubernetes使用原生版本的资源配额来强制执行您的限制。如果您想更改特定名称空间的配额,可以覆盖它。
-
项目限制:
这一组值配置了项目中所有名称空间共享的每个指定资源的总限制。
-
名称空间默认限制:
这一组值配置了每个名称空间对于每个指定资源可用的默认配额限制。 当在项目中创建名称空间而没有覆盖时,该限制会自动绑定到名称空间并强制执行。
在下图中,Rancher 管理员希望应用一个资源配额,为其项目中的每个名称空间设置相同的 CPU 和内存限制 (Namespace 1-4)。然而,在 Rancher 中,管理员可以为项目 (Project Resource Quota) 设置资源配额,而不是单个名称空间。该配额包括整个项目 (Project Limit) 和单个名称空间 (Namespace Default Limit) 的资源限制。然后,Rancher 在创建时将 Namespace Default Limit 配额传播到每个名称空间 (Namespace Resource Quota)。
Rancher:资源配额传播到每个名称空间
让我们着重介绍一下在 Rancher UI *内*创建的名称空间的一些更细致功能。如果在项目级别删除配额,它也会从该项目中包含的所有名称空间中删除,尽管可能存在任何覆盖。此外,在项目级别更新现有名称空间的默认限制不会导致该值传播到项目中的所有现有名称空间;更新后的值只会应用于该项目中新创建的名称空间。要更新现有名称空间的默认限制,您可以在项目级别删除并随后重新创建配额,使用新的默认值。这将导致新的默认值应用于项目中的所有现有名称空间。
在项目中创建名称空间之前,Rancher 会比较项目可用资源和请求资源的数量,无论它们来自默认限制还是覆盖限制。 如果请求的资源超过项目中这些资源的剩余容量,Rancher 将为该资源分配名称空间的剩余容量。
然而,对于在 Rancher UI 之外 创建的名称空间,情况并非如此。对于通过 kubectl 创建的名称空间,Rancher 将为任何请求的容量超过项目中剩余容量的资源分配一个 零 的资源配额。
要通过 kubectl 在现有项目中创建名称空间,请使用 field.cattle.io/projectId 注释。要覆盖默认请求的配额限制,请使用 field.cattle.io/resourceQuota 注释。
请注意,Rancher 仅会覆盖在项目配额中定义的资源限制。
apiVersion: v1
kind: Namespace
metadata:
annotations:
field.cattle.io/projectId: [your-cluster-ID]:[your-project-ID]
field.cattle.io/resourceQuota: '{"limit":{"limitsCpu":"100m", "configMaps": "50"}}'
name: my-ns
在这个例子中,如果项目的配额不包括 configMaps 在其资源列表中,那么 Rancher 将忽略此覆盖中的`configMaps`。
建议用户使用`extended`映射为项目中未内置的资源配置额外的自定义限制,适用于项目中的所有名称空间,或者在特定名称空间中为这些资源创建专用的`ResourceQuota`对象,仅适用于这些名称空间。资源配额是原生的 Kubernetes 对象,Rancher 将忽略属于有配额的项目的名称空间中的用户定义配额,从而给予用户更多控制权。
下表解释了两种配额类型之间的主要区别。
| Rancher 资源配额 | Kubernetes 资源配额 |
|---|---|
适用于项目和名称空间。 |
仅适用于名称空间。 |
为项目中的所有名称空间创建资源池。 |
对各个名称空间应用静态资源限制。 |
通过传播将资源配额应用于名称空间。 |
仅适用于指定的名称空间。 |