重新编译prometheus-kafka-adapter源码,构建镜像

1.github

https://github.com/Telefonica/prometheus-kafka-adapter

 

2.dockerfile

FROM golang:1.17.5-alpine3.15
ENV GO111MODULE=on \
    GOPROXY="https://goproxy.cn,direct"
COPY prometheus-kafka-adapter-1.8.0 /apps/prometheus-kafka-adapter-1.8.0
WORKDIR /apps/prometheus-kafka-adapter-1.8.0
RUN apk add --no-cache gcc musl-dev
#这条命令应该可以解决静态库和动态库的问题,具体待研究
RUN go build -ldflags='-w -s -extldflags "-static"' -tags musl,static,netgo -mod=vendor -o prometheus-kafka-adapter COPY prometheus-kafka-adapter-1.8.0/schemas/metric.avsc /schemas/metric.avsc RUN cp /apps/prometheus-kafka-adapter-1.8.0/prometheus-kafka-adapter /bin/prometheus-kafka-adapter WORKDIR /apps/prometheus-kafka-adapter-1.8.0 CMD /bin/prometheus-kafka-adapter

 

arm版本的编译

在使用arm版本的基础镜像来编译prometheus-kafka-adapter-1.8.0时,会有如下报错:

#0 126.8 /usr/bin/ld: /go/pkg/mod/github.com/confluentinc/confluent-kafka-go@v1.9.0/kafka/librdkafka_vendor/librdkafka_glibc_linux.a(rdkafka_error.o): Relocations in generic ELF (EM: 62) 
#0 126.8 /usr/bin/ld: /go/pkg/mod/github.com/confluentinc/confluent-kafka-go@v1.9.0/kafka/librdkafka_vendor/librdkafka_glibc_linux.a(rdkafka_error.o): Relocations in generic ELF (EM: 62)
#0 126.8 /usr/bin/ld: /go/pkg/mod/github.com/confluentinc/confluent-kafka-go@v1.9.0/kafka/librdkafka_vendor/librdkafka_glibc_linux.a: error adding symbols: file in wrong format

可参考:https://github.com/confluentinc/confluent-kafka-go/issues?q=arm

 

这是因为prometheus-kafka-adapter-1.8.0引用的github.com/confluentinc/confluent-kafka-go依赖是v1.8.2版本的,这个版本是不支持在arm环境下编译的。

通过github.com/confluentinc/confluent-kafka-go的releases可知,从v2.0.2版本可以支持arm环境下编译。

所以需要把prometheus-kafka-adapter-1.8.0引用的github.com/confluentinc/confluent-kafka-go依赖改为v2.0.2以上版本即可。

 

1.删除prometheus-kafka-adapter-1.8.0文件夹下的go.sum文件和vendor文件夹

2.修改handlers.go文件和main.go文件依赖的github.com/confluentinc/confluent-kafka-go

#原来
"github.com/confluentinc/confluent-kafka-go/kafka"

#修改为
"github.com/confluentinc/confluent-kafka-go/v2/kafka"

3.修改go.mod文件

#原来
github.com/confluentinc/confluent-kafka-go v1.8.2

#修改为
github.com/confluentinc/confluent-kafka-go/v2 v2.1.1

4.在prometheus-kafka-adapter-1.8.0文件夹下执行命令,重新生成go.sum文件和vendor文件夹

go mod vendor

5.dockerfile

FROM golang:1.17.5-alpine3.15
ENV GO111MODULE=on \
    GOPROXY="https://goproxy.cn,direct"
COPY prometheus-kafka-adapter-1.8.0 /apps/prometheus-kafka-adapter-1.8.0
WORKDIR /apps/prometheus-kafka-adapter-1.8.0
#arm版本可以不用apk add
#RUN apk add --no-cache gcc musl-dev
#执行go build就行
RUN go build
# -ldflags='-w -s -extldflags "-static"' -tags musl,static,netgo -mod=vendor -o prometheus-kafka-adapter
COPY prometheus-kafka-adapter-1.8.0/schemas/metric.avsc /schemas/metric.avsc
RUN cp /apps/prometheus-kafka-adapter-1.8.0/prometheus-kafka-adapter /bin/prometheus-kafka-adapter
WORKDIR /apps/prometheus-kafka-adapter-1.8.0
CMD /bin/prometheus-kafka-adapter

 

posted @ 2022-08-28 18:53  wdgde  阅读(440)  评论(0)    收藏  举报