如何在envtest测试环境中加载Metrics API?
在Kubebuilder的envtest中启用Metrics API
我正在构建一个包含垂直扩缩容组件的自定义Go/Kubebuilder Operator。我的Reconciler可以查询Metrics API获取Pod的基础内存和CPU指标,将其与阈值对比后修改所管理Pod的资源规格。
这段代码在真实集群中运行正常,我可以通过k8s.io/metrics Go API访问它,只要将其注册到Scheme,controller-runtime fake client就能正常工作。但Kubebuilder和fake client文档都强烈推荐优先使用envtest而非fake client,这正是我遇到问题的地方。
Metrics API文档指出:
Metrics API定义在k8s.io/metrics仓库中,必须启用API聚合层并为metrics.k8s.io API注册一个APIService。
我该如何在envtest配置中完成这些操作?目前我使用的是Kubebuilder提供的样板代码:
testEnv = &envtest.Environment{ CRDDirectoryPaths: []string{filepath.Join("..", "config", "crd", "bases")}, ErrorIfCRDPathMissing: true, } cfg, err := testEnv.Start()
需要注意的是,Metrics API并非自定义资源,没有对应的CustomResourceDefinition。样板代码包含安装Prometheus Operator的选项,但这似乎无法启用Metrics API。
内容的提问来源于stack exchange,提问作者David Maze
相关产品推荐
相关产品推荐

