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

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

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

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

开始之前

  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 标签的工作程序池。 要检查工人池是否有所需标签,请运行 "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 可阻止集群自动缩放器对工作程序池进行缩放。 如果日后要除去集群自动缩放器,必须先在配置映射中禁用每个工作程序池。

  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 参考

Autoscaler 附加组件参数参考
参数 描述 缺省值
expander

如果您有多个工作程序池,那么集群自动缩放器如何确定要缩放的工作程序池。

  • random: 在 most-podsleast-waste之间随机选择。
  • most-pods: 选择能够在缩放时调度最多 pod 的工作程序池。 如果要使用 nodeSelector 来确保 pod 在特定工作程序节点上登录,请使用此方法。
  • least-waste: 在扩展后选择未使用 CPU 最少的工作程序池。 如果扩展后两个工作程序池使用的 CPU 资源量相同,那么将选择具有最少未使用内存的工作程序池。
random
prometheusScrape 设置为 true 以发送 Prometheus 度量。 要停止发送度量,请设置为 false true
ignoreDaemonSetsUtilization 计算用于缩减的资源利用率时,忽略自动缩放器 DaemonSet pod。 false
imagePullPolicy

何时拉取 Docker 映像。

  • Always: 每次启动 pod 时都会拉取映像。
  • IfNotPresent: 仅当映像尚未在本地存在时,才会拉取映像。
  • Never: 假定映像在本地存在,并且从不拉取映像。
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 自动缩放器的日志级别。 日志记录级别为 infodebugwarningerror 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:label1balancingIgnoreLabel2: custom-label2
workerPoolsConfig.json

要自动缩放的工作程序池,包括每个专区的最小和最大工作程序节点数。

  • {"name": "<pool_name>","minSize": 1,"maxSize": 2,"enabled":false}.
  • <pool_name>: 要启用或禁用自动缩放的工作程序池的名称或标识。 要列出可用的工作程序池,请运行 ibmcloud oc worker-pool ls --cluster <cluster_name_or_ID>
  • maxSize: <number_of_workers>: 集群自动缩放器可扩展至的每个专区的最大工作程序节点数。 该值必须等于或大于您为 minSize: <number_of_workers> 大小设置的值。
  • min=<number_of_workers>: 集群自动缩放器可缩减到的每个专区的最小工作程序节点数。 值必须等于或大于 2,以便可以分布 ALB pod 以实现高可用性。 如果在标准集群的每个专区中禁用了所有公共 ALB,那么可以将值设置为 1。 请记住,设置 min 大小不会自动触发扩展。 min 大小是一个阈值,以便群集自动分级器不会扩展到每个区域的工作节点数少于这个最小值。 如果集群尚未具有每个专区的此工作程序节点数,那么在您具有需要更多资源的工作负载资源请求之前,集群自动缩放器不会向上扩展。
  • enabled=: 当 true时,集群自动缩放器可以缩放工作程序池。 当 false 时,集群自动缩放器不会缩放工作程序池。 之后,如果要移除群集自动分压器,必须首先禁用ConfigMap 中的每个 Worker 池。 如果您启用了一个自动扩展工作池,随后又在该工作池中添加了一个区域,请重新启动群集自动扩展器 pod,以便它接收此更改:'oc delete pod -n kube-system <cluster_autoscaler_pod>.
默认情况下,"default 工人池未启用,"max 值为 "2,"min 值为 "1