我们来在ARM系统架构平台上K8s跑TIDB

请安装 cmake

我使用了1.03的版本 但是还是报一样的错误

make
GO15VENDOREXPERIMENT="1" GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags '-s -w -X 'github.com/pingcap/tidb-operator/version.buildDate=2019-12-04T07:46:41Z'' -o images/tidb-operator/bin/tidb-controller-manager cmd/controller-manager/main.go
go: github.com/russross/blackfriday@v1.5.2+incompatible: reading https://goproxy.io/github.com/russross/blackfriday/@v/v1.5.2+incompatible.mod: 410 Gone
Makefile:37: recipe for target 'controller-manager' failed
make: *** [controller-manager] Error 1

 root@kylin:/usr/local/denali-tidb/tidb-operator-1.0.3# go build
go: github.com/russross/blackfriday@v1.5.2+incompatible: reading https://goproxy.io/github.com/russross/blackfriday/@v/v1.5.2+incompatible.mod: 410 Gone

 root@kylin:/usr/local/denali-tidb/tidb-operator-1.0.3# 

  root@kylin:/usr/local/denali-tidb/tidb-operator-1.0.3# go version
go version go1.13.4 linux/arm64

好的,已经在查看,会尽快回复,多谢

你好,经过检查,目前 tidb-operator release 1.0.* 还有着 russross/blackfriday 的间接依赖,但 master 分支已经移除了这个间接依赖。

你可以尝试拉取 master 分支,目前 master 分支的 go.mod 已经移除了对 russross/blackfriday 的间接依赖

另外,在 operator 根目录下执行 make build,默认编译是 amd64 架构的,你可以通过复制编译指令并修改 GOARCH 的值来编译 arm 架构。

pingcap/rust的Dockerfile

构建错误了·

依赖的google的类库找不到了· 这两个是否是必须的·

Hi,

首先不推荐使用 TiKV 官方的 dockerfile 编译 TiKV,原因是我们目前还没有针对 ARM 编译的标准化流程,dockerfile 对 ARM 的支持度就更加存疑了,建议直接使用 cargo build 来编译(使用 cargo build --release 编译 production 版本,具体各种 flag 见 cargo 文档)。

你上边发的 cargo 编译到一半失败的原因是缺少 cmake,可以安装 cmake 后重试,如果还有后续其他编译错误都可以发出来(或者如果仅仅是缺少什么东西的话可以尝试自己装一下)。

编译 TiKV 的时候还可以参考一下这篇文章:https://www.jianshu.com/p/e07928fb7577

PS: 由于 TiKV 不断有版本更新,文章不一定能直接跑通,可能部分内容已经过时,目前仅供参考

亲回复的是那个问题呢 ·· 能否针对我上一个编译的pingcap/rust问题进行回答·· 这还没有到cmake的步骤 好吗? 是在拉取google的库的时候超时了··

我目前最终的目的是要构建ARM架构的docker镜像·

TIVK的ARM二进行文件文件我已经编成了 现在是准备进行docker镜像 。看官方的dockerfile是依赖了pingcap/rust基础镜像。所以我先编ping/rust的基础镜像。

要是提供的不是打docker镜像的案例 对我一点都没有用·。。 要发示例最好能找些doccker在ARM架构下·跑TIdb的实例给我·

亲是tidb的官方老师吗? 如果pingcap/rust这个基础镜像DockerFile太旧了 麻烦帮我找一下新的DockerFile

可以先编译出一个 arm64 下的 binary,然后再直接怼到一个 Dockerfile 里面就可以了:

FROM arm64v8/centos:7
ADD bin/tikv-server /tikv-server

对于 tidb-operator 也一样,因为是 Go 项目跨平台编译非常方便,直接在你 mac 或者 linux 下就可以指定 GOOS=linux GOARCH=arm64 然后把编译出来的 binary 加到基础镜像里面就 OK 了。

你讲的我明白,讲起来很简单,你要不要试试~ :smile: 一起来搞搞··

其实还很多依赖的。官方的Dockerfile写的内容还是比较多
· tikv的arm二进制我编出来了
现在参照官方得先编pingcap/rust基础镜像。。

arm binary 编译出来后,你在 arm 平台启动一个 centos 的容器试试:

docker run -it --rm $PWD/bin/tikv-server:/tikv-server arm64v8/centos:7
/tikv-server --version

我们 tikv 官方项目里面提供的 Dockerfile 是用来编译 tikv 用的,不是运行 tikv 用的。 如果上面命令运行没问题,你就按我说的把 tikv-server add 到 arm64v8/centos:7 里面做成 tikv 镜像,在 arm 版的 k8s 上跑就没问题。

官方 Dockerfile 为了减小镜像体积用了 alpine 基础镜像并且里面塞了 glibc 的运行时,这个基础镜像移植到 arm 下比较麻烦,建议直接用 centos 作为基础镜像,可以省很多事。

GOARCH=arm make

GO15VENDOREXPERIMENT=“1” CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -trimpath -ldflags ‘-s -w -X ‘github.com/pingcap/tidb-operator/pkg/version.buildDate=2019-12-04T10:28:27Z’ -X ‘github.com/pingcap/tidb-operator/pkg/version.gitCommit=8714a53653428f706ae21a6a4abb725b07820f5f’ -X ‘github.com/pingcap/tidb-operator/pkg/version.gitTreeState=clean’ -X ‘github.com/pingcap/tidb-operator/pkg/version.gitVersion=v1.1.0-alpha.4.20+8714a53653428f’’ -o images/backup-manager/bin/tidb-backup-manager cmd/backup-manager/main.go go: downloading k8s.io/kubectl v0.0.0-20190918164019-21692a0861df go: downloading github.com/go-sql-driver/mysql v1.4.0 go: downloading github.com/mholt/archiver v3.1.1+incompatible go: extracting github.com/go-sql-driver/mysql v1.4.0 go: extracting github.com/mholt/archiver v3.1.1+incompatible go: downloading github.com/dsnet/compress v0.0.1 go: downloading github.com/pierrec/lz4 v2.0.5+incompatible go: downloading github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 go: downloading github.com/nwaples/rardecode v1.0.0 go: downloading github.com/ulikunitz/xz v0.5.6 go: finding github.com/go-sql-driver/mysql v1.4.0 go: finding github.com/mholt/archiver v3.1.1+incompatible build command-line-arguments: cannot load github.com/dsnet/compress/bzip2: github.com/dsnet/compress@v0.0.1: Get https://goproxy.io/github.com/dsnet/compress/@v/v0.0.1.zip: read tcp 10.1.52.2:33812->47.244.219.218:443: read: connection reset by peer Makefile:61: recipe for target ‘backup-manager’ failed make: *** [backup-manager] Error 1

tidb-operator 编译的时候报了错误 似乎是拉取compress库 找不到 求解决办法

这是 connection reset 了,你用国内的 goproxy 试试 export GOPROXY=https://goproxy.cn 具体可参考 https://github.com/goproxy/goproxy.cn

没详细的输出了 是怎么回事呢

从截图看 binary 已经编译完成了,把 images/tidb-operator/Dockerfile 的 from base image 换一下就可以构建 docker 镜像了

没有的啊 因为bin目录都没有生成 。没有构建出二进制包

images/tidb-operator/bin 目录下没有生成对应 binary 么?