Preface
尝试去搭建一个最简单的分布式系统,包括消息队列,服务发现等
Contents
docker
首先得在树莓派上安装 docker ,此处不赘述
etcd镜像
由于树莓派上arm架构的,所以我们得找一个arm镜像,这里需要自己去动手,我用的是 peterrosell/etcd-rpi ,见参考列表。
如何知道自己的树莓派架构
查看自己的树莓派是 arm32 还是 arm64 的,可以用以下指令:
1 | # 我的树莓派输出的是32,所以是arm32 |
使用官方的发现服务
访问https://discovery.etcd.io/new?size=3
这个网址可以获得你的服务发现网址
安装go
由于在 etcd checkout 完成之后提示找不到命令 go ,所以此处我们需要安装一下 go。
ps:
“可以在安装脚本中检测和安装对应架构的 go “
1 | wget -d https://studygolang.com/dl/golang/go1.15.2.linux-armv6l.tar.gz |
此处安装的是 armv6 的包, 64bit 的系统另有 armv8 的包。
修改环境变量,加入 go 的 bin 目录,然后重启或者使用 source 重载。
那么我们就可以开始使用 go 了。
Issues
Bad substitution
通过sh
运行脚本的时候出现bad substitution
的问题,只要在脚本文件上加上#!/bin/bash
,然后通过 bash
来运行脚本。
go mod i/o timeout
go: github.com/bgentry/speakeasy@v0.1.0: Get “https://proxy.golang.org/github.com/bgentry/speakeasy/@v/v0.1.0.mod": dial tcp 172.217.24.17:443: i/o timeout
设置一下goproxy的全局代理即可
1 | export GOPROXY=https://goproxy.io |
unknown flag: –platform
- docker buildx build –platform linux/arm/v7 -t peterrosell/etcd-rpi:3.4.10 .
unknown flag: –platform
这是因为buildx是属于实验特性,需要开启实验特性,可查看参考列表中的相关信息。
处理很简单,需要设置以下环境变量
1 | export DOCKER_CLI_EXPERIMENTAL=enabled |
unsupported platform
etcd on unsupported platform without ETCD_UNSUPPORTED_ARCH=arm set
在环境变量中添加以下内容即可
1 | export ETCD_UNSUPPORTED_ARCH=arm |
Reference
- balenalib/raspberry-pi-alpine: balena.ioIoT镜像系列的一部分
- peterrosell/etcd-rpi: 树莓派上运行etcd的参考内容
- 使用 Buildx 构建镜像