少于1分钟
自定义指标干扰检测回避和自定义排序的使用同 精确执行回避动作 部分中介绍的流程,此处介绍如何自定义自己的指标参与干扰检测回避流程
为了更好的基于NodeQOS配置的metric进行排序和精准控制,对metric引入属性的概念。
metric的属性包含如下几个,自定义的指标实现这些字段即可:
type metric struct {
Name WaterLineMetric
ActionPriority int
SortAble bool
SortFunc func(pods []podinfo.PodContext)
ThrottleAble bool
ThrottleQuantified bool
ThrottleFunc func(ctx *ExecuteContext, index int, ThrottleDownPods ThrottlePods, totalReleasedResource *ReleaseResource) (errPodKeys []string, released ReleaseResource)
RestoreFunc func(ctx *ExecuteContext, index int, ThrottleUpPods ThrottlePods, totalReleasedResource *ReleaseResource) (errPodKeys []string, released ReleaseResource)
EvictAble bool
EvictQuantified bool
EvictFunc func(wg *sync.WaitGroup, ctx *ExecuteContext, index int, totalReleasedResource *ReleaseResource, EvictPods EvictPods) (errPodKeys []string, released ReleaseResource)
}
用户可以自行定义自己的metric,在构造完成后,通过registerMetricMap()进行注册
针对需要自定义的指标,可以通过实现如下的方法,搭配通用的排序方法即可方便地实现pod的灵活自定义排序,以代表自定义metric指标,
func <metric>Sorter(pods []podinfo.PodContext) {
orderedBy(classAndPriority, <metric-sort-func>, runningTime).Sort(pods)
}
其中<metric-sort-func>
需要实现如下的排序方法
func (p1, p2 podinfo.PodContext) int32