为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【TiDB 版本】:
【问题描述】:构建pingcap/alpine-glibc对应的基础镜像
官方TIKV的运行依赖的基础镜像是pingcap/alpine-glibc ,这是不是必需是得依赖这样的一个基础镜像才能run起来的。
查看了一下docker hub的这个镜像我写出了下面这样一个构建ARM架构镜像的Dockerfile文件
FROM arm64v8/alpine:3.9
MAINTAINER lydeng yuandeng.lu@denalisystem.com
CMD [“/bin/sh”]
ENV LANG=C.UTF-8
Here we install GNU libc (aka glibc) and set C.UTF-8 locale as default.
RUN ALPINE_GLIBC_BASE_URL=“https://github.com/sgerrand/alpine-pkg-glibc/releases/download ” &&
ALPINE_GLIBC_PACKAGE_VERSION=“2.30-r0” &&
ALPINE_GLIBC_BASE_PACKAGE_FILENAME=“glibc-$ALPINE_GLIBC_PACKAGE_VERSION.apk” &&
ALPINE_GLIBC_BIN_PACKAGE_FILENAME=“glibc-bin-$ALPINE_GLIBC_PACKAGE_VERSION.apk” &&
ALPINE_GLIBC_I18N_PACKAGE_FILENAME=“glibc-i18n-$ALPINE_GLIBC_PACKAGE_VERSION.apk” &&
apk add --no-cache --virtual=.build-dependencies wget ca-certificates &&
echo
“-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApZ2u1KJKUu/fW4A25y9m
y70AGEa/J3Wi5ibNVGNn1gT1r0VfgeWd0pUybS4UmcHdiNzxJPgoWQhV2SSW1JYu
tOqKZF5QSN6X937PTUpNBjUvLtTQ1ve1fp39uf/lEXPpFpOPL88LKnDBgbh7wkCp
m2KzLVGChf83MS0ShL6G9EQIAUxLm99VpgRjwqTQ/KfzGtpke1wqws4au0Ab4qPY
KXvMLSPLUp7cfulWvhmZSegr5AdhNw5KNizPqCJT8ZrGvgHypXyiFvvAH5YRtSsc
Zvo9GI2e2MaZyo9/lvb+LbLEJZKEQckqRj4P26gmASrZEPStwc+yqy1ShHLA0j6m
1QIDAQAB
-----END PUBLIC KEY-----” | sed ‘s/ */
/g’ > “/etc/apk/keys/sgerrand.rsa.pub” &&
wget
“$ALPINE_GLIBC_BASE_URL/$ALPINE_GLIBC_PACKAGE_VERSION/$ALPINE_GLIBC_BASE_PACKAGE_FILENAME”
“$ALPINE_GLIBC_BASE_URL/$ALPINE_GLIBC_PACKAGE_VERSION/$ALPINE_GLIBC_BIN_PACKAGE_FILENAME”
“$ALPINE_GLIBC_BASE_URL/$ALPINE_GLIBC_PACKAGE_VERSION/$ALPINE_GLIBC_I18N_PACKAGE_FILENAME” &&
apk add --no-cache
“$ALPINE_GLIBC_BASE_PACKAGE_FILENAME”
“$ALPINE_GLIBC_BIN_PACKAGE_FILENAME”
“$ALPINE_GLIBC_I18N_PACKAGE_FILENAME” &&
rm "/etc/apk/keys/sgerrand.rsa.pub" &&
/usr/glibc-compat/bin/localedef --force --inputfile POSIX --charmap UTF-8 "$LANG" || true &&
echo "export LANG=$LANG" > /etc/profile.d/locale.sh &&
apk del glibc-i18n &&
rm "/root/.wget-hsts" &&
apk del .build-dependencies &&
rm
"$ALPINE_GLIBC_BASE_PACKAGE_FILENAME"
"$ALPINE_GLIBC_BIN_PACKAGE_FILENAME"
"$ALPINE_GLIBC_I18N_PACKAGE_FILENAME"
ENV TZ=UTC
RUN apk update && apk add tzdata
但是构建报错了 ,错误如下:
请教一下该如何解决?
qrr1995
(qrr1995)
2019 年12 月 9 日 06:05
2
官方TIKV的运行依赖的基础镜像是pingcap/alpine-glibc
Hi,能了解一下具体运行的环境(生产/测试/本地开发)和部署方式(TiDB Operator,Docker Compose,etc.) 吗?
如果是生产环境的话,"arm with docker " 的架构还在测试和开发中,官方现在还没正式公布,无论是功能和性能都尚待更全面的验证,不推荐上生产。
如果是其他环境的话,又是出于什么需求要跑 arm 环境的 TiDB/TiKV/PD 镜像呢?具体形式是?
我这边是docker k8s集群环境前期已经在AMD架构的系统运行和测试过Tidb方案。。
现在我们这边采购了两台ARM架构的自主可控服务器,我们这边的目标是做一套从硬件到软件完全自主可控的解决方案,所以希望TIdb可以跑在ARM架构的服务器上。。 由于我也看到官方未提供ARM镜像、所以只能自己尝试编译构建了~
1 个赞
qrr1995
(qrr1995)
2019 年12 月 9 日 08:00
4
谢谢补充~~看来咱们主要的目标还是希望验证一下这整套 ARM 的方案并跑起来。
由于编译环境需要的依赖繁多,而容器环境运行服务的最佳实践是将镜像轻量化,缩小体积减少依赖,可否将编译和运行分离成两步呢:
在物理环境(也就是采购的 ARM 机器)上编译出对应二进制包。
再使用一个较干净的 arm Docker 环境,直接将 tikv-server、tidb-server、pd-server COPY 进去跑。
这样一来整个流程既属于自主可控,又可以将问题分开来解决,避免在 docker 环境下处理各种复杂的依赖问题。
看到一个相关的帖子 我们来在ARM系统架构平台上K8s跑TIDB
目前的进度是已经编译出 tikv-server 了(也就是第一步),可以试试用以下 Dockerfile 做个运行时的镜像(即第二步):
FROM arm64v8/alpine:3.10
ENV TZ /etc/localtime
ENV TZDIR /usr/share/zoneinfo
COPY tikv-server /tikv-server
EXPOSE 20160
ENTRYPOINT ["/tikv-server"]
那个也是我发的呀· ·
不知道你这个能否跑起来·· 我这直接让依赖ubunt的镜像 像这样加进去构建了一个ARM的tikv。 迟一些再试能否跑起来。。 跑起来后再去考虑轻量化的问题了··
但是我现在在build monitoring的时候遇上一点问题 麻烦你帮忙看一下·
make
ARCH unknown
GOOS=linux go build -o ./reload/build/linux/reload ./reload/main.go;
GOOS=darwin go build -o ./reload/build/macos/reload ./reload/main.go;
go: k8s.io/client-go@v12.0.0+incompatible: reading https://goproxy.io/k8s.io/client-go/@v/v12.0.0+incompatible.mod: 410 Gone
go: k8s.io/client-go@v12.0.0+incompatible: reading https://goproxy.io/k8s.io/client-go/@v/v12.0.0+incompatible.mod: 410 Gone
Makefile:6: recipe for target 'all' failed
make: *** [all] Error 1
monitoring make执行的时候报了错 。是go版本不对吗? 还是要怎么编
是构建那个 tidb-monitor-reloader : v1.0.1
qrr1995
(qrr1995)
2019 年12 月 9 日 08:24
7
好,tikv 我们试试直接在镜像里跑编译好的 binary。
这个问题和网络原因有关,因为默认使用了 google 的代理,试下如下命令:
不开代理
1. GOPROXY=direct make
使用在国内搭的代理
2. GOPROXY=https://goproxy.cn,direct make
GOPROXY=https://goproxy.cn,direct make build
make: *** No rule to make target ‘build’。 停止。
执行后如上 不能往下执行
qrr1995
(qrr1995)
2019 年12 月 9 日 09:39
9
抱歉,命令打多了,把 build 去掉,就在原来的 make 命令前面加环境变量
command-line-arguments
/usr/local/go/pkg/tool/linux_arm64/link: running gcc failed: exit status 1
/usr/bin/ld:无法识别的 -a 选项‘gezero_size’
collect2: error: ld returned 1 exit status
Makefile:6: recipe for target ‘all’ failed
make: *** [all] Error 2
qrr1995
(qrr1995)
2019 年12 月 9 日 11:21
12
这个 Makefile 会先后 build linux 和 mac 下的包:
GOOS=linux go build -o ./reload/build/linux/reload ./reload/main.go;
GOOS=darwin go build -o ./reload/build/linux/reload ./reload/main.go;
第二句命令是多余的,属于一个 bug,已反馈给社区。
实际上现在已经 build 成功了,可以检查一下生成的 ./reload/build/linux/reload
prom/prometheus
grafana/grafana
tidb官方有没有改动过 是不是可以直接用最原始的就可以了
tidb-cloud-backup
tidb-enterprise-tools 这个的dockerfile在那 可以提供一下给我吗
qrr1995
(qrr1995)
2019 年12 月 10 日 02:52
17
对应 Dockerfile 是
FROM pingcap/alpine-glibc:mysql_client
COPY mydumper /mydumper
COPY importer /importer
COPY loader /loader
COPY syncer /syncer
CMD ["/syncer"]
从 history 里可以看到,比 alpine-glibc 多打了一个 mysql-client 进去。 https://hub.docker.com/layers/pingcap/alpine-glibc/mysql_client/images/sha256-03ea34292211cd48e58048aad7f2073259b4b1872ac23abdb729a8fae3d57fdf
另外咱们现阶段是不是可以先不去打工具镜像,先让服务在线上跑起来呢?否则会面临编译许多周边工具的工作量。
嗯 又面临一个工具包·· 并且COPY mydumper /mydumper
COPY importer /importer
COPY loader /loader
COPY syncer /syncer那几个工具包还不知道去那下载下来·
我还是先跑主服务吧·· 这backup的可后续再打·
1 个赞
监控跑起来有点问题··
reloader 找不到文件
应该是因为找不到etc/prometheus/rules文件
这个文件我们打镜像的时候是没有的哦
是prometheus挂载出来的吗? 我应该如何修改