我试图使用kubebuilder ComponentConfig为Kubernetes操作符添加自定义配置,但我收到了下面提到的错误:
错误设置无法加载配置文件{“错误”:“无法将文件解码为runtime.Object"}
我将configFile
的值设置为config/manager/controller_manager_config.yaml
,因为默认情况下它是一个空字符串:
var configFile string
flag.StringVar(&configFile, "config", "config/manager/controller_manager_config.yaml",
"The controller will load its initial configuration from this file. "+
"Omit this flag to use the default configuration values. "+
"Command-line flags override configuration from this file.")
var err error
var options ctrl.Options
ctrlConfig := v1alpha1.ProjectConfig{}
if configFile != "" {
options = ctrl.Options{Scheme: scheme}
c := ctrl.ConfigFile().AtPath(configFile).OfKind(&ctrlConfig)
options, err = options.AndFrom(c)
if err != nil {
setupLog.Error(err, "unable to load the config file")
os.Exit(1)
}
}
我没有粘贴我所做的所有更改,因为我还试图从kubebuilder的存储库中运行例句,结果是相同的。
当我尝试在不使用OfKind
的情况下加载选项时,这些选项将正确加载:
c := ctrl.ConfigFile().AtPath(configFile) //.OfKind(&ctrlConfig)
options, err = options.AndFrom(c)
它是包中的一个bug还是我的configFile
设置不当,因为这是我在示例项目中唯一更改的东西。使用过的软件包的完整列表是可用的这里。
require (
k8s.io/apimachinery v0.23.5 // for `kubebuilder alpha config-gen`
sigs.k8s.io/controller-runtime v0.11.2
sigs.k8s.io/controller-tools v0.8.0 // for `kubebuilder alpha config-gen`
sigs.k8s.io/kustomize/kyaml v0.13.6 // for `kubebuilder alpha config-gen`
sigs.k8s.io/yaml v1.3.0
)
projectconfig_types.go:
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
cfg "sigs.k8s.io/controller-runtime/pkg/config/v1alpha1"
)
// +kubebuilder:object:root=true
// ProjectConfig is the Schema for the projectconfigs API
type ProjectConfig struct {
metav1.TypeMeta `json:",inline"`
// ControllerManagerConfigurationSpec returns the configurations for controllers
cfg.ControllerManagerConfigurationSpec `json:",inline"`
ClusterName string `json:"clusterName,omitempty"`
}
func init() {
SchemeBuilder.Register(&ProjectConfig{})
}
谢谢。
发布于 2022-06-28 08:08:46
我想你也面临着和我一样的问题。如果您遵循https://book.kubebuilder.io/component-config-tutorial/define-custom-config.html,那么文档中就有一个错误(或者不清楚)。ApiVersion和Kind不应该是:
apiVersion: controller-runtime.sigs.k8s.io/v1alpha1
kind: ControllerManagerConfig
...but:
apiVersion: config.tutorial.kubebuilder.io/v2
kind: ProjectConfig
我浪费了一整天才弄清楚这件事:/ (我觉得自己是个白痴;)
发布于 2022-06-30 11:39:13
首先,必须使用component-config选项插入项目,或者进行更改以使其与:https://book.kubebuilder.io/component-config-tutorial/api-changes.html一起工作。
之后,如果您想传递其他规范,则需要构建一个自定义类型:https://book.kubebuilder.io/component-config-tutorial/custom-type.html
在尝试使用此功能之前,请确保您从初学者那里了解并阅读了整个教程。
https://stackoverflow.com/questions/72401320
复制相似问题