首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用组件配置的Kubebuilder项目-无法将文件解码为runtime.Object

使用组件配置的Kubebuilder项目-无法将文件解码为runtime.Object
EN

Stack Overflow用户
提问于 2022-05-27 06:28:53
回答 2查看 188关注 0票数 1

我试图使用kubebuilder ComponentConfig为Kubernetes操作符添加自定义配置,但我收到了下面提到的错误:

错误设置无法加载配置文件{“错误”:“无法将文件解码为runtime.Object"}

我将configFile的值设置为config/manager/controller_manager_config.yaml,因为默认情况下它是一个空字符串:

代码语言:javascript
运行
复制
    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的情况下加载选项时,这些选项将正确加载:

代码语言:javascript
运行
复制
c := ctrl.ConfigFile().AtPath(configFile) //.OfKind(&ctrlConfig)
options, err = options.AndFrom(c)

它是包中的一个bug还是我的configFile设置不当,因为这是我在示例项目中唯一更改的东西。使用过的软件包的完整列表是可用的这里

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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{})
}

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-28 08:08:46

我想你也面临着和我一样的问题。如果您遵循https://book.kubebuilder.io/component-config-tutorial/define-custom-config.html,那么文档中就有一个错误(或者不清楚)。ApiVersion和Kind不应该是:

代码语言:javascript
运行
复制
apiVersion: controller-runtime.sigs.k8s.io/v1alpha1
kind: ControllerManagerConfig

...but:

代码语言:javascript
运行
复制
apiVersion: config.tutorial.kubebuilder.io/v2
kind: ProjectConfig

我浪费了一整天才弄清楚这件事:/ (我觉得自己是个白痴;)

票数 1
EN

Stack Overflow用户

发布于 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

在尝试使用此功能之前,请确保您从初学者那里了解并阅读了整个教程。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72401320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档