CA源码分析
2022-07-02 21:34:55 7 举报
ClusterAutoScaler源码梳理
作者其他创作
大纲/内容
executeScaleUp
option.NodeCount
按分数排序
遍历所有的 NodeGroup
GetUpcomingNodes
得到 newNodes 信息
从前面缓存中获取 NodeGroup 的信息,返回 NodeInfo
GetNodeInfosForGroups
NewScaleDown
获取所有 Node 列表
estimator.Estimate
计算资源限额
模拟调度,确认哪些 Node 可以满足哪些 Pod
main
遍历所有的 podEquivalenceGroups
DaemonSetLister().List
computeScaleUpResourcesDelta
random
该 NodeGroup 可以调度成功的 pod 列表
CloudProvider.Refresh()
找出潜在的、利用率低的Node
BalanceScaleUpBetweenGroups
run
运行这些 Pod 需要该 Node group 的 Node 数量
computeScaleUpResourcesLeftLimits
computeExpansionOption
全局存放所有的 NodeInfo 信息
ScaleUp
scaleDown.CleanUpUnneededNodes()
BestOption
获取所有 DaemonSet 的 pod
obtainNodeLists
NewAutoscaler
UpdateUnneededNodes
FindSimilarNodeGroups
调用调度框架做预调度
GetScaleDownCandidates
sort.Slice(podInfos)
首次适应-装箱算法计算出能装下所有pod需要的node数量
CheckPredicates
applyScaleUpResourcesLimits
10s 执行一次
RunOnce
平衡不同的 ASG
......
filterNodeGroupsByPods
a.ScaleDownEnabled
buildPodEquivalenceGroups
NewStaticAutoscaler
遍历所有的 pod返回需要的 node 数量
NodeInfos -> NodeGorups
缩容场景
filterOutYoungPods
获取所有未调度的 pod
IncreaseSize
buildAutoscaler
NodeInfoProcessor.Process
leastwaste
ScheduledPodLister
PodListProcessor.Process
option.Pods
计算所有可用调度成功的pod需要的cpu、memory,并计算得分
得到 targetNodeGroups 信息
cloud provider
NodeGroup + NodeInfo 计算出需要的资源NodeInfo 获取 Node 的cpu、memoryNodeGroup 获取自定义资源
calculatePodScore
ScaleUpInfo(新值 - 当前值)
processors.NodeGroupListProcessor.Process
nodeInfo = nodeInfos[groupID]
FitsAnyNodeMatching
mostpods
nodeInfos[bestOption.NodeGroup.Id()]
RunFilterPlugins
遍历所有的 scaleUpInfos
刷新云资源
遍历所有快照中的 Node依次和待调度 pod 做预调度
NodeInfos
UnschedulablePodLister
生成 bestOption,决定具体选哪个 NodeGroup,需要几个节点
将 pod 按扩容维度归类整理
GetPodDestinationCandidates
尝试缩容
TryToScaleDown
从 NodeGroup 获取 Node 信息
为利用率低的Node上的pod找到下家
0 条评论
下一页