优化 Docker 构建时间

问题描述

今天看了一下我的一个 Go 的两个服务的构建时间,觉得不是非常满意。这两个服务分别为 server 端 和 worker 端,在使用了多阶段构建的情况下,每次全量编译出两个镜像需要 2.5min,由于两个服务基本属于通过代码结构可以共用代码的形式,只有 entrypoint 稍有不同,所以镜像的构建步骤只有略有不同。观察 docker 镜像的构建日志发现,即便是相同构建命令的 commit 也并没有 use-cache,于是感觉还是有优化空间的。

解决 etcd 与 grpc 不兼容问题

今天遇到了一个 Golang 的依赖问题,在一个使用了 Protobuf 的项目,引入了 Prometheus 的 Package 之后编译时发现 etcd 报错:

# github.com/coreos/etcd/clientv3/balancer/resolver/endpoint
../../go/pkg/mod/github.com/coreos/etcd@v3.3.18+incompatible/clientv3/balancer/resolver/endpoint/endpoint.go:114:78: undefined: resolver.BuildOption
../../go/pkg/mod/github.com/coreos/etcd@v3.3.18+incompatible/clientv3/balancer/resolver/endpoint/endpoint.go:182:31: undefined: resolver.ResolveNowOption
# github.com/coreos/etcd/clientv3/balancer/picker
../../go/pkg/mod/github.com/coreos/etcd@v3.3.18+incompatible/clientv3/balancer/picker/err.go:37:44: undefined: balancer.PickOptions
../../go/pkg/mod/github.com/coreos/etcd@v3.3.18+incompatible/clientv3/balancer/picker/roundrobin_balanced.go:55:54: undefined: balancer.PickOptions

根据问题搜索到 issue:clientv3: grpc-go (v1.27.0) made API changes to balancer / resolver. #11563,依据里面的方法将 grpc 降级到 v1.2.6.0

Kubernetes 部署 ElasticSearch7 集群

组建 ES 集群

在 Kubernetes 集群上部署 ElasticSearch 的时候,我先按照网上的经验指南,发现 ES 节点之间无法互相发现,不能够组成集群。

对比后发现,我使用的 ES 版本是7.2,而目前我参照的大部分网页都是 6.8的。在 7.0 之前的协调方式是配置discovery.zen.minimum_master_nodes,让集群自行选举为指定数量的 master 节点。