arm64适配系列文章-第六章-arm64环境上rabbitmq-management的部署,构建cluster-operator
ARM64适配系列文章
第一章 arm64环境上kubesphere和k8s的部署
第二章 arm64环境上nfs-subdir-external-provisioner的部署
第三章 arm64环境上mariadb的部署
第四章 arm64环境上nacos的部署
第五章 arm64环境上redis的部署
第六章 arm64环境上rabbitmq-management的部署
第七章 arm64环境上minio的部署
第八章 arm64环境上seata的部署
第九章 arm64环境上sentinel的部署
文章目录
- ARM64适配系列文章
- 前言
- 一、机器信息获取
- 1.1 芯片信息
- 1.2 操作系统版本信息
- 二、版本获取
- 三、准备自己构建cluster-operator镜像
- 3.1 代码下载
- 3.2 基础镜像下载
- 3.3 进行构建
- 四、测试使用
- 五、遇到的问题:镜像构建中遇到的问题
- 5.1 dial tcp 142.250.217.81:443: i/o timeout
- 5.2 This download does NOT match an earlier download recorded in go.sum.
- 5.3 缺包问题的处理
- 六、cluster-operator的dockerfile
前言
手里运维的业务平台要部署到用户环境,对方是华为910B的机器,单位目前没有,只有老的arm64架构的机器,反正先适配着,防止后续现抓麻爪了。
这一章记录rabbitmq-management的适配步骤
我这里使用的rabbtmq-management启动rabbitmq的方式。
一、机器信息获取
1.1 芯片信息
lscpu
Architecture: aarch64
Byte Order: Little Endian
CPU(s): 40
On-line CPU(s) list: 0-39
Thread(s) per core: 1
Core(s) per socket: 40
Socket(s): 1
NUMA node(s): 1
Model: 1
CPU max MHz: 2500.0000
CPU min MHz: 600.0000
BogoMIPS: 40.00
L1d cache: unknown size
L1i cache: unknown size
L2 cache: unknown size
L3 cache: unknown size
NUMA node0 CPU(s): 0-39
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid asimdrdm
1.2 操作系统版本信息
hostnamectl
Static hostname: datax3Icon name: computer-serverChassis: serverMachine ID: 570e6fdcda17439886d6364f7a3ba217Boot ID: c6b431eb288d4de4b62a823a7f383e7bOperating System: CentOS Linux 7 (AltArch)CPE OS Name: cpe:/o:centos:centos:7Kernel: Linux 4.14.0-115.el7a.0.1.aarch64Architecture: arm64
二、版本获取
目前在x86上使用的nacos版本是rabbitmq:3.13.2-management版本
经过查询,在arm64v8找到了可用的,但是cluster-operator没有找到可用的,得自己打才行
# dockerpull.cn是国内加速源
docker pull dockerpull.cn/arm64v8/rabbitmq:3.13.2-management-alpine
# 查看架构支持信息
docker inspect dockerpull.cn/arm64v8/rabbitmq:3.13.2-management-alpine |grep Arch"Architecture": "arm64",
三、准备自己构建cluster-operator镜像
3.1 代码下载
github地址:https://github.com/rabbitmq/cluster-operator
wget https://github.com/rabbitmq/cluster-operator/archive/refs/tags/v2.9.0.zip
unzip v2.9.0.zip
3.2 基础镜像下载
docker pull dockerpull.cn/arm64v8/golang:1.21
docker pull dockerpull.cn/arm64v8/alpine:latest
docker pull dockerpull.cn/scratch
3.3 进行构建
由于构建中遇到的问题,最终版本的Dockerfile放在文章末尾
docker build -t rabbitmqoperator/cluster-operator:arm64-2.9.0 .
四、测试使用
测试使用
建立pod正常,访问rabbitmq页面正常
五、遇到的问题:镜像构建中遇到的问题
5.1 dial tcp 142.250.217.81:443: i/o timeout
异常提示:
122.1 go: github.com/BurntSushi/toml@v1.2.1: Get "https://proxy.golang.org/github.com/%21burnt%21sushi/toml/@v/v1.2.1.mod": dial tcp 142.250.217.81:443: i/o timeout
处理方法:改成国内代理
RUN ENV GOPROXY https://goproxy.io,direct
5.2 This download does NOT match an earlier download recorded in go.sum.
异常提示:
verifying github.com/emicklei/go-restful/v3@v3.11.1: checksum mismatch
This download does NOT match an earlier download recorded in go.sum.
处理方法:增加命令
RUN go clean -modcache
RUN go mod tidy
5.3 缺包问题的处理
异常提示:
2.200 /go/pkg/mod/k8s.io/api@v0.29.2/apps/v1/generated.pb.go:27:2: missing go.sum entry for module providing package github.com/gogo/protobuf/proto (imported by k8s.io/api/apps/v1); to add:
2.200 go get k8s.io/api/apps/v1@v0.29.2
处理方法:将需要的包手动get进去
RUN go get k8s.io/api@v0.29.2
六、cluster-operator的dockerfile
# Build the manager binary
FROM dockerpull.cn/arm64v8/golang:1.21 as builderWORKDIR /workspace# Dependencies are cached unless we change go.mod or go.sum
COPY go.mod go.mod
#COPY go.sum go.sum
RUN go clean -modcache
RUN go mod tidy
ENV GOPROXY https://goproxy.io,direct
RUN go mod download
RUN go get k8s.io/api@v0.29.2
RUN go get k8s.io/api/apps/v1@v0.29.2
RUN go get k8s.io/api/core/v1@v0.29.2
RUN go get k8s.io/apimachinery/pkg/util/strategicpatch@v0.29.2
RUN go get k8s.io/apimachinery/pkg/util/mergepatch@v0.29.2
RUN go get k8s.io/apimachinery/pkg/util/dump@v0.29.2
RUN go get sigs.k8s.io/controller-runtime/pkg/scheme@v0.17.3
RUN go get sigs.k8s.io/controller-runtime/pkg/client@v0.17.3
RUN go get sigs.k8s.io/controller-runtime/pkg/metrics/server@v0.17.3
RUN go get sigs.k8s.io/controller-runtime/pkg/certwatcher@v0.17.3
RUN go get sigs.k8s.io/controller-runtime/pkg/webhook/admission@v0.17.3
RUN go get sigs.k8s.io/controller-runtime/pkg/webhook/conversion@v0.17.3
RUN go get k8s.io/client-go/tools/clientcmd@v0.29.2
RUN go get k8s.io/client-go/tools/remotecommand@v0.29.2
RUN go get k8s.io/apimachinery/pkg/util/httpstream/spdy@v0.29.2
RUN go get k8s.io/apimachinery/pkg/util/proxy@v0.29.2
RUN go get sigs.k8s.io/controller-runtime/pkg/log/zap@v0.17.3
RUN go get sigs.k8s.io/controller-runtime/pkg/cache@v0.17.3
RUN go get k8s.io/client-go/tools/cache@v0.29.2
RUN go get k8s.io/client-go/tools/record@v0.29.2
RUN go get sigs.k8s.io/controller-runtime/pkg/config/v1alpha1@v0.17.3
RUN go get gopkg.in/ini.v1# Copy the go source
COPY main.go main.go
COPY api/ api/
COPY controllers/ controllers/
COPY internal/ internal/
COPY pkg/ pkg/# Build
ARG TARGETOS
ARG TARGETARCH
ENV GOOS linux
ENV GOARCH arm64
RUN CGO_ENABLED=0 GO111MODULE=on go build -a -tags timetzdata -o manager main.go# ---------------------------------------
FROM dockerpull.cn/arm64v8/alpine:latest as etc-builderRUN echo "rabbitmq-cluster-operator:x:1000:" > /etc/group && \echo "rabbitmq-cluster-operator:x:1000:1000::/home/rabbitmq-cluster-operator:/usr/sbin/nologin" > /etc/passwdRUN apk add -U --no-cache ca-certificates# ---------------------------------------
FROM scratchARG GIT_COMMIT
LABEL GitCommit=$GIT_COMMITWORKDIR /
COPY --from=builder /workspace/manager .
COPY --from=etc-builder /etc/passwd /etc/group /etc/
COPY --from=etc-builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crtUSER 1000:1000ENTRYPOINT ["/manager"]