Agonesを使ってGoからゲーム用サーバーの割当をしてみようと思って、GoでAgones Client APIを使ったものを組んでみた
それで早速 go run
してみたら、次のようなビルドエラーが出てしまった。
# k8s.io/client-go/rest ../../go/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)
どうやらk8s client libraryのコードの定義が合わないみたい。
k8s.io/client-go
だけを色々バージョン変えてみたけど、それだけだと別のエラーになってしまった
build command-line-arguments: cannot load k8s.io/api/admissionregistration/v1alpha1: module k8s.io/api@latest found (v0.17.0), but does not contain package k8s.io/api/admissionregistration/v1alpha1
解決策:ライブラリのバージョンを揃える
使っているAgonesは v1.1.0 なので、ドキュメントによるとKubernetesバージョンは v1.12
Usage Requirements Kubernetes cluster version 1.12
ということで、k8s関連のGoライブラリ( client-go
と apimachinery
)のバージョンをKubernetes v1.12系に揃えた。
$ go get k8s.io/client-go@kubernetes-1.12.9 $ go get k8s.io/apimachinery@kubernetes-1.12.9
これでビルドエラーは消えて動いた!!🎉
Kubernetesライブラリは大規模なので、一瞬「やばい。Go Modulesはよくトラブル起きるし、これは厄介な問題な気がする・・」と焦ったのだけど、 client-goのドキュメントにしっかり書いてあったのでよかった。
client-go/INSTALL.md at master · kubernetes/client-go · GitHub