将自动缩放应用于 OpenShift Dedicated 集群涉及配置集群自动缩放器,然后为集群中的至少一个机器池配置机器自动缩放器。
只有在机器 API 可运行的集群中才能配置集群自动缩放器。 每个集群只能创建一个集群自动缩放器。 |
集群自动缩放器会调整 OpenShift Dedicated 集群的大小以满足其当前的部署需求。它使用声明性的、Kubernetes 风格的参数来提供不依赖于特定云提供商对象的 基础设施管理。集群自动缩放器具有集群范围,并且不与特定的命名空间关联。
当由于资源不足而导致 Pod 无法在任何当前工作节点上调度,或者需要另一个节点来满足部署需求时,集群自动缩放器会增加集群的大小。集群自动缩放器不会将集群资源增加到您指定的限制之外。
集群自动缩放器计算集群中所有节点的总内存和 CPU,即使它不管理控制平面节点。这些值不是面向单机的。它们是整个集群中所有资源的聚合。例如,如果您设置了最大内存资源限制,则集群自动缩放器在计算当前内存使用率时会包含集群中的所有节点。然后使用该计算来确定集群自动缩放器是否有能力添加更多工作资源。
确保您创建的 `ClusterAutoscaler` 资源定义中的 `maxNodesTotal` 值足够大,足以满足集群中所有可能机器的总数。此值必须包含控制平面机器的数量以及您可能扩展到的计算机器的可能数量。 |
集群自动缩放器每 10 秒检查集群中哪些节点是不必要的并将其移除。如果满足以下条件,集群自动缩放器会考虑移除节点
节点利用率低于集群的 *节点利用率级别* 阈值。节点利用率级别是节点的请求资源之和除以分配资源。如果您没有在 `ClusterAutoscaler` 自定义资源中指定值,则集群自动缩放器使用默认值 `0.5`,对应于 50% 的利用率。
集群自动缩放器可以将运行在节点上的所有 Pod 移动到其他节点。Kubernetes 调度程序负责将 Pod 调度到节点上。
集群自动缩放器没有禁用缩减的注释。
如果节点上存在以下类型的 Pod,集群自动缩放器将不会移除该节点
具有限制性 Pod 中断预算 (PDB) 的 Pod。
默认情况下不在节点上运行的 kube-system Pod。
没有 PDB 或 PDB 过于严格的 kube-system Pod。
不受控制器对象(如部署、副本集或有状态集)支持的 Pod。
具有本地存储的 Pod。
由于缺乏资源、不兼容的节点选择器或亲和性、匹配的反亲和性等原因而无法移动到其他位置的 Pod。
除非它们也具有 `"cluster-autoscaler.kubernetes.io/safe-to-evict": "true"` 注释,否则具有 `"cluster-autoscaler.kubernetes.io/safe-to-evict": "false"` 注释的 Pod。
例如,您将最大 CPU 限制设置为 64 个内核,并将集群自动缩放器配置为仅创建每个具有 8 个内核的机器。如果您的集群以 30 个内核启动,则集群自动缩放器最多可以再添加 4 个具有 32 个内核的节点,总共 62 个。
如果您配置了集群自动缩放器,则会应用其他使用限制
不要直接修改自动缩放节点组中的节点。同一节点组中的所有节点都具有相同的容量和标签,并运行相同的系统 Pod。
为您的 Pod 指定请求。
如果您必须防止 Pod 过快删除,请配置适当的 PDB。
确认您的云提供商配额足以支持您配置的最大节点池。
不要运行额外的节点组自动伸缩器,特别是云提供商提供的那些。
集群自动伸缩器仅在这样做会导致可调度 Pod 的情况下才会向自动伸缩节点组添加节点。如果可用的节点类型无法满足 Pod 请求的要求,或者能够满足这些要求的节点组已达到其最大大小,则集群自动伸缩器无法向上扩展。 |
水平 Pod 自动伸缩器 (HPA) 和集群自动伸缩器以不同的方式修改集群资源。HPA 根据当前 CPU 负载更改部署或副本集的副本数。如果负载增加,则 HPA 会创建新的副本,而不管集群可用的资源量是多少。如果没有足够的资源,集群自动伸缩器会添加资源,以便 HPA 创建的 Pod 可以运行。如果负载减少,HPA 会停止一些副本。如果此操作导致某些节点利用率过低或完全空闲,则集群自动伸缩器会删除不必要的节点。
集群自动伸缩器会考虑 Pod 优先级。Pod 优先级和抢占功能允许在集群没有足够资源的情况下基于优先级调度 Pod,但集群自动伸缩器确保集群拥有运行所有 Pod 的资源。为了尊重这两个功能的意图,集群自动伸缩器包含一个优先级截止功能。您可以使用此截止值来调度“尽力而为”的 Pod,这些 Pod 不会导致集群自动伸缩器增加资源,而仅在有空闲资源时运行。
优先级低于截止值的 Pod 不会导致集群向上扩展,也不会阻止集群向下扩展。不会添加新的节点来运行这些 Pod,并且运行这些 Pod 的节点可能会被删除以释放资源。
您可以使用 OpenShift 集群管理器在集群创建期间进行自动伸缩。
在集群创建过程中,选中**启用自动伸缩**复选框。“**编辑集群自动伸缩设置**”按钮将变为可选。
您还可以选择要自动伸缩的节点的最小或最大数量。
单击“**编辑集群自动伸缩设置**”。
编辑您想要的任何设置,然后单击“**关闭**”。
您可以使用 OpenShift 集群管理器在集群创建后进行自动伸缩。
在 OpenShift 集群管理器中,单击要自动伸缩的集群的名称。集群的概述页面有一个**自动伸缩**项目,指示它已启用还是已禁用。
单击**机器池**选项卡。
单击**编辑集群自动伸缩**按钮。将显示**编辑集群自动伸缩**设置窗口。
单击窗口顶部的**自动伸缩集群**切换按钮。现在所有设置都可编辑。
编辑您想要的任何设置,然后单击“**保存**”。
单击屏幕右上角的**x** 关闭设置窗口。
如果已更改所有自动伸缩设置,要将其恢复为默认值,请单击**全部恢复为默认值**按钮。
这些表格解释了使用 OpenShift 集群管理器与集群自动伸缩功能时所有可配置的 UI 设置。
设置 | 描述 | 类型或范围 | 默认值 |
---|---|---|---|
|
设置自动伸缩器日志级别。默认值为 1。建议使用级别 4 进行调试。级别 6 启用几乎所有内容。 |
|
1 |
|
如果为 |
|
true |
|
在缩减规模之前,为 Pod 提供以秒为单位的优雅终止时间。 |
|
600 |
|
集群自动伸缩器等待节点准备就绪的最大时间。 |
|
15m |
|
允许用户调度“尽力而为”的 Pod,这些 Pod 不应触发集群自动伸缩器操作。这些 Pod 仅在有空闲资源时运行。 |
|
-10 |
|
确定集群自动伸缩器在计算缩减规模的资源利用率时是否忽略守护程序集 Pod。 |
|
false |
|
如果为 |
|
false |
|
此选项指定集群自动伸缩器在考虑节点组相似性时应忽略的标签。此选项不能包含空格。 |
|
格式应为逗号分隔的标签列表。 |
设置 | 描述 | 类型或范围 | 默认值 |
---|---|---|---|
|
集群中的核心数最小值。集群自动伸缩器不会将集群缩减到小于此数量。 |
|
0 |
|
集群中的核心数最大值。集群自动伸缩器不会将集群扩展到大于此数量。 |
|
180 * 64 (11520) |
|
集群中内存的最小千兆字节数。集群自动伸缩器不会将集群缩减到小于此数量。 |
|
0 |
|
集群中内存的最大千兆字节数。集群自动伸缩器不会将集群扩展到大于此数量。 |
|
180 * 64 * 20 (230400) |
|
所有节点组中的节点最大数量。包括所有节点,而不仅仅是自动缩放的节点。集群自动伸缩器不会将集群扩展到大于此数量。 |
|
180 |
GPU |
集群中不同 GPU 的最小和最大数量。集群自动伸缩器不会将集群缩减到小于或扩展到大于这些数量。 |
|
格式应为逗号分隔的列表,“<gpu_type>:<min>:<max>”。 |
设置 | 描述 | 类型或范围 | 默认值 |
---|---|---|---|
|
集群自动伸缩器是否应缩减集群规模。 |
|
true |
|
节点利用率级别,定义为请求资源之和除以容量,低于此级别,可以考虑将节点缩减规模。 |
|
0.5 |
|
节点在符合缩减规模条件之前应不需要多长时间。 |
|
10m |
|
向上扩展后多久才能恢复缩减规模评估。 |
|
10m |
|
删除节点后多久才能恢复缩减规模评估。 |
|
0s |
|
缩容失败后,多久恢复缩容评估? |
|
3分钟 |