IBM Cloud Docs
准备经典集群和 VPC 集群以进行自动缩放

准备经典集群和 VPC 集群以进行自动缩放

虚拟私有云 经典基础架构

使用 cluster-autoscaler 附加组件,您可以自动扩展 Red Hat® OpenShift® on IBM Cloud® classic 或 VPC 集群中的工作池,根据计划工作负载的规模需求增加或减少工作池中的工作节点数量。 cluster-autoscaler 附加组件基于 Kubernetes Cluster-Autoscaler 项目。 有关按集群版本列出的受支持附加组件版本的列表,请参阅 受支持的集群附加组件版本

无法在使用预留的工作程序池上启用集群自动缩放器。

了解扩展和缩减

集群自动缩放器会定期扫描集群,以根据工作负载资源请求以及配置的任何定制设置(如扫描时间间隔),调整它所管理的工作程序池中的工作程序节点数。 集群自动缩放器每分钟会检查一次以下情况。

  • 有暂挂 pod 要扩展:因计算资源不足而无法在工作程序节点上安排 pod 时,该 pod 即被视为暂挂。 集群自动缩放器检测到暂挂 pod 时,自动缩放器会跨专区均匀扩展工作程序节点,以满足工作负载资源请求。
  • 有未充分利用的工作程序节点要缩减:缺省情况下,在 10 分钟或更长时间内,如果运行的工作程序节点所请求的计算资源占资源总量的比例低于 50%,并且可以将其工作负载重新安排到其他工作程序节点上,那么这些工作程序节点即被视为未充分利用。 如果集群自动缩放器检测到未充分利用的工作程序节点,它会对工作程序节点进行缩减,一次缩减一个,以便您只拥有所需的计算资源。 如果需要,可以对 10 分钟内的缺省缩减利用率阈值 50% 进行定制

随着时间的推移,会定期进行扫描并执行扩展和缩减,根据工作程序节点数,此操作可能需要更长时间才能完成,例如 30 分钟。

群集自动调节器会根据您为部署定义的 资源请求来调整工作节点的数量,而不是工作节点的实际使用情况。 如果 pod 和部署都未请求正确的资源量,那么您必须调整其配置文件。 集群自动缩放器无法为您进行调整。 此外,请记住,工作节点会使用一些计算资源来实现基本的群集功能、默认和自定义 附加功能 以及 资源储备

向上和向下扩展是什么样的?
通常,集群自动缩放器会计算集群运行其工作负载时需要的工作程序节点数。 扩展或缩减集群取决于诸多因素,其中包括以下因素。
  • 设置的每个专区的工作程序节点最小大小和最大大小。
  • 您的待处理 pod 资源请求以及与工作负载相关联的某些元数据,如反亲和性、仅在某些风味上放置 pod 的标签或 pod 中断预算
  • 群集自动分级器管理的工作者池,在多区群集中可能跨区管理。

有关更多信息,请参阅 Kubernetes Cluster Autoscaler 常见问题解答中的 “扩大规模如何运作?”“缩小规模如何运作?”

