登录
首页 >  Golang >  Go问答

创建/获取自定义 kubernetes 资源

来源:Golang技术栈

时间:2023-04-10 10:05:09 415浏览 收藏

哈喽!今天心血来潮给大家带来了《创建/获取自定义 kubernetes 资源》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到golang,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

我想用 go 创建一个自定义的 kubernetes 资源。该应用程序部署在 Kubernetes 集群中。我想创建例如以下资源:

    apiVersion: configuration.konghq.com/v1
    kind: KongPlugin
    metadata:
      name: add-response-header
    config:
      add:
        headers:
        - "demo: injected-by-kong"
    plugin: response-transformer

到目前为止,我总是使用以下代码创建“标准”资源,例如秘密:

     CreateSecret(name string, data map[string]string) error {
 confs, err := rest.InClusterConfig()
        if err != nil {
            panic(err)
        }
        clientset, err = kubernetes.NewForConfig(confs)
        i := clientset.CoreV1()
        if _, err := i.Secrets(namespace).Create(&v1.Secret{
            TypeMeta:   metav1.TypeMeta{
                Kind:       "Secret",
                APIVersion: "v1",
            },
            ObjectMeta: metav1.ObjectMeta{
                Name:   name,
            },
            StringData: data,
            Type:       "Opaque",
        }); err != nil {
            return err
        }
}

此外,我尝试使用以下代码获取资源:

b, err := clientset.RESTClient().Get().Namespace(namespace).Resource("KongPlugin").DoRaw()

我得到以下错误:

the server could not find the requested resource (get KongPlugin)

如果我在命令行发出请求,k get KongPlugin我可以看到所有资源。

NAME                PLUGIN-TYPE           AGE
add-proxy-headers   request-transformer   3h34m

那么如何查看自定义资源呢?

正确答案

RESTClient馃憞馃徏

Get:

您必须完全指定自定义资源的路径。使用fluent界面

data, err := clientset.RESTClient().
        Get().
        AbsPath("/apis//").
        Namespace("").
        Resource("kongplugins").
        Name("kongplugin-sample").
        DoRaw(context.TODO())

或手动指定

data, err := clientset.RESTClient().
        Get().
        AbsPath("/apis///namespaces//kongplugins/kongplugin-sample").
        DoRaw(context.TODO())

您可以AbsPathselfLink自定义资源中找到。

Create:

例如,您可以post封送数据使用AbsPath

kongPlugin := &KongPlugin{
        TypeMeta: metav1.TypeMeta{
            APIVersion: "/",
            Kind:       "KongPlugin",
        },
        ObjectMeta: metav1.ObjectMeta{
            Name:      "kongplugin-sample",
            Namespace: "",
        },
        ...}}

body, err := json.Marshal(kongPlugin)

data, err := clientset.RESTClient().
        Post().
        AbsPath("/apis///namespaces//kongplugins").
        Body(body).
        DoRaw(context.TODO())

由于arg该方法Body(obj interface{})是一个空接口,您可以根据文档使用不同类型的参数: [k8s.io/client- go/rest - func (*Request) Body](https://godoc.org/k8s.io/client- go/rest#Request.Body)

理论要掌握,实操不能落!以上关于《创建/获取自定义 kubernetes 资源》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表