k8s client-go 之 依赖问题解决(2)
记一次go mod依赖版本不一致的解决过程
克隆下client-go的工程,并checkout对应kubernetes版本上,可以直接使用example中的例子,但是在自定义开发时遇到了接口不一致问题,很明显这是依赖版本问题所致。
我们使用client-go/examples/create-update-delete-deployment的例子测试
测试环境
➜ k8s go version
go version go1.11.13 darwin/amd64
➜ k8s echo $GO111MODULE
on
测试流程
-
将main.go复制到$GOPATH/src/test/k8s下
-
在test/k8s中初始化mod,go mod init
➜ k8s go mod init go: creating new go.mod: module test/k8s ➜ k8s ls go.mod main.go
-
测试go run main.go,mod会自动下载依赖(需要开启代理)
➜ k8s go run main.go go: finding k8s.io/client-go/kubernetes latest go: finding k8s.io/client-go/util/homedir latest go: finding k8s.io/client-go/util/retry latest go: finding k8s.io/client-go/tools/clientcmd latest go: finding k8s.io/api/core latest go: finding k8s.io/api/apps latest go: finding k8s.io/client-go/util latest go: finding k8s.io/client-go/tools latest go: finding k8s.io/api latest go: finding k8s.io/apimachinery/pkg/apis/meta latest go: finding k8s.io/apimachinery/pkg/apis latest go: finding k8s.io/apimachinery/pkg latest go: finding k8s.io/apimachinery latest go: finding golang.org/x/time/rate latest go: finding golang.org/x/time latest go: finding golang.org/x/oauth2 latest go: finding k8s.io/utils/integer latest go: finding k8s.io/utils latest # k8s.io/client-go/rest ../../../pkg/mod/k8s.io/client-go@v11.0.0+incompatible/rest/request.go:598:31: not enough arguments in call to watch.NewStreamWatcher have (*versioned.Decoder) want (watch.Decoder, watch.Reporter)
测试结果
第3步,go run main.go 报出接口不一致,再看下载的依赖全是latest的。
之前我们测试client-go时已经切换到tag kubernetes-1.14.6上,而go mod又拉取最先的依赖,这就造成了版本不一致。
解决依赖
查看client-go@kubernetes-1.14.6的go.mod下的依赖
➜ client-go git:(7e43eff7) ✗ cat go.mod
module k8s.io/client-go
require