×

将自动伸缩应用于AWS上的Red Hat OpenShift服务集群涉及配置集群自动伸缩器,然后为集群中的至少一个机器池配置机器自动伸缩器。

您只能在机器API可运行的集群中配置集群自动伸缩器。

每个集群只能创建一个集群自动伸缩器。

关于集群自动伸缩器

集群自动伸缩器会调整AWS上Red Hat OpenShift服务集群的大小,以满足其当前的部署需求。它使用声明性的、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 集群管理器在集群创建期间启用自动伸缩。

步骤
  1. 在集群创建期间,选中“**启用自动伸缩**”框。“**编辑集群自动伸缩设置**”按钮将可选择。

    1. 您还可以选择自动伸缩的节点最小或最大数量。

  2. 单击“**编辑集群自动伸缩设置**”。

  3. 编辑您想要的任何设置,然后单击“**关闭**”。

使用 OpenShift 集群管理器在集群创建后启用自动伸缩

您可以使用 OpenShift 集群管理器在集群创建后启用自动伸缩。

步骤
  1. 在 OpenShift 集群管理器中,单击要自动伸缩的集群的名称。集群的概述页面上有一个“**自动伸缩**”项目,指示其是启用还是禁用。

  2. 单击“**机器池**”选项卡。

  3. 单击“**编辑集群自动伸缩**”按钮。将显示“**编辑集群自动伸缩**”设置窗口。

  4. 单击窗口顶部的“**自动伸缩集群**”切换开关。现在所有设置都可编辑。

  5. 编辑您想要的任何设置,然后单击“**保存**”。

  6. 单击屏幕右上角的“**x**”关闭设置窗口。

如果已更改所有自动伸缩设置,要将其恢复为默认值,请单击“**全部恢复为默认值**”按钮。

使用 OpenShift 集群管理器的集群自动伸缩设置

这些表解释了使用 OpenShift 集群管理器进行集群自动伸缩时所有可配置的 UI 设置。

常规设置

表 1. 使用 OpenShift 集群管理器时集群自动伸缩的可配置常规设置
设置 描述 类型或范围 默认值

log-verbosity

设置自动伸缩器日志级别。默认值为 1。建议将级别 4 用于调试。级别 6 启用几乎所有内容。

整数

1

skip-nodes-with-local-storage

如果为true,则集群自动伸缩器永远不会删除具有本地存储 Pod(例如 EmptyDir 或 HostPath)的节点。

布尔值

true

max-pod-grace-period

在缩减规模之前,为 Pod 提供以秒为单位的优雅终止时间。

整数

600

max-node-provision-time

集群自动伸缩器等待节点准备就绪的最长时间。

字符串

15m

pod-priority-threshold

允许用户调度“尽力而为”的 Pod,这些 Pod 不应触发集群自动伸缩器操作。这些 Pod 仅在有空闲资源时运行。

整数

-10

ignore-daemonsets-utilization

确定集群自动伸缩器在计算缩减规模的资源利用率时是否忽略守护程序集 Pod。

布尔值

false

balance-similar-node-groups

如果为true,则此设置会自动识别具有相同实例类型和相同标签集的节点组,并尝试保持这些节点组的相应大小平衡。

布尔值

false

balancing-ignored-labels

此选项指定集群自动伸缩器在考虑节点组相似性时应忽略的标签。此选项不能包含空格。

数组(字符串)

格式应为用逗号分隔的标签列表。

资源限制

表 2. 使用 OpenShift 集群管理器时集群自动伸缩的可配置资源限制设置
设置 描述 类型或范围 默认值

cores-total-min

集群中的核心数最小值。集群自动伸缩器不会将集群缩小到小于此数字。

对象

0

cores-total-max

集群中的核心数最大值。集群自动伸缩器不会将集群扩展到大于此数字。

对象

180 * 64 (11520)

memory-total-min

集群中内存的最小千兆字节数。集群自动伸缩器不会将集群缩小到小于此数字。

对象

0

memory-total-max

集群中内存的最大千兆字节数。集群自动伸缩器不会将集群扩展到大于此数字。

对象

180 * 64 * 20 (230400)

max-nodes-total

所有节点组中的节点最大数量。包括所有节点,而不仅仅是自动缩放的节点。集群自动伸缩器不会将集群扩展到大于此数字。

整数

180

GPU

集群中不同 GPU 的最小和最大数量。集群自动伸缩器不会将集群缩小到小于或扩展到大于这些数字。

数组

格式应为用逗号分隔的“<gpu_type>:<min>:<max>”列表。

缩减规模配置

表 3. 使用 OpenShift 集群管理器时集群自动伸缩的可配置缩减规模设置
设置 描述 类型或范围 默认值

