我们编写了一些 Go 代码来与我们的 Kubernetes 集群对话并获取暴露的服务的 IP。我们这样做:
(import "gopkg.in/kubernetes/kubernetes.v1/pkg/client/restclient")
(import kubectl "gopkg.in/kubernetes/kubernetes.v1/pkg/client/unversioned")
svc, err := c.Services(k8sNS).Get(svcName)
if err != nil {
panic(l.Errorf("Could not retrieve svc details. %s", err.Error()))
}
svcIP := svc.Status.LoadBalancer.Ingress[0].IP
go get
工作正常,我们的脚本在我们执行 go run ...
时执行,大家都很高兴。现在,截至昨天(从发布此问题时起)在同一脚本上 - go get
失败。错误是这样的:
[09.07.2016 10:56 AM]$ go get
package k8s.io/kubernetes/pkg/apis/authentication.k8s.io/install: cannot find package "k8s.io/kubernetes/pkg/apis/authentication.k8s.io/install" in any of:
/usr/local/go/src/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/install (from $GOROOT)
/home/ckotha/godir/src/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/install (from $GOPATH)
我们没有在代码中专门使用authentication
包。我们是否正确导入了 kubernetes 库?还有其他方法吗?
ls
在 $GOPATH/k8s.io/kubernetes/pkg/apis/
上发现了这个:
:~/godir/src/k8s.io/kubernetes/pkg/apis
[09.07.2016 10:53 AM]$ ls
abac apps authentication authorization autoscaling batch certificates componentconfig extensions imagepolicy OWNERS policy rbac storage
最佳答案
看起来您导入的包发生了变化。
您可以更新现有的存储库:
go get -u
The -u flag instructs get to use the network to update the named packages and their dependencies. By default, get uses the network to check out missing packages but does not use it to look for updates to existing packages.
你确实使用了gopkg.io将版本固定到 v1,但我认为你想要更具体,例如 v1.3.6(编辑:这不起作用,因为 gopkg.in 不允许包选择器比主要版本更具体。)。
或者,确保代码保持不变的一个好方法是编译二进制文件并执行它,而不是使用 go run
。
关于go - K8s Go 客户端库无法在 go get 上找到包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39376548/