我可以改变扩大和缩小规模的工作方式吗?
可以定制设置或使用其他 Kubernetes 资源来影响扩展和缩减运作方式。
扩展
定制集群自动缩放器 ConfigMap 值,例如 scanIntervalexpanderskipNodesmaxNodeProvisionTime。 查看过量供应工作程序节点的方式,以便可以扩展工作程序节点而避免工作程序池耗尽资源。 此外,还可以设置 Kubernetes pod 预算中断和 pod 优先级分界值,以影响扩展运作方式。
缩减
定制集群自动缩放器 ConfigMap 值,例如 scaleDownUnneededTimescaleDownDelayAfterAddscaleDownDelayAfterDeletescaleDownUtilizationThreshold
我能否增加每个区域的最小规模,以触发将群集扩大到该规模?
不能,设置 minSize 不会自动触发扩展。 minSize 是一个阈值,以便群集自动分级器不会将每个区域的工作节点扩展到少于一定数量。 如果集群的每个专区的工作程序节点尚未达到此数量,那么仅当您的工作负载资源请求需要更多资源时,集群自动缩放器才会进行扩展。 例如,如果您有一个工作程序池,其中在三个专区中分别有一个工作程序节点(共计三个工作程序节点),并将每个专区的 minSize 设置为 4,那么集群自动缩放器不会立即为每个专区额外供应三个工作程序节点(共计 12 个工作程序节点), 而是在有资源请求时才会触发扩展。 如果创建工作负载来请求 15 个工作程序节点的资源,那么集群自动缩放器会扩展工作程序池以满足此请求。 现在,minSize 意味着,即使删除了请求该数量的工作负载,集群自动分级器也不会缩减到每个区域少于四个工作节点。
这种行为与不受群集自动分级器管理的工作者池有何不同?
创建工作程序池时,您会指定每个专区的工作程序节点数。 工作程序池将保持该数量的工作程序节点,直到您对其调整大小重新均衡。 工作程序池不会添加或除去工作程序节点。 如果拥有的 pod 数多于可以安排的数量,那么多出的这些 pod 会保持暂挂状态,直到您调整工作程序池的大小。 对工作程序池启用集群自动缩放器后,可根据 pod 规范设置和资源请求,对工作程序节点进行扩展或缩减。 您无需手动对工作程序池调整大小或重新均衡。

遵循可缩放部署实践

使用以下工作程序节点策略以及工作负载部署策略,以最充分地利用集群自动缩放器。 有关详细信息,请参阅 Kubernetes Cluster Autoscaler FAQ

试用具有几个测试工作负载的集群自动缩放器,以了解 向上扩展和向下扩展工作,您可能想要配置的方式以及您可能想要的任何其他方面,例如 overProvisioning 工作程序节点或 限制应用程序。 然后,清除测试环境,并规划在集群自动缩放器全新安装中包含这些定制值和其他设置。

可以一次自动缩放多个工作程序池吗?

是的,安装群集自动分级器后,您可以 在 ConfigMap 中 选择要自动分级的群集中的工作池。 每个集群只能运行一个自动缩放器。 在非缺省工作程序池上创建并启用自动缩放,因为缺省工作程序池具有可防止自动缩放的系统组件。

如何确保集群自动缩放器可响应应用程序需要的资源?

群集自动分压器会根据工作负载的 资源请求来扩展群集。 因此,请为所有部署指定 资源请求,因为群集自动分级器会使用资源请求来计算运行工作负载所需的工作节点数量。 请记住,自动缩放基于的是工作负载配置请求的计算使用量,不考虑其他因素,例如机器成本。

可以将工作程序池缩减到零 (0) 个节点吗?

否,无法将集群自动缩放器 minSize 设置为 0。 此外,除非在群集的每个区域中 禁用 所有公共应用程序负载平衡器 (ALB),否则必须将 minSize 更改为 2 每个区域的工作节点,这样 ALB pod 就可以分散以实现高可用性。 此外,您可以 感染 工作程序池,以实现至少 1 的缩放。

如果您的工人池中的工人节点为零(0),则无法扩展工人池。 为工作程序池禁用集群自动缩放手动调整工作程序池大小,使其至少有一个工作程序节点,然后重新启用集群自动缩放

可以优化部署以进行自动缩放吗?

可以,您可以将多个 Kubernetes 功能添加到部署中,以调整集群自动缩放器如何考虑资源请求以进行缩放。

  • 使工作程序池 仅允许将具有匹配容错的部署或 pod 部署到工作程序池。
  • 向工作程序池 (缺省工作程序池除外) 添加标签。 此标签在部署配置中用于指定 nodeAffinitynodeSelector,这将限制可以在标记的工作程序池中的工作程序节点上部署的工作负载。
  • 使用 pod 中断预算可防止突然重新安排或删除 pod。
  • 如果使用 pod 优先级,则可以 编辑优先级截止值来更改触发缩放的优先级类型。 缺省情况下,优先级分界值为零 (0)。

可以将污点和容忍度用于自动缩放的工作程序池吗?

