最近开源的Prometheus解决方案kvass go mod报错解决

总览

  • 最进开源的Prometheus解决方案kvass go mod报错解决
    • 环境
    • 复现步骤
    • 报错展示
    • 报错分析
    • 解决
    • 后续

最进开源的Prometheus解决方案kvass go mod报错解决

最近在研究kvass项目,在里面做了一些调整后进行go build时报错,主要是go mod的依赖管理问题,报错和解决思路如下

环境

ubuntu18.04
go 1.14
k8s 1.15.1

复现步骤

git clone https://github.com/tkestack/kvass.git
cd kvass
go build -o main  cmd/kvass/*.go

报错展示

root@ubuntu:/workspace/gospace/kvass# go build -o maincmd/kvass/*.go 
/root/go/pkg/mod/github.com/prometheus/[email protected]/prompb/rpc.pb.go:13:2: 
/root/go/pkg/mod/google.golang.org/[email protected]/googleapis/api/annotations/annotations.pb.go:1:1: expected 'package', found 'EOF'
/root/go/pkg/mod/github.com/grpc-ecosystem/[email protected]/runtime/marshal_httpbodyproto.go:4:2: 
/root/go/pkg/mod/google.golang.org/[email protected]/googleapis/api/httpbody/httpbody.pb.go:1:1: expected 'package', found 'EOF'
/root/go/pkg/mod/google.golang.org/[email protected]/status/status.go:34:2: 
/root/go/pkg/mod/google.golang.org/[email protected]/googleapis/rpc/status/status.pb.go:1:1: expected 'package', found 'EOF'
/root/go/pkg/mod/github.com/grpc-ecosystem/[email protected]/runtime/fieldmask.go:10:2: 
/root/go/pkg/mod/google.golang.org/[email protected]/protobuf/field_mask/field_mask.pb.go:1:1: expected 'package', found 'EOF'

报错分析

报错expected 'package', found 'EOF'基本上是由于go mod下载依赖时没有把某些包下载完整导致,cat 一下报错的包,发现里面为空

root@ubuntu:/workspace/gospace/kvass# cat /root/go/pkg/mod/google.golang.org/[email protected]/googleapis/api/annotations/annotations.pb.go
root@ubuntu:/workspace/gospace/kvass# 

解决

更新一下报错的包

go get xxx

go get后若还存在该问题,使用replace指定版本来代替报错的版本

google.golang.org/genproto => google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d

若还不行,有一种比较暴力的办法(非首选,正式环境慎用),去报错的包对应的github仓库下找到对应版本的代码,复制到空白的xxx.go文件即可

最终完整可用的go.mod如下

module tkestack.io/kvass

go 1.14

require (
	github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 // indirect
	github.com/gin-contrib/pprof v1.3.0
	github.com/gin-gonic/gin v1.6.3
	github.com/go-kit/kit v0.10.0
	github.com/golang/protobuf v1.4.2 // indirect
	github.com/pkg/errors v0.9.1
	github.com/prometheus/common v0.9.1
	github.com/prometheus/prometheus v1.8.2
	github.com/sirupsen/logrus v1.7.0
	github.com/spf13/cobra v1.1.1
	github.com/stretchr/testify v1.5.1
	github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 // indirect
	go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738
	golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9
	google.golang.org/grpc v1.32.0 // indirect
	gopkg.in/yaml.v2 v2.2.8
	k8s.io/api v0.17.5
	k8s.io/apimachinery v0.17.5
	k8s.io/client-go v0.17.5
)

replace (
    github.com/prometheus/prometheus => github.com/prometheus/prometheus v0.0.0-20200507164740-ecee9c8abfd1
    google.golang.org/genproto => google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d
)

后续

后续会对kvass源码进行分析,敬请期待

你可能感兴趣的:(k8s,监控,Prometheus)