【问题标题】:not able to get the client-go from k8s无法从 k8s 获取客户端
【发布时间】:2017-03-24 15:54:46
【问题描述】:

我已经尝试了我能想到的所有可能的路径,但我无法将基本示例与 kubernetes 和 Go lang 一起使用。我对所有的 Godeps、gilde、govendor 都是新手,我会给自己一个,但即便如此我也不知道如何简单地获取示例文件中这样引用的这个包 -

"k8s.io/client-go/1.4/kubernetes"
    "k8s.io/client-go/1.4/pkg/api"
    "k8s.io/client-go/1.4/tools/clientcmd"

确切地说,这就是这里写的 - https://github.com/kubernetes/client-go/tree/release-1.5

如何获得

您可以 go get 获取 client-go 的版本,例如 go get k8s.io/client-go/1.4/... 或者去获取 k8s.io/client-go/1.4/kubernetes。

现在当我这样做时。这是输出 -

警告:“k8s.io/client-go/1.4/...”匹配没有包无法加载 包:包。:没有可构建的 Go 源文件 /Users/shubhadeeproychowdhury/projects/go/src

虽然它在我的 GOPATH 中的 src 下一个名为 k8s 的目录中克隆了东西。

最后在同一个链接中,他们谈论了依赖管理和事情,他们指的是 client-do 目录下的目录 1.4。我在克隆的 k8s 目录中的任何地方都看不到该目录。

我已经尝试安装基本软件包并运行示例代码两天了,但我做不到。我真的感到尴尬和奇怪。任何人都可以帮助我提供有关如何开始的清晰分步说明吗?

注意 - 1:我有几个其他的 Go 项目,到目前为止我还没有使用依赖管理。我不想为了尝试安装和使用这个项目而弄乱我的其他项目。我相信有办法。

注意 - 2:我找到了这个链接 - Samples on kubernetes golang client 但它没有向我解释如何克服主要障碍,在我的 Go 工作区中获取它并运行示例代码。

Kubernetes 人,如果您在听,请尽可能在您的文档中更详细一点。我很乐意帮忙,只是我现在不知道如何迈出第一步。

请帮忙

【问题讨论】:

  • 来自主自述文件:If you use go get to get client-go, you will get the unstable master branch! You can git checkout a stable branch. 不使用任何依赖管理或供应商工具,只需在本地签出您想要的版本分支。正确的子目录将在那里。
  • 我厌倦了。这就是我所做的@JimB - 1.> 我 git 克隆 repo (github.com/kubernetes/client-go),2.> 我获取了 release-1.5 分支,3.> 我 git checkout 到那个分支。你看问题依然存在。该分支的示例文件夹实际上是指从这个“k8s.io/client-go/1.4/”路径导入。它当然不存在,除非我亲自将 1.5(或 1.4)目录粘贴到一个新的目录树中,就像这样 - src/k8s.io 我觉得这很奇怪。我确信有一些方法。我只需要了解/获取一步一步的说明即可开始。
  • 听起来很奇怪,像我上面所说的那样在目录树中手动复制该文件夹似乎有效。我不确定,我还得好好测试一下。
  • 它就是这样工作的。一旦我手动创建了该目录树,govendor 也可以完美运行!我不确定我是否遗漏了某些东西,或者实现中存在尚未反映在文档中的重大更改,或者更改已正确反映,但代码库不起作用,或者......我和你一样有点困惑可以看到。但至少我可以按照我在第一条评论中描述的方式让它发挥作用。
  • 您根本不应该更改 k8s.io 包代码。如果示例是为 1.4 分支编写的,则检查 1.4 分支。通过将 1.5 分支复制到 1.4 目录,您将破坏这些版本之间所做的任何 API 更改。

标签: go client kubernetes


【解决方案1】:

我自己也有同样的问题。以前我只需要go get k8s.io/client-go/1.4/kubernetes 就可以了。现在失败了:

package k8s.io/client-go/1.4/kubernetes: cannot find package "k8s.io/client-go/1.4/kubernetes" in any of:

虽然文档提到使用包管理工具,但我不想使用它们,因为 Go 本身已经有供应商目录。我可以通过这样做来解决这个问题:

  1. 在您的项目根目录中创建vendor 目录。
  2. 在供应商目录中创建k8s.io 目录。这是为了修复从库到自身的引用。
  3. k8s.io目录下做git clone https://github.com/kubernetes/client-go.git
  4. client-go 目录中执行git checkout v1.5.0(或您想要的版本)。签出很重要,因为 v1.4/v1.5 仅在特定提交中。比如师父就没有这些了。
  5. 在您的项目导入中使用k8s.io/client-go/1.5/kubernetes

【讨论】:

  • 我最终所做的和我试图在我的 cmets 中解释的过程完全相同。尽管我在与供应商不同的目录中克隆并检查了 repo,然后使用 govendor 并且它可以检测到它(因为正确的目录树,正如你所提到的,存在)然后它在我的供应商目录中为我复制它。但是你的方法也很好。由于它是一步一步的指南,因此最好理解。希望这能帮助遇到同样问题的人。
【解决方案2】:

假设您已经存在 glide.yaml,请执行 glide get [package-name]。 在您的情况下 glide get k8s.io/client-go/1.4/kubernetes 应该可以解决问题。

【讨论】:

    猜你喜欢
    • 2019-07-10
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2014-04-13
    • 2012-10-14
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    相关资源
    最近更新 更多