为工作程序池设置自动缩放

更新集群自动缩放器配置映射,以支持根据设置的最小值和最大值,自动缩放工作程序池中的工作程序节点。

在您编辑配置映射以在工作节点池上启用自动缩放后,集群自动缩放器会根据您的工作负载请求对集群进行缩放。 这意味着您无法 调整重新平衡 您的工作池。 随着时间的推移,会定期进行扫描并执行扩展和缩减,根据工作程序节点数,此操作可能需要更长时间才能完成,例如 30 分钟。 如果日后要除去集群自动缩放器,必须先在配置映射中禁用每个工作程序池。

从 1.2.4 版本开始,不再支持 maxEmptyBulkDelete 选项。 运行 kubectl edit configmap iks-ca-configmap -n kube-system 命令并删除该选项,即可从配置表中删除该选项。 作为替代,您可以使用 maxScaleDownParallelism 选项,该选项是在 1.2.4 版本中添加的。 更多信息,请参阅 configmap 参考资料

准备工作

  1. 编辑集群自动缩放器配置映射 YAML 文件。

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

    示例输出

    apiVersion: v1
    data:
      workerPoolsConfig.json: |
        [
         {"name": "<worker_pool>","minSize": 1,"maxSize": 2,"enabled":false}
        ]
    kind: ConfigMap
    
  2. 使用参数编辑配置映射,以定义集群自动缩放器如何缩放集群工作程序池。 **注:**除非在标准集群的每个专区中禁用了所有公共应用程序负载均衡器 (ALB),否则必须将每个专区的 minSize 更改为 2,以便可以分布 ALB pod 以实现高可用性。

    • "name": "default": 将 "default" 替换为您要进行扩展的工作器池的名称或 ID。 要列出工作进程池,请运行 ibmcloud oc worker-pool ls --cluster CLUSTER_NAME_OR_ID。 要管理多个工作程序池,请将该 JSON 行复制到逗号分隔行,如下所示。
        [
        {"name": "default","minSize": 1,"maxSize": 2,"enabled":false},
        {"name": "Pool2","minSize": 2,"maxSize": 5,"enabled":true}
        ]
        ```
        集群自动缩放器只能缩放具有 `ibm-cloud.kubernetes.io/worker-pool-id` 标签的工作程序池。 要检查您的 worker 池是否具有所需的标签,请运行 `ibmcloud oc worker-pool get --cluster CLUSTER_NAME_OR_ID --worker-pool WORKER_POOL_NAME_OR_ID | grep Labels`。 如果您的 worker 池没有所需的标签,请添加一个新的 worker 池,并在集群自动缩放器中使用该 worker 池。
        {: note}
    
    - `"minSize": 1`:指定每个区域的最小工作节点数。 设置 `minSize` 不会自动触发扩展。 `minSize` 是一个阈值,用于确保集群自动缩放器不会将每个区域的工作节点数量缩减至低于特定数量。 如果集群的每个专区的工作程序节点尚未达到此数量,那么仅当您的工作负载资源请求需要更多资源时,集群自动缩放器才会进行扩展。 例如,如果您有一个工作程序池,其中在三个专区中分别有一个工作程序节点(共计三个工作程序节点),并将每个专区的 `minSize` 设置为 `4`,那么集群自动缩放器不会立即为每个专区额外供应三个工作程序节点(共计 12 个工作程序节点), 而是在有资源请求时才会触发扩展。 如果创建工作负载来请求 15 个工作程序节点的资源,那么集群自动缩放器会扩展工作程序池以满足此请求。 现在,`minSize` 意味着,即使您移除了需要该数量的工作节点的负载,集群自动缩放器也不会将每个区域的工作节点缩减至少于四个。 如需了解更多信息,请参阅 [Kubernetes 文档](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md#when-does-cluster-autoscaler-change-the-size-of-a-cluster){: external}。
    
    - `"maxSize": 2`: 指定集群自动扩展器可将每个区域的工作节点池扩展至的最大工作节点数量。 值必须等于或大于为 `minSize` 设置的值。
    - `"enabled": false`: 将该值设置为 `true`,以便集群自动缩放器管理工作池的缩放。 将值设置为 `false` 可阻止集群自动缩放器对工作程序池进行缩放。 如果日后要[除去集群自动缩放器](/docs/openshift?topic=openshift-cluster-scaling-install-addon&interface=ui#autoscaler-remove-console),必须先在配置映射中禁用每个工作程序池。
    
    
  3. 保存配置文件。

  4. 获取集群自动缩放器 pod。

    oc get pods -n kube-system
    
  5. 查看集群自动缩放器 pod 的 Events 部分中是否有 ConfigUpdated 事件,以验证配置映射是否已成功更新。 您的 ConfigMap 的事件消息格式如下:minSize:maxSize:PoolName:<SUCCESS|FAILED>:error message

    oc describe pod -n kube-system <cluster_autoscaler_pod>
    

    示例输出

        Name:               ibm-iks-cluster-autoscaler-857c4d9d54-gwvc6
        Namespace:          kube-system
        ...
        Events:
        Type     Reason         Age   From                                        Message
        ----     ------         ----  ----                                        -------
        Normal  ConfigUpdated  3m    ibm-iks-cluster-autoscaler-857c4d9d54-gwvc6  {"1:3:default":"SUCCESS:"}
    

如果您为工作池启用了自动缩放功能,随后又向该工作池添加了一个区域,请重启集群自动缩放器 Pod,以便其检测到此变更:oc delete pod -n kube-system <cluster_autoscaler_pod>

自定义集群自动缩放器的配置值

定制集群自动缩放器设置,例如在扩展或缩减工作程序节点之前等待的时间量。

  1. 查看 cluster autoscaler ConfigMap 参数。

  2. 下载集群自动缩放器附加组件 ConfigMap 并查看参数。

    oc get cm iks-ca-configmap -n kube-system -o yaml > configmap.yaml
    
  3. 打开 configmap.yaml 文件并更新要更改的设置。

  4. 重新应用集群自动缩放器附加组件 configmap。

    oc apply -f configmap.yaml
    
  5. 验证 pod 是否已成功重新启动。

    oc get pods -n kube-system | grep autoscaler
    

集群自动缩放器 configmap 参考

balancingIgnoreLabel
要在区域均衡期间忽略的节点标签键。 除固定节点标签外,自动缩放器可以在区域均衡期间忽略其他 5 节点标签。 例如,balancingIgnoreLabel1:label1balancingIgnoreLabel2: custom-label2
coresTotal
集群中的最小和最大核心数。 集群自动缩放器不会将集群缩放到超出这些数字的范围。 默认值为 0:320000
enforceNodeGroupMinSize
如果需要,请将此值设置为 true,以将工作程序池扩展为配置的最小大小。 缺省值为 false
expander
当存在多个工作池时,集群自动缩放器如何确定应缩放哪个工作池。 默认值为 random
random:在 most-podsleast-waste 之间随机选择。
most-pods:选择在扩展时能够安排最多 pod 的工作程序池。 如果要使用 nodeSelector 来确保 pod 位于特定工作程序节点上,请使用此方法。
least-waste:选择扩展后未使用 CPU 最少的工作程序池。 如果扩展后两个工作程序池使用的 CPU 资源量相同,那么将选择具有最少未使用内存的工作程序池。
expendablePodsPriorityCutoff
在分界下具有优先权的 Pod 是消耗性的。 可以在缩减期间不考虑这些问题而将其移除,并且不会导致向上扩展。 PodPriority 设置为空的 Pod 不是消耗性的。 缺省值为 -10
ignoreDaemonSetsUtilization
在计算缩放时的资源利用率时,忽略 autoscaler DaemonSet pod。 默认值为 false
imagePullPolicy
何时拉取 Docker 镜像。 默认值为 Always
Always:每次启动 pod 时都拉取映像。
IfNotPresent:仅在图像尚未在本地存在时提取图像。 \n - Never :假定图像已在本地存在,从不提取图像。
kubeClientBurst
Kubernetes 客户端允许的突发。 默认值为 300
kubeClientQPS
Kubernetes 客户端的 QPS 值。 在脉冲串耗尽后接受的查询数。 默认值为 5.0
livenessProbeFailureThreshold
kubelet 在 pod 启动且第一个活动性探测器失败后重试活动性探测器的次数。 达到故障阈值后,将重新启动容器,并且针对就绪性探测器将 pod 标记为 Unready (如果适用)。 缺省值为 3
livenessProbePeriodSeconds
kubelet 执行活动性探测器的时间间隔 (以秒计)。 缺省值为 600
livenessProbeTimeoutSeconds
活动性探测器超时之前的时间 (以秒计)。 默认值为 10
logLevel
自动缩放器的日志级别。 日志级别为 info, debug, warning, error。默认值为 info
maxBulkSoftTaintCount
使用 PreferNoSchedule 时,同时可被标记或取消标记的 worker 节点最大数量。 要禁用此功能,请将其设置为 0。 缺省值为 0
maxBulkSoftTaintTime
使用 PreferNoSchedule 时,工作节点同时处于“tainted”或“untainted”状态的最长时长。 缺省值为 10m
maxDrainParallelism
仍需要排出的可并行排出和删除的最大节点数。 默认值为 1
maxEmptyBulkDelete
仅在 1.2.4 之前的版本中受支持自动升级程序可同时删除的空节点的最大数量。 缺省值为 10
maxFailingTime
在 pod 自动重新启动之前,集群自动缩放器 pod 在未完成操作的情况下运行的最长时间 (以分钟为单位)。 默认值为 15m
maxGracefulTerminationSec
自动缩放器在缩减节点时等待 pod 结束的最大秒数。 默认值为 600
maxInactivity
在自动重新启动 pod 之前,集群自动缩放器 pod 在没有任何记录的活动的情况下运行的最长时间 (以分钟为单位)。 默认值为 10m
maxNodeGroupBinpackingDuration
每个工人池进行垃圾箱打包模拟的最长时间(秒)。 默认值为 10s
maxNodeProvisionTime
在集群自动缩放器取消扩展请求之前,工作节点开始配置所耗费的最长时长(以分钟为单位)。 默认值为 120m
maxNodeSkipevalTimeTrackerEnabled
1.35 及更高版本:当评估过程中跳过节点时,启用附加指标分析 Cluster Autoscaler 的缩放行为。 缺省值为 false
启用后,群集 Autoscaler 会在 CA pod 内公开度量 cluster_autoscaler_skipped_scale_events_count,用于监控跳过的缩放事件。
maxNodesPerScaleUp
单次扩展可添加的最大节点数。 这严格用于优化自动缩放器算法等待时间,不应用作扩展的速率限制。 默认值为 1000
maxPodEvictionTime
自动缩放器在停止前尝试逐出 pod 的最长时间。 默认值为 2m
maxRetryGap
连接到服务 API 失败后重试的最长时间 (以秒为单位)。 使用此参数和 retryAttempts 参数来调整集群自动缩放器的重试窗口。 缺省值为 60
parallelDrain
设置为 true 以允许并行排出节点。 缺省值为 false
已弃用 parallelDrain 设置(映射到 --parallel-drain )仅在群集自动分 析器版本 1.26- 1.31 中支持。 对于 1.32 及以后的版本,请使用 --max-drain-parallelism--max-scale-down-parallelism 代替。
maxScaleDownParallelism
可并行删除的空节点和需要排空的节点的最大数量。 默认值为 10
maxTotalUnreadyPercentage
集群中未就绪节点的最大百分比。 超过此值后,自动缩放器将停止操作。 默认值为 45
memoryTotal
集群的最小和最大内存量 (以千兆字节为单位)。 集群自动缩放器不会将集群缩放到超出这些数字的范围。 默认值为 0:6400000
minReplicaCount
replicaSet 或复制控制器在缩减期间必须允许删除的最小副本数量。 默认值为 0
newPodScaleUpDelay
不考虑将高于此值的 Pod (以秒为单位) 进行扩展。 可以通过 cluster-autoscaler.kubernetes.io/pod-scale-up-delay 注释来增加各个 pod 的数量。 缺省值为 0s
nodeDeleteDelayAfterTaint
在对节点进行污染之后,在删除节点之前要等待的时间 (以秒计)。 默认值为 5s
nodeDeletionBatcherInterval
自动缩放器可以收集节点以批量删除这些节点的时间长度 (以分钟计)。 默认值为 0m
nodeRemovalLatencyTrackingEnabled
1.35 及更高版本:启用与节点缩放延迟相关的直方图指标。 通过这些指标,可以了解 Cluster Autoscaler 移除节点或在再次需要节点时取消移除所需的时间。 缺省值为 false
启用后,群集 Autoscaler 会从 CA pod 公开 cluster_autoscaler_node_removal_latency_seconds_bucket prometheus 直方图度量,以监控缩放行为。
okTotalUnreadyCount
允许的未就绪节点数,与 maxTotalUnreadyPercentage 值无关。 缺省值为 3
OSReservedCPUMili
预留 CPU 的数量( MiliCPU )。 默认值为 30
OSReservedMemoryGi
GiB 中预留的内存量。 默认值为 0.3
parallelDrain
设置为 true 以允许并行排出节点。 缺省值为 false
prometheusScrape
设置为 true 以发送 Prometheus 度量。 要停止发送度量,请设置为 false
resourcesLimitsCPU
ibm-iks-cluster-autoscaler Pod 最多可占用的工作节点 CPU 资源量。 缺省值为 600m
resourcesLimitsMemory
ibm-iks-cluster-autoscaler Pod 可以占用的工作节点内存最大值。 缺省值为 600Mi
resourcesRequestsCPU
ibm-iks-cluster-autoscaler Pod 启动时所需的工人节点 CPU 最小配额。 缺省值为 200m
resourcesRequestsMemory
ibm-iks-cluster-autoscaler Pod 启动时所需的 worker 节点内存最小值。 缺省值为 200Mi
retryAttempts
连接到服务 API 失败后尝试重试的最大次数。 使用该参数和 maxRetryGap 参数调整群集自动分 析器的重试窗口。| 默认值为 64
scaleDownCandidatesPoolMinCount
当来自先前迭代的某些候选项不再有效时,被视为额外非空候选项以进行缩减的最小节点数。 默认值为 50
scaleDownCandidatesPoolRatio
当来自先前迭代的某些候选项不再有效时,被视为要缩减的额外非空候选项的节点比率。 默认值为 0.1
scaleDownDelayAfterAdd
向上扩展该向下扩展评估恢复后的时间量。 默认值为 10m

scaleDownDelayAfterDelete | 删除节点后恢复缩放评估的时间。 默认值与 scan-interval 相同,即 1m

scaleDownDelayAfterFailure
自动缩放器在发生故障后必须等待的时间量 (以分钟为单位)。 默认值为 3m
scaleDownEnabled
设置为 false 时,自动缩放器不会执行缩减。 缺省值为 true
scaleDownGPUUtilizationThreshold
节点上运行的所有 pod 的 GPU 请求总和除以节点的可分配资源。 当资源请求少于这个阈值时,就可以考虑缩小节点的规模。 利用率计算只考虑 GPU 资源。 CPU 和内存利用率被忽略。 默认值为 0.5
scaleDownNonEmptyCandidatesCount
在一次迭代中作为候选节点进行缩减的非空节点的最大数量。| 默认值为 30
scaleDownUnneededTime
工作节点在被缩减规模之前,必须处于闲置状态的时间(以分钟为单位)。 默认值为 10m
scaleDownUnreadyEnabled
设置为 true 时,将调度未就绪的节点以进行缩减。 缺省值是 true
scaleDownUnreadyTime
在考虑缩减未就绪节点之前,自动缩放器必须等待的时间量 (以分钟为单位)。 默认值为 20m
scaleDownUtilizationThreshold
工作节点的利用率阈值。 如果工作节点的利用率低于阈值,则该工作节点被视为已缩减规模。 工作节点利用率的计算方式为:将运行在该工作节点上的所有 Pod 请求的 CPU 和内存资源之和,除以该工作节点的资源容量。| 默认值为 0.5
scanInterval
设置集群自动缩放器对会触发扩展或缩减的工作负载使用情况进行扫描的频率(以分钟为单位)。 默认值为 1m
skipNodesWithLocalStorage
设置为 true 时,具有将数据保存到本地存储器的 pod 的工作程序节点不会缩减。 缺省值是 true
skipNodesWithSystemPods
设置为 true 时,不会缩减具有 kube-system pod 的工作程序节点。 不要将值设置为 false,因为缩减 kube-system pod 可能会产生意外结果。 缺省值是 true
unremovableNodeRecheckTimeout
自动缩放器重新检查先前尝试中无法除去的节点之前的超时 (以分钟为单位)。 默认值为 5m
workerPoolsConfig.json
要自动分级的工人池,包括每个区域的最小和最大工人节点数,格式为 {"name": "<pool_name>","minSize": 1,"maxSize": 2,"enabled":false}
POOL_NAME: 您要启用或禁用其自动缩放功能的 worker 池的名称或 ID。 要列出可用的工作进程池,请运行 ibmcloud oc worker-pool ls --cluster CLUSTER_NAME_OR_ID
maxSize: <number_of_workers>: 集群自动扩展器可将每个区域的工作节点数量扩展至的最大值。 该值必须等于或大于您为“minSize: <number_of_workers>”大小设置的值。
min=<number_of_workers>: 集群自动缩放器可将每个区域的工作节点数量缩减至的最小值。 如果需要将 ALB pod 扩散以实现高可用性,则必须将该值至少设为 2。 如果您 已禁用 标准集群中每个区域内的所有公共 ALB,则可以将该值设置为 0。 请记住,设置 min 大小不会自动触发扩展。 min 的数值是一个阈值,用于确保集群自动缩放器不会将每个区域的工作节点数量缩减至低于该最小值。 如果集群的每个专区的工作程序节点数尚未达到此数量,那么仅当您的工作负载资源请求需要更多资源时,集群自动缩放器才会进行扩展。
enabled=:当 true 时,群集自动分级器可以扩展你的工人池。 false 时,群集自动分级器不会扩展工作池。 之后,如果您想移除集群自动缩放器,必须先在 ConfigMap 中禁用每个工作池。 如果您为工作池启用了自动缩放功能,随后又向该工作池添加了一个区域,请重启集群自动缩放器 Pod,以便其检测到此变更:oc delete pod -n kube-system <cluster_autoscaler_pod>
缺省情况下,default 工作程序池并未启用,其中 max 值为 2min 值为 1