scale-down-enabled

集群自动伸缩器是否应缩减集群规模。

布尔值

true

scale-down-utilization-threshold

节点利用率级别,定义为请求的资源总和除以容量,低于此级别,可以考虑将节点缩减规模。

浮点数

0.5

scale-down-unneeded-time

节点在符合缩减规模条件之前应处于不需要状态的时长。

字符串

10m

scale-down-delay-after-add

向上扩展后恢复缩减规模评估的时长。

字符串

10m

scale-down-delay-after-delete

节点删除后恢复缩减规模评估的时长。

字符串

0s

scale-down-delay-after-failure

缩减规模失败后恢复缩减规模评估的时长。

字符串

3m

使用 ROSA CLI 的交互模式在集群创建期间启用自动伸缩

如果可用,您可以使用终端的交互模式在集群创建期间设置集群范围的自动伸缩行为。

交互模式提供有关可用可配置参数的更多信息。交互模式还会进行基本的检查和预检验证,这意味着如果提供的数值无效,则终端会提示输入有效数值。

步骤
  • 在集群创建期间,使用--enable-autoscaling--interactive参数启用集群自动伸缩。

    示例
    $ rosa create cluster --cluster-name <cluster_name> --enable-autoscaling --interactive

如果您的集群名称超过 15 个字符,它将在*.openshiftapps.com上为您预配的集群包含一个自动生成的域名前缀作为子域。

要自定义子域,请使用--domain-prefix标志。域名前缀不能超过 15 个字符,必须唯一,并且在集群创建后无法更改。

当出现以下提示时,输入y以浏览所有可用的自动伸缩选项。

交互式提示示例
? Configure cluster-autoscaler (optional): [? for help] (y/N) y <enter>

使用 ROSA CLI 的交互模式在集群创建后启用自动伸缩

如果可用,您可以使用终端的交互模式在集群创建后设置集群范围的自动伸缩行为。

步骤
  • 创建集群后,输入以下命令

    示例
    $ rosa create autoscaler --cluster=<mycluster> --interactive

    然后,您可以设置所有可用的自动伸缩参数。

使用 ROSA CLI 在集群创建期间启用自动伸缩

您可以使用 ROSA CLI (rosa) 在集群创建期间设置集群范围的自动伸缩行为。您可以为整个机器启用自动伸缩器,也可以仅为集群启用。

步骤
  • 在集群创建期间,在集群名称后输入--enable autoscaling以启用机器自动伸缩。

如果您的集群名称超过 15 个字符,它将在*.openshiftapps.com上为您预配的集群包含一个自动生成的域名前缀作为子域。

要自定义子域,请使用--domain-prefix标志。域名前缀不能超过 15 个字符,必须唯一,并且在集群创建后无法更改。

示例
$ rosa create cluster --cluster-name <cluster_name> --enable-autoscaling

运行以下命令,至少设置一个参数以启用集群自动伸缩:

示例
$ rosa create cluster --cluster-name <cluster_name> --enable-autoscaling <parameter>

使用 ROSA CLI 在集群创建后启用自动伸缩

以下过程仅支持 ROSA Classic 集群。要为使用 HCP 集群的 ROSA 启用集群创建后的自动伸缩,请参阅 在集群上启用自动伸缩节点

您可以使用 ROSA CLI (rosa) 在集群创建后设置集群范围的自动伸缩。

步骤
  • 创建集群后,创建自动伸缩器。

    示例
    $ rosa create autoscaler --cluster=<mycluster>
    1. 您也可以使用以下命令创建具有特定参数的自动伸缩器:

      示例
      $ rosa create autoscaler --cluster=<mycluster> <parameter>

使用 ROSA CLI 在集群创建后编辑自动伸缩

创建自动伸缩器后,您可以编辑集群自动伸缩器的任何特定参数。

  • 要编辑集群自动伸缩器,请运行以下命令:

    示例
    $ rosa edit autoscaler --cluster=<mycluster>
    1. 要编辑特定参数,请运行以下命令:

      示例
      $ rosa edit autoscaler --cluster=<mycluster> <parameter>

使用 ROSA CLI 删除自动伸缩

如果您不再需要使用集群自动伸缩器,可以将其删除。

  • 要删除集群自动伸缩器,请运行以下命令:

    示例
    $ rosa delete autoscaler --cluster=<mycluster>

使用 ROSA CLI 的集群自动伸缩参数

使用 ROSA CLI (rosa) 时,您可以将以下参数添加到集群创建命令以配置自动伸缩器参数。

表 4. 可使用 ROSA CLI (rosa) 配置的自动伸缩器参数
设置 描述 类型或范围 示例/说明

--autoscaler-balance-similar-node-groups

