构建Strimzi Kafka的ARM64镜像

网友投稿 416 2022-10-24

构建Strimzi Kafka的ARM64镜像

在K8s上部署一个有状态的集群——Kafka集群原始构建比较繁琐,所以寻找了了很多Operator,在离线的K8s上我个人目前推荐的是Strimzi Kafka Operator。原因:成熟,紧跟Kafka的发行,文档丰富,开源。缺点:只提供了AMD64的镜像,其他架构的之支持ARM64和Power架构,且非AMD64的镜像需要自行编译构建,虽然有说明文档,当自己构建的时候还是踩了很多坑。

1. 准备工作

主备构建的主机(AMD64架构的主机即可)

Fedora 34 CentOS 8/CentOS Stream 8本人写此文章的时候是2021-09-02,使用的是最新的版本的Fedora,CentOS 7不推荐,主要是源中自带的Maven版本额太低,不满足构建要求,当然自己使用二进制替代安装另算。Debain系列本人没有使用在此就不说明,但也可作为构建环境。 下载Strimzi Kafka Operator源码 地址:https://github.com/strimzi/strimzi-kafka-operator/archive/refs/tags/0.25.0.tar.gz 根据开发文档准备编译环境 开发文档路径为 # 启动docker并设置自启动 sudo systemctl enable docker --now 安装yq和helm 根据说明文件中的连接下载对应的二进制文件,解压后直接放在/usr/local/bin目录下即可。 yq: https://github.com/mikefarah/yq helm: 编译源文件中的java程序

准备Maven镜像库

为更快的使用maven构建建议增加maven的镜像,这里使用华为maven镜像库。

sudo vim /usr/share/mavne/conf/settings.xml ... # mirrors节点中添加如下内容: huaweicloud * https://repo.huaweicloud.com/repository/maven/ ...

确定需要构建的kafka版本

在源码根目录下文件kafka-versions.yaml编译选择需要的版本,注释调不需要的,如我自己只需要最新的kafka 2.8.0,我的kafka-version.yaml文件节选如下:

... #- version: 2.7.1 # format: 2.7 # protocol: 2.7 # url: https://archive.apache.org/dist/kafka/2.7.1/kafka_2.13-2.7.1.tgz # checksum: A1FC222284E3E1B538AB7FBC9205C735A2E8B31D84EE9F8D5CCC84F6FD48B885591899EEA538C909A26676C9C1F44520CC56E6748C4632E23B8A5AF0B788B48A # zookeeper: 3.5.9 # third-party-libs: 2.7.x # supported: true # default: false - version: 2.8.0 format: 2.8 protocol: 2.8 url: https://archive.apache.org/dist/kafka/2.8.0/kafka_2.13-2.8.0.tgz checksum: 3C49DCA1147A0A249DD88E089F40AF31A67B8207ED2D9E2294FA9A6D41F5ED0B006943CD60D8E30D7E69D760D398F299CAFCD68B6ED7BEDF9F93D1B7A9E8C487 zookeeper: 3.5.9 third-party-libs: 2.8.x supported: true default: true

编译java文件

进入源代码的根目录,运行

make MVN_ARGS='-DskipTests -DskipITs' docker_build

说明:

源代码的开发说明文件是要准备好docker.io的仓库,进行后期镜像的pull/push,但是国内访问速度和次数实在感人,本人此处用的是'docker_build'而不是原来的'all', 本地构建而没有push,当然也可以使用国内的容器镜像服务如华为和阿里的来进行操作,不过需要修改后面构建镜像时使用的FROM的路径。 'MVN_ARGS='-DskipTests -DskipITs'免去了一些测试 上面程序运行完成后工程所需jar文件是全部都有了,这样就可以以此构建镜像文件,包括ARM64的镜像,但镜像不能构建成功,需要修改几处地方。 3. 构建镜像文件 此处直接构建ARM64的镜像,同时兼顾AMD64的说明,因为之前已经构建好jar包,构建镜像时可进入源代码工程下的'docker-image'目录,运行'make docker-build'直接构建镜像文件。 0.准备buildx 准备构建器 因为我自己安装的是docker-ce 20.10.8,buildx已经有了,但默认不支持linux/arm64平台,运行下面命令使得默认构建器支持其他所有平台 docker run --privileged --rm tonistiigi/binfmt --install all 准备环境变量 开发文档末尾有描述,以下是构建ARM64需要修改的 export DOCKER_BUILDX=buildx export DOCKER_BUILD_ARGS="--platform linux/amd64 --load" # 因为我是根据0.25.0进行arm64镜像构建再追加个环境参数 export DOCKER_TAG=0.25.0-arm64 1.构建strimzi/base 首先构建的就是这个基础镜像,对于AMD64,没有什么需要注意的,但对于ARM64,需要修改FROM语句: vim docker-image/base/Dockerfile

FROM --platform=linux/arm64 registry.access.redhat.com/ubi8/ubi-minimal:latest

如果后面的tini不好下载,建议换个好的时间段,或者使用github下载的国内加速器下载。 镜像构建语句:

docker buildx build --platform linux/arm64 --load --build-arg JAVA_VERSION=11 --build-arg strimzi_version=0.25.0 -t strimzi/base:0.25.0-arm64 ./

## 2.构建strimzi/operator 其次,构建operator。由于需要拉取使用之前的base镜像,可以将自己构建好的镜像上传至华为或者阿里的镜像服务中,同时修改FROM语句指向,或者将base的构建语句拷贝到operator的构建语句前,直接重头构建。 镜像构建语句:

docker buildx build --platform linux/arm64 --load --build-arg JAVA_VERSION=11 --build-arg strimzi_version=0.25.0 -t strimzi/operator:0.25.0-arm64 ./

# 3.构建strimzi/jmxtrans 再次,构建jmxtrans。根operator的构建步骤一样,在此不重复叙述。 镜像构建语句:

docker buildx build --platform linux/arm64 --load --build-arg JAVA_VERSION=11 --build-arg strimzi_version=0.25.0 -t strimzi/jmxtrans:0.25.0-arm64 ./

# 4. 构建strimzi/kaniko-executor 再其次,这个镜像用于构建镜像用的,感觉不影响后面的构建,但还是说说构建方法吧。这个是gcr.io/kaniko-project/executor:v1.6.0的(还是kaniko-project下的),国内肯定没法拉取,这个时候可以借助阿里镜像服务进行远程构建。 注意: - 要选择海外构建; - 要在FROM后加上'--platform=linux/arm64'; - 同时修改Makefile文件,拉取阿里镜像服务中构建的镜像。 # 5. 构建strimzi/kafka 最后,是Kafka镜像,根operator的构建步骤一样,中途会下载之前指定的kafka版本,在此不重复叙述。 镜像构建语句:

docker buildx build --platform linux/arm64 --load --build-arg JAVA_VERSION=11 --build-arg KAFKA_VERSION=2.8.0 --build-arg KAFKA_DIST_DIR=./tmp/2.8.0 --build-arg THIRD_PARTY_LIBS=2.8.x --build-arg strimzi_version=0.25.0 -t strimzi/kafka:0.25.0-arm64-kafka-2.8.0 ./

# 结束语 至此工程构建完毕,可以使用'docker save'命令导出镜像到离线环境使用,工程不包含kafka-bridge的镜像哦(待研究)。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:springboottest测试依赖和使用方式
下一篇:kubernetes 安装 ingress controller
相关文章

 发表评论

暂时没有评论,来抢沙发吧~