是,但请确保 在工作程序池级别应用污点,以便所有现有和将来的工作程序节点都获得相同的污点。 然后,必须在工作负载配置中包含 匹配容错,以便将这些工作负载调度到具有匹配污点的自动缩放工作程序池上。 请记住,如果您部署的工作负载不能被污点工人池容忍,则不会考虑对工人节点进行扩展,即使群集有足够的容量,也可能会订购更多的工人节点。 不过,如果污点工人池的资源利用率低于阈值(默认为 50%),则仍会被识别为利用率不足,从而被考虑缩减规模。

重新平衡或调整自动缩放工作程序池的大小

必须先从自动缩放器配置映射中除去工作程序池以禁用自动缩放,然后才能对工作程序池进行重新平衡或调整大小。

  1. 编辑 iks-ca-configmap,并通过从 workerPoolsConfig.json 部分中除去工作程序池来禁用要调整其大小或重新平衡的工作程序池。

    oc edit cm -n kube-system iks-ca-configmap
    

    示例输出

    apiVersion: v1
    data:
      workerPoolsConfig.json: |
        [
         {"name": "","minSize": 1,"maxSize": 2,"enabled":false}
        ]
    kind: ConfigMap
    
  2. 保存 iks-ca-configmap

  3. 调整重新平衡 工作程序池。

  4. 可选 更新 VPC 工作程序节点

  5. 将工作程序池添加到 iks-ca-configmap

    oc edit cm -n kube-system iks-ca-configmap
    

    示例

    apiVersion: v1
    data:
      workerPoolsConfig.json: |
        [
         {"name": "<worker_pool>","minSize": 1,"maxSize": 2,"enabled":false}
        ]
    kind: ConfigMap
    

准备经典集群或 VPC Gen 2 集群以进行自动缩放

在安装 IBM Cloud 集群自动缩放器附加组件之前,可以设置集群以准备集群进行自动缩放。

baremetal 工作程序节点不支持集群自动缩放器附加组件。

  1. 开始之前,请 安装所需的 CLI 和插件

    • IBM Cloud CLI (ibmcloud)
    • IBM Cloud Kubernetes Service 插件 (ibmcloud oc)
    • IBM Cloud Container Registry 插件 (ibmcloud cr)
    • Kubernetes (kubectl)
  2. 创建标准集群

  3. 访问 Red Hat OpenShift 集群

  4. 确认您的 IBM Cloud Identity and Access Management 凭证是否存储在集群中。 集群自动缩放器会使用此私钥对凭证进行认证。 如果缺少私钥,请通过重置凭证来创建私钥

    oc get secrets -n kube-system | grep storage-secret-store
    
  5. 计划自动缩放 default 工作程序池以外的工作程序池,因为 default 工作程序池具有可防止自动缩减的系统组件。 包含工作程序池的标签,以便您可以为要部署到已启用自动缩放的工作程序池的工作负载设置 节点亲缘关系。 例如,标签可能为 app: nginx。 从以下选项中进行选择:

  6. 确认工作程序池具有自动缩放所需的标签。 在输出中,您将看到必需的 ibm-cloud.kubernetes.io/worker-pool-id 标签以及先前为节点亲缘关系创建的标签。 如果未看到这些标签,请添加工作程序池,然后 为节点亲缘关系添加标签

    ibmcloud oc worker-pool get --cluster <cluster_name_or_ID> --worker-pool <worker_pool_name_or_ID> | grep Labels
    

    带有标签的工人池输出示例。

    Labels:             ibm-cloud.kubernetes.io/worker-pool-id=a1aa111111b22b22cc3c3cc444444d44-4d555e5
    
  7. 压缩要自动缩放的工作程序池,以使工作程序池不接受除要在自动缩放的工作程序池上运行的工作负载以外的工作负载。 您可以在 社区 Kubernetes 文档中了解有关污点和容错的更多信息。 例如,您可以设置异味 use=autoscale:NoExecute。 在此示例中,NoExecute 污点会回避不具有对应于此污点的容错的 pod。

  8. 安装集群自动缩放器附加组件

安装附加组件后,将 ConfigMap 值更新为 在集群中启用自动缩放