为工作程序池设置自动缩放
更新集群自动缩放器配置映射,以支持根据设置的最小值和最大值,自动缩放工作程序池中的工作程序节点。
编辑配置映射以启用工作程序池后,集群自动缩放器即会根据工作负载请求来缩放集群。 因此,您无法 调整大小 或 重新平衡 工作程序池。 随着时间的推移,会定期进行扫描并执行扩展和缩减,根据工作程序节点数,此操作可能需要更长时间才能完成,例如 30 分钟。 如果日后要除去集群自动缩放器,必须先在配置映射中禁用每个工作程序池。
开始之前:
-
编辑集群自动缩放器配置映射 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
标签的工作程序池。 要检查工人池是否有所需标签,请运行 "ibmcloud oc worker-pool get --cluster <cluster_name_or_ID> --worker-pool <worker_pool_name_or_ID> | grep Labels
。 如果您的工作池没有所需的标签,请添加一个新的工作池,并将此工作池与群集自动分 析器一起使用。 -
"minSize": 1
:指定群集自动分级器可将工人池缩减到的每个区域的最小工人节点数。 值必须等于或大于2
,以便可以分布 ALB pod 以实现高可用性。 如果在标准集群的每个专区中禁用了所有公共 ALB,那么可以将值设置为1
。设置
minSize
不会自动触发扩展。minSize
是一个阈值,以便群集自动分级器不会将每个区域的工作节点扩展到少于一定数量。 如果集群的每个专区的工作程序节点尚未达到此数量,那么仅当您的工作负载资源请求需要更多资源时,集群自动缩放器才会进行扩展。 例如,如果您有一个工作程序池,其中在三个专区中分别有一个工作程序节点(共计三个工作程序节点),并将每个专区的minSize
设置为4
,那么集群自动缩放器不会立即为每个专区额外供应三个工作程序节点(共计 12 个工作程序节点), 而是在有资源请求时才会触发扩展。 如果创建工作负载来请求 15 个工作程序节点的资源,那么集群自动缩放器会扩展工作程序池以满足此请求。 现在,"minSize
的意思是,即使删除了请求该数量的工作负载,集群自动分级器也不会缩减到每个区域少于四个工作节点。 更多信息,请参阅 Kubernetes文档。 -
"maxSize": 2
:指定群集自动分级器可将工人池扩展到的每个区域的最大工人节点数。 值必须等于或大于为minSize
设置的值。 -
"enabled": false
:将群集自动分压器的值设置为 "true
,以管理工人池的扩展。 将值设置为false
可阻止集群自动缩放器对工作程序池进行缩放。 如果日后要除去集群自动缩放器,必须先在配置映射中禁用每个工作程序池。
-
-
保存配置文件。
-
获取集群自动缩放器 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>
.
自定义群集自动分级器配置值
定制集群自动缩放器设置,例如在扩展或缩减工作程序节点之前等待的时间量。
-
修改工作程序池
minSize
和maxSize
以外的 ConfigMap 参数时,或者如果启用或禁用工作程序池,那么会重新启动集群自动缩放器 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 参考
参数 | 描述 | 缺省值 |
---|---|---|
expander |
如果您有多个工作程序池,那么集群自动缩放器如何确定要缩放的工作程序池。
|
random |
prometheusScrape |
设置为 true 以发送 Prometheus 度量。 要停止发送度量,请设置为 false 。 |
true |
ignoreDaemonSetsUtilization |
计算用于缩减的资源利用率时,忽略自动缩放器 DaemonSet pod。 | false |
imagePullPolicy |
何时拉取 Docker 映像。
|
Always |
livenessProbeFailureThreshold |
kubelet 在 pod 启动且第一个活动性探测器失败后重试活动性探测器的次数。 达到故障阈值后,将重新启动容器,并且针对就绪性探测器将 pod 标记为 Unready (如果适用)。 |
3 |
livenessProbePeriodSeconds |
kubelet 执行活动性探测器的时间间隔 (以秒计)。 |
600 |
livenessProbeTimeoutSeconds |
活动性探测器超时之前的时间 (以秒计)。 | 10 |
maxBulkSoftTaintCount |
The maximum number of worker nodes that can be tainted or untainted with PreferNoSchedule at the same time. 要禁用此功能,请将其设置为 0 。 |
0 |
maxBulkSoftTaintTime |
The maximum amount of time that worker nodes can be tainted or untainted with PreferNoSchedule at the same time. |
10m |
maxFailingTime |
在 pod 自动重新启动之前,集群自动缩放器 pod 在未完成操作的情况下运行的最长时间 (以分钟为单位)。 | 15m |
maxInactivity |
在自动重新启动 pod 之前,集群自动缩放器 pod 在没有任何记录的活动的情况下运行的最长时间 (以分钟为单位)。 | 10m |
maxNodeProvisionTime |
在群集自动升级程序取消扩展请求之前,工作节点开始调配的最长时间(分钟)。 | 120m |
maxNodeGroupBinpackingDuration |
每个工作程序池的分箱包装模拟所耗用的最大时间 (以秒为单位)。 | 10s |
maxNodesPerScaleUp |
可以在单个向上扩展中添加的最大节点数。 这严格用于优化自动缩放器算法等待时间,不应用作扩展的速率限制。 | 1000 |
maxRetryGap |
连接到服务 API 失败后重试的最长时间 (以秒为单位)。 使用此参数和 retryAttempts 参数来调整集群自动缩放器的重试窗口。 |
60 |
parallelDrain |
设置为 true 以允许并行排出节点。 |
false |
maxScaleDownParallelism |
可以并行删除的最大节点数 (包括空节点和仍需要排出的节点)。 | 10 |
maxDrainParallelism |
仍需要排出的可并行排出和删除的最大节点数。 | 1 |
nodeDeletionBatcherInterval |
自动缩放器可以收集节点以批量删除这些节点的时间长度 (以分钟计)。 | 0m |
nodeDeleteDelayAfterTaint |
在对节点进行污染之后,在删除节点之前要等待的时间 (以秒计)。 | 5s |
enforceNodeGroupMinSize |
如果需要,请将此值设置为 true ,以将工作程序池扩展为配置的最小大小。 |
false |
resourcesLimitsCPU |
ibm-iks-cluster-autoscaler pod 可占用的工作节点 CPU 最大值。 |
600m |
resourcesLimitsMemory |
ibm-iks-cluster-autoscaler pod 可占用的最大工作节点内存量。 |
600Mi |
coresTotal |
集群中的最小和最大核心数。 集群自动缩放器不会将集群缩放到超出这些数字的范围。 | 0:320000 |
memoryTotal |
集群的最小和最大内存量 (以千兆字节为单位)。 集群自动缩放器不会将集群缩放到超出这些数字的范围。 | 0:6400000 |
resourcesRequestsCPU |
ibm-iks-cluster-autoscaler pod 启动时工作节点 CPU 的最小值。 |
200m |
resourcesRequestsMemory |
ibm-iks-cluster-autoscaler pod 启动时工作节点内存的最小值。 |
200Mi |
retryAttempts |
连接到服务 API 失败后尝试重试的最大次数。 使用此参数和 maxRetryGap 参数来调整集群自动缩放器的重试窗口。 |
64 |
logLevel |
自动缩放器的日志级别。 日志记录级别为 info ,debug ,warning 和 error |
info |
scaleDownDelayAfterAdd |
向上扩展该向下扩展评估恢复后的时间量。 scaleDownDelayAfterAdd 的默认值为 10 分钟。 |
10m |
scaleDownDelayAfterDelete |
节点删除后缩减评估恢复的时间量。 scaleDownDelayAfterDelete 的缺省值与 scan-interval 的缺省值相同,即 1m |
1m |
scaleDownDelayAfterFailure |
自动缩放器在发生故障后必须等待的时间量 (以分钟为单位)。 | 3m |
kubeClientBurst |
Kubernetes 客户机允许的分类群发。 | 300 |
kubeClientQPS |
Kubernetes 客户机的 QPS 值。 在脉冲串耗尽后接受的查询数。 | 5.0 |
maxEmptyBulkDelete |
可由自动缩放器同时删除的最大空节点数。 | 10 |
maxGracefulTerminationSec |
自动缩放器在缩减节点时等待 pod 结束的最大秒数。 | 600 |
maxTotalUnreadyPercentage |
集群中未就绪节点的最大百分比。 超过此值后,自动缩放器将停止操作。 | 45 |
okTotalUnreadyCount |
允许的未就绪节点数,与 maxTotalUnreadyPercentage 值无关。 |
3 |
unremovableNodeRecheckTimeout |
自动缩放器重新检查先前尝试中无法除去的节点之前的超时 (以分钟为单位)。 | 5m |
scaleDownUnneededTime |
在缩减工作节点之前,工作节点必须在不必要的情况下工作的时间,以分钟为单位。 | 10m |
scaleDownUtilizationThreshold |
工作节点利用率阈值。 如果工作节点利用率低于阈值,则认为工作节点被缩减。 工作程序节点利用率的计算方法是,工作程序节点上运行的所有 pod 请求的 CPU 和内存资源之和除以工作程序节点资源容量。 | 0.5 |
scaleDownUnreadyTime |
在考虑缩减未就绪节点之前,自动缩放器必须等待的时间量 (以分钟为单位)。 | 20m |
scaleDownNonEmptyCandidatesCount |
在一次迭代中被视为候选者的非空节点的最大数目 (随着放弃而缩减)。 | 30 |
scaleDownCandidatesPoolRatio |
当来自先前迭代的某些候选项不再有效时,被视为要缩减的额外非空候选项的节点比率。 | 0.1 |
scaleDownCandidatesPoolMinCount |
当来自先前迭代的某些候选项不再有效时,被视为额外非空候选项以进行缩减的最小节点数。 | 50 |
scaleDownEnabled |
设置为 false 时,自动缩放器不会执行缩减。 |
true |
scaleDownUnreadyEnabled |
设置为 true 时,将调度未就绪的节点以进行缩减。 |
true |
scanInterval |
设置集群自动缩放器对会触发扩展或缩减的工作负载使用情况进行扫描的频率(以分钟为单位)。 | 1m |
skipNodesWithLocalStorage |
设置为 true 时,具有将数据保存到本地存储器的 pod 的工作程序节点不会缩减。 默认值为 "true |
|
skipNodesWithSystemPods |
设置为 true 时,不会缩减具有 kube-system pod 的工作程序节点。 不要将值设置为 false ,因为缩减 kube-system pod 可能会产生意外结果。 |
true |
expendablePodsPriorityCutoff |
在分界下具有优先权的 Pod 是消耗性的。 可以在缩减期间不考虑这些问题而将其移除,并且不会导致向上扩展。 PodPriority 设置为空的 Pod 不是消耗性的。 |
-10 |
minReplicaCount |
replicaSet 或复制控制器在缩减期间必须允许删除的最小副本数。 | 0 |
maxPodEvictionTime | 自动缩放器在停止前尝试逐出 pod 的最长时间。 | 2m |
newPodScaleUpDelay |
不考虑将高于此值的 Pod (以秒为单位) 进行扩展。 可以通过 cluster-autoscaler.kubernetes.io/pod-scale-up-delay 注释来增加各个 pod 的数量。 |
0s |
balancingIgnoreLabel |
要在区域均衡期间忽略的节点标签键。 除固定节点标签外,自动缩放器可以在区域均衡期间忽略其他 5 节点标签。 例如,balancingIgnoreLabel1:label1 或 balancingIgnoreLabel2: custom-label2 。 |
|
workerPoolsConfig.json |
要自动缩放的工作程序池,包括每个专区的最小和最大工作程序节点数。
|
默认情况下,"default 工人池未启用,"max 值为 "2 ,"min 值为 "1 。 |