识别具有相同实例类型和标签集的节点组,并尝试平衡这些节点组的各自大小。

布尔值

将其添加到设置为 true,省略该选项以设置为 false。

--autoscaler-skip-nodes-with-local-storage

如果设置,集群自动伸缩器不会删除具有使用本地存储的 Pod 的节点,例如 EmptyDir 或 HostPath。

布尔值

将其添加到设置为 true,省略该选项以设置为 false。

--autoscaler-log-verbosity int

自动伸缩器日志级别。将命令中的 int 替换为您要使用的数字。

整数

--autoscaler-log-verbosity 4

--autoscaler-max-pod-grace-period int

在缩减规模之前,为 Pod 提供优雅终止时间,以秒为单位。将命令中的 int 替换为您要使用的秒数。

整数

--autoscaler-max-pod-grace-period 0

--autoscaler-pod-priority-threshold int

Pod 必须超过的优先级,才能使集群自动伸缩器部署更多节点。将命令中的 int 替换为您要使用的数字,可以为负数。

整数

--autoscaler-pod-priority-threshold -10

--autoscaler-gpu-limit stringArray

集群中不同 GPU 的最小和最大数量。集群自动伸缩器不会将集群缩放到小于或大于这些数字的规模。格式必须是逗号分隔的列表“<gpu_type>,<min>,<max>” 。

数组

--autoscaler-gpu-limit nvidia.com/gpu,0,10 --autoscaler-gpu-limit amd.com/gpu,1,5

--autoscaler-ignore-daemonsets-utilization

如果设置,集群自动伸缩器在计算缩减规模的资源利用率时会忽略 DaemonSet Pod。

布尔值

将其添加到设置为 true,省略该选项以设置为 false。

--autoscaler-max-node-provision-time string

集群自动伸缩器等待节点准备就绪的最长时间。将命令中的 string 替换为整数和时间单位 (ns,us,µs,ms,s,m,h)。

字符串

--autoscaler-max-node-provision-time 35m

--autoscaler-balancing-ignored-labels strings

集群自动伸缩器在比较节点组的相似性时应忽略的标签键的逗号分隔列表。将 strings 替换为相关的标签。

字符串

--autoscaler-balancing-ignored-labels topology.ebs.csi.aws.com/zone,alpha.eksctl.io/instance-id

--autoscaler-max-nodes-total int

集群中节点的最大数量,包括自动伸缩的节点。将命令中的 int 替换为您要使用的数字。

整数

--autoscaler-max-nodes-total 180

--autoscaler-min-cores int

要在集群中部署的最小核心数。将命令中的 int 替换为您要使用的数字。

整数

--autoscaler-min-cores 0

--autoscaler-max-cores int

要在集群中部署的最大核心数。将命令中的 int 替换为您要使用的数字。

整数

--autoscaler-max-cores 100

--autoscaler-min-memory int

集群中的最小内存量(以 GiB 为单位)。将命令中的 int 替换为您要使用的数字。

整数

--autoscaler-min-memory 0

--autoscaler-max-memory int

集群中的最大内存量(以 GiB 为单位)。将命令中的 int 替换为您要使用的数字。

整数

--autoscaler-max-memory 4096

--autoscaler-scale-down-enabled

如果设置,集群自动伸缩器应缩减集群规模。

布尔值

将其添加到设置为 true,省略该选项以设置为 false。

--autoscaler-scale-down-unneeded-time string

节点在符合缩减规模条件之前应不需要多长时间。将命令中的 string 替换为整数和时间单位 (ns,us,µs,ms,s,m,h)。

字符串

--autoscaler-scale-down-unneeded-time 1h

--autoscaler-scale-down-utilization-threshold float

节点利用率级别,定义为请求资源之和除以容量,低于此级别,可以考虑将节点缩减规模。值必须介于 0 和 1 之间。

浮点数

--autoscaler-scale-down-utilization-threshold 0.5

--autoscaler-scale-down-delay-after-add string

增加规模后,缩减规模评估恢复多长时间。将命令中的 string 替换为整数和时间单位 (ns,us,µs,ms,s,m,h)。

字符串

--autoscaler-scale-down-delay-after-add 1h

--autoscaler-scale-down-delay-after-delete string

删除节点后,缩减规模评估恢复多长时间。将命令中的 string 替换为整数和时间单位 (ns,us,µs,ms,s,m,h)。

字符串

--autoscaler-scale-down-delay-after-delete 1h

--autoscaler-scale-down-delay-after-failure string

缩减规模失败后,缩减规模评估恢复多长时间。将命令中的 string 替换为整数和时间单位 (ns,us,µs,ms,s,m,h)。

字符串

--autoscaler-scale-down-delay-after-failure 1h