为工作程序池设置自动缩放
更新集群自动缩放器配置映射,以支持根据设置的最小值和最大值,自动缩放工作程序池中的工作程序节点。
在您编辑配置映射以在工作节点池上启用自动缩放后,集群自动缩放器会根据您的工作负载请求对集群进行缩放。 这意味着您无法 调整 或 重新平衡 您的工作池。 随着时间的推移,会定期进行扫描并执行扩展和缩减,根据工作程序节点数,此操作可能需要更长时间才能完成,例如 30 分钟。 如果日后要除去集群自动缩放器,必须先在配置映射中禁用每个工作程序池。
从 1.2.4 版本开始,不再支持 maxEmptyBulkDelete 选项。 运行 kubectl edit configmap iks-ca-configmap -n kube-system 命令并删除该选项,即可从配置表中删除该选项。 作为替代,您可以使用 maxScaleDownParallelism 选项,该选项是在 1.2.4 版本中添加的。 更多信息,请参阅 configmap 参考资料。
准备工作
-
编辑集群自动缩放器配置映射 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 -
使用参数编辑配置映射,以定义集群自动缩放器如何缩放集群工作程序池。 **注:**除非在标准集群的每个专区中禁用了所有公共应用程序负载均衡器 (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),必须先在配置映射中禁用每个工作程序池。 -
保存配置文件。
-
获取集群自动缩放器 pod。
oc get pods -n kube-system -
查看集群自动缩放器 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>。
自定义集群自动缩放器的配置值
定制集群自动缩放器设置,例如在扩展或缩减工作程序节点之前等待的时间量。
-
当您修改 ConfigMap 参数(除 Worker 池
minSize、maxSize之外),或启用或禁用 Worker 池时,群集 autoscaler pod 将重新启动。
-
查看 cluster autoscaler ConfigMap 参数。
-
下载集群自动缩放器附加组件 ConfigMap 并查看参数。
oc get cm iks-ca-configmap -n kube-system -o yaml > configmap.yaml -
打开
configmap.yaml文件并更新要更改的设置。 -
重新应用集群自动缩放器附加组件 configmap。
oc apply -f configmap.yaml -
验证 pod 是否已成功重新启动。
oc get pods -n kube-system | grep autoscaler
集群自动缩放器 configmap 参考
balancingIgnoreLabel- 要在区域均衡期间忽略的节点标签键。 除固定节点标签外,自动缩放器可以在区域均衡期间忽略其他 5 节点标签。 例如,
balancingIgnoreLabel1:label1或balancingIgnoreLabel2: custom-label2。 coresTotal- 集群中的最小和最大核心数。 集群自动缩放器不会将集群缩放到超出这些数字的范围。 默认值为
0:320000。 enforceNodeGroupMinSize- 如果需要,请将此值设置为
true,以将工作程序池扩展为配置的最小大小。 缺省值为false。 expander- 当存在多个工作池时,集群自动缩放器如何确定应缩放哪个工作池。 默认值为
random。 random:在most-pods和least-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。 livenessProbeFailureThresholdkubelet在 pod 启动且第一个活动性探测器失败后重试活动性探测器的次数。 达到故障阈值后,将重新启动容器,并且针对就绪性探测器将 pod 标记为Unready(如果适用)。 缺省值为3。livenessProbePeriodSecondskubelet执行活动性探测器的时间间隔 (以秒计)。 缺省值为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_bucketprometheus 直方图度量,以监控缩放行为。 okTotalUnreadyCount- 允许的未就绪节点数,与
maxTotalUnreadyPercentage值无关。 缺省值为3。 OSReservedCPUMili- 预留 CPU 的数量( MiliCPU )。 默认值为
30。 OSReservedMemoryGi- GiB 中预留的内存量。 默认值为
0.3。 parallelDrain- 设置为
true以允许并行排出节点。 缺省值为false。 prometheusScrape- 设置为
true以发送 Prometheus 度量。 要停止发送度量,请设置为false。 resourcesLimitsCPUibm-iks-cluster-autoscalerPod 最多可占用的工作节点 CPU 资源量。 缺省值为600m。resourcesLimitsMemoryibm-iks-cluster-autoscalerPod 可以占用的工作节点内存最大值。 缺省值为600Mi。resourcesRequestsCPUibm-iks-cluster-autoscalerPod 启动时所需的工人节点 CPU 最小配额。 缺省值为200m。resourcesRequestsMemoryibm-iks-cluster-autoscalerPod 启动时所需的 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-systempod 的工作程序节点。 不要将值设置为false,因为缩减kube-systempod 可能会产生意外结果。 缺省值是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值为2,min值为1。