在K8s上部署一個有狀态的叢集——Kafka叢集原始建構比較繁瑣,是以尋找了了很多Operator,在離線的K8s上我個人目前推薦的是Strimzi Kafka Operator。原因:成熟,緊跟Kafka的發行,文檔豐富,開源。缺點:隻提供了AMD64的鏡像,其他架構的之支援ARM64和Power架構,且非AMD64的鏡像需要自行編譯建構,雖然有說明文檔,當自己建構的時候還是踩了很多坑。
Fedora 34
CentOS 8/CentOS Stream 8
本人寫此文章的時候是2021-09-02,使用的是最新的版本的Fedora,CentOS 7不推薦,主要是源中自帶的Maven版本額太低,不滿足建構要求,當然自己使用二進制替代安裝另算。Debain系列本人沒有使用在此就不說明,但也可作為建構環境。
位址:https://github.com/strimzi/strimzi-kafka-operator/archive/refs/tags/0.25.0.tar.gz
開發文檔路徑為<source_code_root_direcotory/development-docs/DEV_GUIDE.md
文檔中列出的需要安裝的工具
make - Make build system
mvn (version 3.5 and above) - Maven CLI
helm (version 3) - Helm Package Management System for Kubernetes asciidoctor and asciidoctor-pdf - Documentation generation. Use gem to install the latest version for your platform.
yq - (version 4.2.1 and above) YAML manipulation tool. Warning: There are several different yq YAML projects in the wild. Use this one. You need version 4.2.1 or above.
docker - Docker command line client
shellcheck - ShellCheck is a GPLv3 tool that gives warnings and suggestions for bash/sh shell scripts.
以下使用是華為雲的鏡像源進行安裝
根據說明檔案中的連接配接下載下傳對應的二進制檔案,解壓後直接放在/usr/local/bin目錄下即可。
yq: https://github.com/mikefarah/yq
helm: https://helm.sh/
為更快的使用maven建構建議增加maven的鏡像,這裡使用華為maven鏡像庫。
在源碼根目錄下檔案kafka-versions.yaml編譯選擇需要的版本,注釋調不需要的,如我自己隻需要最新的kafka 2.8.0,我的kafka-version.yaml檔案節選如下:
進入源代碼的根目錄,運作
說明:
源代碼的開發說明檔案是要準備好docker.io的倉庫,進行後期鏡像的pull/push,但是國内通路速度和次數實在感人,本人此處用的是'docker_build'而不是原來的'all', 本地建構而沒有push,當然也可以使用國内的容器鏡像服務如華為和阿裡的來進行操作,不過需要修改後面建構鏡像時使用的FROM的路徑。
'MVN_ARGS='-DskipTests -DskipITs'免去了一些測試
上面程式運作完成後工程所需jar檔案是全部都有了,這樣就可以以此建構鏡像檔案,包括ARM64的鏡像,但鏡像不能建構成功,需要修改幾處地方。
此處直接建構ARM64的鏡像,同時兼顧AMD64的說明,因為之前已經建構好jar包,建構鏡像時可進入源代碼工程下的'docker-image'目錄,運作'make docker-build'直接建構鏡像檔案。
因為我自己安裝的是docker-ce 20.10.8,buildx已經有了,但預設不支援linux/arm64平台,運作下面指令使得預設建構器支援其他所有平台
開發文檔末尾有描述,以下是建構ARM64需要修改的
首先建構的就是這個基礎鏡像,對于AMD64,沒有什麼需要注意的,但對于ARM64,需要修改FROM語句:
FROM --platform=linux/arm64 registry.access.redhat.com/ubi8/ubi-minimal:latest
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 ./
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 ./
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 ./
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 ./