2

我正在创建一个工具,它将使用 yaml 文件创建 kubernetes 对象。我是用golang写的。该工具希望实现与kubectl apply -f test.yaml

4

2 回答 2

1

基本上,最快的方法是使用像官方go client这样的现有库。

本质上,kubectl也使用了 client-go,所以你也可以按照它的源代码作为指导。

您还可以使用k8s,它是另一个 K8s go 客户端。

于 2019-07-30T21:41:58.230 回答
0

kubectl 源代码很难理解,特别是当它涉及到许多非固定对象类型来创建时,如何将 yaml 解析为 go 对象(我得到了这个工作,但需要手动切换大小写才能转换为真正的 go 类型,这是一个单一的类型)。

这是秘密创建代码,是否有一些通用的创建可以传递不同对象的列表?或者更好,只是简单的 yaml 字符串

    secretClient := client.CoreV1().Secrets("default")

    result, err := secretClient.Create(secret)

链接:https ://sourcegraph.com/github.com/kubernetes/kubectl@master/-/blob/pkg/cmd/apply/apply.go#L328:22&tab=def

func (o *ApplyOptions) GetObjects() ([]*resource.Info, error) {
    var err error = nil
    if !o.objectsCached {
        // include the uninitialized objects by default if --prune is true
        // unless explicitly set --include-uninitialized=false
        r := o.Builder.
            Unstructured().
            Schema(o.Validator).
            ContinueOnError().
            NamespaceParam(o.Namespace).DefaultNamespace().
            FilenameParam(o.EnforceNamespace, &o.DeleteOptions.FilenameOptions).
            LabelSelectorParam(o.Selector).
            Flatten().
            Do()
        o.objects, err = r.Infos()
        o.objectsCached = true
    }
    return o.objects, err
}

迷路了r.Infos,不确定它在哪里定义。

于 2020-06-08T08:05:26.017 回答