如何开发 Recommender
介绍 Recommender 框架以及如何进行开发和扩展
Recommendation Framework 提供了一套可扩展的 Recommender 框架并支持了内置的 Recommender,用户可以实现一个自定义的 Recommender,或者修改一个已有的 Recommender。
Recommender Interface
type Recommender interface {
Name() string
framework.Filter
framework.PrePrepare
framework.Prepare
framework.PostPrepare
framework.PreRecommend
framework.Recommend
framework.PostRecommend
framework.Observe
}
// Phase: Filter
// Filter interface
type Filter interface {
// The Filter will filter resource can`t be recommended via target recommender.
Filter(ctx *RecommendationContext) error
}
// Phase: Prepare
// PrePrepare interface
type PrePrepare interface {
CheckDataProviders(ctx *RecommendationContext) error
}
// Prepare interface
type Prepare interface {
CollectData(ctx *RecommendationContext) error
}
type PostPrepare interface {
PostProcessing(ctx *RecommendationContext) error
}
// PreRecommend interface
type PreRecommend interface {
PreRecommend(ctx *RecommendationContext) error
}
// Phase: Recommend
// Recommend interface
type Recommend interface {
Recommend(ctx *RecommendationContext) error
}
// PostRecommend interface
type PostRecommend interface {
Policy(ctx *RecommendationContext) error
}
// Phase: Observe
// Observe interface
type Observe interface {
Observe(ctx *RecommendationContext) error
}
Recommender 接口定义了一次推荐需要实现的四个阶段和八个扩展点。这些扩展点会在推荐过程中按顺序被调用。这些扩展点中的的一些可以改变推荐决策,而另一些仅用来提供信息。
架构
阶段
整个推荐过程分成了四个阶段:Filter,Prepare,Recommend,Observe。阶段的输入是需要分析的 Kubernetes 资源,输出是推荐的优化建议。 下面开始介绍每个阶段的输入、输出和能力。
RecommendationContext
保存了一次推荐过程中的上下文,包括推荐目标,RecommendationConfiguration 等,用户可以按需增加更多的内容。
Filter
Filter 阶段用于预处理推荐数据。通常,在预处理时需判断推荐目标是否和 Recommender 匹配,比如,Resource Recommender 只支持处理 Workload(Deployment,StatefulSet)。除此之外,还可以判断推荐目标状态是否适合推荐,比如是否删除中,是否刚创建等。当返回 error 会终止此次推荐。BaseRecommender 实现了基本的预处理功能,用户可以调用它继承相关功能。
Prepare
Prepare 阶段用于数据准备,请求外部监控系统并将时序数据保存在上下文中。PrePrepare 扩展点用于检测监控系统的链接情况。Prepare 扩展点用于查询时序数据。PostPrepare 扩展点用于对时序数据的数据处理,比如:应用冷启动的异常数据,部分数据的缺失,数据聚合,异常数据清理等。
Recommend
Recommend 阶段用于基于时序数据和资源配置进行优化建议。优化建议的类型取决于推荐的类型。比如,如果是资源推荐,那么输出就是 kubernetes workload 的资源配置。Recommend 扩展点用于采用 Crane 的算法模块对数据进行分析计算,PostRecommend 阶段对分析结果进行最后处理。用户可以自定义 Recommend 阶段实现自定义的推荐结果。
Observe
Observe 阶段用于推荐结果的可观测。比如,在资源推荐时,将优化建议的信息通过 Metric 保存到监控系统,再通过 Dashboard 观测优化建议带来的收益。