【问题标题】:OpenShift API - cannot use configOpenShift API - 无法使用配置
【发布时间】:2018-12-24 05:50:30
【问题描述】:

我正在尝试通过 Go API 从正在运行的 pod 内部连接到 OpenShift/K8s 集群。因此,我正在关注here 的教程。

目前,我在创建 OpenShift 构建客户端时遇到问题,其构造函数获取先前创建的 rest.InClusterConfig() 作为参数。这应该工作,因为它显示在示例中,但我收到此错误:

cannot use restconfig (type *"k8s.io/client-go/rest".Config) as type *"github.com/openshift/client-go/vendor/k8s.io/client-go/rest".Config in argument to "github.com/openshift/client-go/build/clientset/versioned/typed/build/v1".NewForConfig

我有点困惑,因为rest.InClusterConfig() 返回一个*Config。这在 corev1client.NewForConfig() 中被接受,它需要 *rest.Config。但buildv1client.NewForConfig() 也需要*rest.Config - 但不完全是我用rest.InClusterConfig() 创建的restconfig。

我的错误在哪里?加分项:我正在使用 API 迈出第一步,它应该做的就是从应用了一些参数的图像生成第二个 pod。我需要buildv1client 客户端吗?这几乎是 Kubernetes 的核心功能。

【问题讨论】:

    标签: go kubernetes openshift


    【解决方案1】:

    问题是该包存在于vendor/ 的vendored 文件夹中,也存在于您的$GOPATH 中。供应商"github.com/openshift/client-go" 应该可以解决您的问题。

    回答你的第二个问题,对于你描述的用例,不是真的。如果要创建 OpenShift 构建,那么是的,您需要使用客户端,因为 Kubernetes 中不存在此 API 对象。如果您只想创建一个 Pod,那么您不需要构建客户端。 API reference 的一个简单示例如下所示:

    package main
    
    import (
        "k8s.io/api/core/v1"
        "k8s.io/client-go/tools/clientcmd"
    
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        corev1client "k8s.io/client-go/kubernetes/typed/core/v1"
    )
    
    func main() {
        kubeconfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
            clientcmd.NewDefaultClientConfigLoadingRules(),
            &clientcmd.ConfigOverrides{},
        )
        namespace, _, err := kubeconfig.Namespace()
        if err != nil {
            panic(err)
        }
        restconfig, err := kubeconfig.ClientConfig()
        if err != nil {
            panic(err)
        }
        coreclient, err := corev1client.NewForConfig(restconfig)
        if err != nil {
            panic(err)
        }
    
        _, err = coreclient.Pods(namespace).Create(&v1.Pod{
            ObjectMeta: metav1.ObjectMeta{
                Name: "example",
            },
            Spec: v1.PodSpec{
                Containers: []v1.Container{
                    {
                        Name:    "ubuntu",
                        Image:   "ubuntu:trusty",
                        Command: []string{"echo"},
                        Args:    []string{"Hello World"},
                    },
                },
            },
        })
        if err != nil {
            panic(err)
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-17
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 2022-12-23
      • 2019-11-10
      • 1970-01-01
      • 2015-08-29
      • 1970-01-01
      相关资源
      最近更新 更多