树莓派4b配置(树莓派4b配置详情)
树莓派4B+ Centos7 部署k3s集群工具
kubernetes用于大型集群管理,而k3s属于kubernetes的一个轻量级版本,常用于嵌入式设备使用。现把它安装到树莓派上使用。
这里用到树莓派的系统是:CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-4-2009-sda.raw,型号是4B+,8g内存。
树莓派初次启动需要扩容,并且做一些基本调整:
cgroup是linux用来对进程分配cpu、内存资源的工具,需要在启动系统时开启他,k3s会用到。
在/boot/cmdline.txt后加入这个,然后reboot
k3s是一个轻量级的k8s,适用于树莓派这种嵌入式设备。
这个脚本跑完的时候,会把k3s添加到systemd里面,可以通过systemctl status k3s来查看运作状态。启动成功就可以使用啦
官方参考:
等它重启个好几次之后,基本就成功了。
如果一直失败,可以输入命令刷一下iptable缓冲
iptables --flush
iptables -tnat --flush
等第二个结点加入后,在任意结点执行命令,都能查看到已有的2个Server(Master)结点了
当Server结点数大于等于3个且为奇数时,集群才可以实现高可用。
大于等于3是因为k3s使用了Raft算法来实现一致性,而Raft算法的容崩率为1/3,也就是只要集群中有2/3台机器正常运作,集群就能正常运作,所以3台机器是最低要求;要奇数个结点是因为Raft算法过程中有一个很重要的随机投票选Leader的流程,结点们通过定期投票选举出一个Leader角色,然后其他结点在它的任期内就向他同步数据,这个时候如果结点数是偶数,那么容易出现平票问题,选不出leader,并且,崩溃后集群进行数据恢复过程中,实现一致的方法是多数服从少数,如果是偶数Master结点,且刚好被分割成2个结点规模一样的集团,就没办法恢复数据了[裂开],所以需要奇数个结点以避免权力平分问题。
以上为个人理解。
有兴趣的同学可以一起探讨这类共识算法,与此类似的还有联盟链的PBFT类算法,比特币PoW算法等等。
因为集群并非开放式集群,加入集群需要获取一个token作为校验。这个token可以从Master服务器上获取。(手动加入的话,仅需要使用相同的K3S_TOKEN参数启动即可。)
这样,结点就正常连接上啦:
关闭k3s进程后,后台还留存一些服务占用着端口,需要用官方脚本关闭他们
可以flush一下iptables,等他自己重启就行了。
有可能发生了一些冲突,可以试下重装k3s-agent
目前系统已经伴随k3s安装的一些软件:
crictl :类似与docker的命令行工具,比如:
k3s :封装了kubeneters基本工具在里面的集成,如使用kubectl:
这里示范部署一个最简单的web应用
--net host 代表与本机享受同一个网络命名空间
这里可以在docker容器内开启ssh服务:
做好docker镜像后,就可以部署到集群上了。
等一会儿就能在pods列表里面看到了:
但这时候,这个pod并没有对外开放,只能在集群内部相互访问,通过get services命令查看集群的服务,发现并没有我们的hello-node服务。
expose命令其实是创建了一个service,用于给这个pod提供访问入口。
(如果使用--type=LoadBalancer,则代表一个deployment上管理的所有POD进行均衡负载,但这里还没用上deployment,第四章节会使用到)
等一会儿,pod上就有一个结点IP的对外端口,供外部访问了。
运行结束后,刚启动过的pod和service就不见了,服务也停止了。
docker容器,其实就是一个运行的轻量级系统,里面可以跑我们的业务应用。
而POD则是代表容器的集合,一个POD可以运行多个容器,一台机器上可以运行多个POD。
POD未必是一个对外开放的服务,他可能只是内部计算的程序,默认只能集群内部通信,所以还有Service的概念,用于让POD对外开放端口,供外部访问。这里的service本质上是个集群内部的负载均衡器,用来给同一个Deployment分流;对应的还有Ingress,外部负载均衡器,用于给多个Deployment分流。
而Deployment顾名思义,就是一次部署的抽象实例,比如说,现在需要部署一个3台机器均衡负载的nodejs业务应用,那么这个部署任务则代表一个deployment实例。
很快,我们可以看到POD和deployment的部署情况,都已经正常运作。
进入容器后可以使用基本linux命令,也可见8080端口已经被我们的node应用占用了。
但是此时service还没有他们,也就是正处于无法提供外部服务的状态。
这里对一个deployment里面的3个pod启动了个默认均衡负载服务,暴露出来的一个端口是30057,访问可通。
也能够通过logs命令查看控制台输出的日志。
因为deployment实例中包含了pod的部署配置,所以删除deployment时,k3s就会直接把pod也删除掉。
但service并不在deployment部署的范围内,所以需要同步删除它,在删除命令中通过","与deployment分割开来即可。
至此已经把刚起来的服务全部关闭掉了。
这里我们看到3个Server(Master)结点由于需要维护集群高可用,对CPU持续20%左右的消耗,内存也需要一个G左右。而Agent(Wroker)结点只需要执行部署任务,所以对内存与CPU的需求都相对低一些,仅维持在10%左右的CPU和半个G左右的内存消耗。
参考:
参考:
在鸿蒙(OHOS3.0)编译框架中添加树莓派4B
之前在树莓派4b上点亮了OHOS3.0,不过内核是用tftp拉取的,根文件系统挂在了NFS上,拔了网线就无法启动。当然这么操作只是为了方便调试,而最终需要的是一个可以烧录到TF卡上的img镜像文件。这就需要将所有调试好的内容添加到OHOS3.0的编译框架,本以为是很简单的事情,好家伙,整了这么久,感觉添加编译框架比移植本身更复杂。于是我整理了添加树莓派单板到编译框架的内容,希望对各位有所帮助,为大家避坑。
主要参考 hisilicon build组件仓,添加一个products编译组件,这个组件是在产品配置文件中指定的。比如
productdefinecommonproductsRPI4B.json
其他部分参考Hi3516,但是其中2条,指定单板组件路径,并添加组件。如果删除这两条,将不能编译内核,只生成OHOS的文件系统。
接下来在device目录下,新建一个raspberrypi编译组件文件夹,并添加 ohos.build 文件。和前面产品配置文件中的设置对应起来了。
deviceraspberrypibuildohos.build
新建 deviceraspberrypibuildBUILD.gn 当然每个厂家不可能只有1个板子,如果有其他单板就在这里指定,比如树莓派2B、3B等
既然前面指定了rpi4b的编译配置组件,那么就在 deviceraspberrypi 新建一个 rpi4b 的目录,可以参考 hi3516dv300 build组件
deviceraspberrypirpi4bBUILD.gn
至此一个rpi4b build组件就添加到OHOS3.0的编译框架了,之后相关内容添加到这个文件夹下就可以了。
接下来分析下目前移植了树莓派4B的哪些内容,如何将这些内容编译进OHOS3.0。
关于补丁可以参考 Patch组件,可以得知内核编译由kernel.mk来执行
kernellinuxbuildkernel.mk
所以补丁文件需要放到正确的路径下,以正确的名字命名就可以patch到内核。
hdf.patch补丁文件,现在还没有移植HDF相关内容,所以可以先使用Hi3516的
rpi4b.patch补丁文件,使用树莓派的官方镜像,
kernellinuxconfiglinux-5.10archarmconfigsrpi4b_standard_defconfig
内核配置文件目前已知的需要开启下面内容,但是肯定不止这些,以后会继续更新
Pi4的GPU是VideoCore VI支持OpenGL ES 3.2,而Pi3的GPU是VideoCore IV支持OpenGL ES 2.0。VideoCore IV 驱动程序是 VC4,VideoCore VI 驱动程序的 V3D。内核已经提供驱动,参考rpi4b_standard_defconfig将驱动直接编入到内核。
同时需要在config.txt中开启设置
OHOS中修改weston的配置文件,指定显示驱动
systemetcweston.ini
具体思路就是先查找设备号,根据设备号找到驱动程序。
前面内核配置的时候rpi4b_standard_defconfig中已经将触摸驱动编入内核,所以后面不需要在init加载模块了,修改下eudev的配置文件即可。
third_partyeudevrules.d ouchscreen.rules
正常情况下内核是由uboot进行引导的,而且OHOS默认生成uImage。但是树莓派自带BootLoader,虽然可以先用树莓派自带的BootLoader启动uboot,再用uboot加载uImage,但是这样会比较麻烦,而且会增加启动时间。不过目前 zImage是写死在kernel.mk中的,没办法改下编译脚本把。
kernellinuxbuildkernel.mk 将 uImage 改为 zImage modules dtbs
kernellinuxbuildbuild_kernel.sh
kernellinuxbuildBUILD.gn
kernellinuxbuildkernel_module_build.sh
这里内核编译会依赖product_path="vendor/$product_company/$product_name"下的hdf.hcs文件,得先新建一个应付下,不然会报下面这个错误。
ninja: error: '../../vendor/raspberrypi/RPI4B/hdf_config/uhdf/hdf.hcs', needed by 'gen/drivers/adapter/uhdf2/hcs/hdf_default.hcb', missing and no known rule to make it
新建:vendor/raspberrypi/RPI4B/hdf_config/uhdf/hdf.hcs
对于镜像烧录,Hi3516会将uImage、system.img、vendor.img等镜像烧写到emmc,但是树莓派使用TF卡启动,所以需要对TF卡进行分区,然后复制对应的内容到各个分区。首先制作树莓派boot目录,这个用来目录存放树莓派设备树、config.txt、cmdline.txt、内核镜像等信息。写一个简单的mkboot.py脚本来实现这个功能,位置在码仓rpi4bdeviceraspberrypiimagesmkboot.py将会生成boot.img。
为了方便烧录,需要将boot.img、system.img、updater.img、vendor.img、userdata.img合并成一个rpi4b.img。还是写一个简单的脚本来处理这个步骤rpi4bdeviceraspberrypiimagesmkboot.py。
不过有个问题,主分区只支持4个,所以updater.img暂时先不合并了,这个问题等以后再来处理。
最后将会得到一个rpi4b.img的镜像文件,将这个文件烧录到SD卡就可以了。
Linux:可以使用dd命令
windows:使用Win32 Disk Imager工具烧录即可。
到这里总算是跑通了一个完整的添加新单板的流程,只不过目前只适配了显示和触摸。接下来打算尝试HDF或者distributed部分。
树莓派4B + Debian10 单臂路由
入手树莓派后,你们一定和我一样,想要在树莓派上折腾各种各样的东西,其中一定有把宽带分配的公网 IP 利用起来的想法。
想把公网 IP 利用起来,最直接的方式是用树莓派当路由器使用,但是树莓派4B只有一个千兆网口,所以这就是这篇文章的主题“树莓派单臂路由”。
路由器的基本功能有:连接外网(拨号上网)、开启 DHCP 功能、提供 WIFI 热点,本文也是主要解决这三个问题。
树莓派4B + Debian10 x1
千兆交换机 x1
无线路由器 x1
在设置单臂路由前一定要开启 WIFI 热点,这是因为树莓派只有一个网络接口,在连接外网后只能用 WIFI 连接进入系统。
我分别试了 hostapd 和 network-manager 两种方式创建热点,相比起来 network-manager 配置更加简单且稳定,所以特别不推荐大家折腾 hostapd 的方式。
以下为 network-manager 安装和配置的步骤:
不知道是树莓派的 WIFI 模块有问题还是系统的原因,尝试了多种设置后,发现 WIFI 热点只能开启 5G 和 WPA 加密。
所以以上的配置,建议直接一路下一步不要折腾了,如果有人折腾弄清楚为什么了请一定要告诉我。
重启 network-manager 后,用可以用手机尝试连接,如果连接成功就接着下一步。
连接 WIFI 成功后,此时图标应该是感叹号的状态,这是因为没有分配 IP 给手机,所以接下来要开启 DHCP 功能:
重启 dnsmasq 服务后,在手机上断开 WIFI 并重新连接,此时应该能正常上网了。
开启 WIFI 后,可以用笔记本电脑或者手机共享网络,登入树莓系统。
如果没有笔记本电脑,可以用手机连接后,把网络共享给的你电脑,具体步骤如下:
现在我们用手机共享网络,登入了树莓派系统,把光猫连在旧路由器上的网线,直接插在树莓派的网口上。
我的宽带是 DHCP 的,所以不用任何设置就能直接连接外网。
可以用 ip addr 命令查看是否分配了外网的 IP 地址,如果没有请参考我另一篇文章: 树莓派4+Debian10 当路由器,无法拨号上网
如果你的宽带需要拨号上网,请参考其他资料,因为我没有这个条件尝试。
接下来,还需要添加一个虚拟网卡,设置一个固定 IP 给连接到树莓派的有线设备充当网关:
前边提到过,树莓派无法提供 2G WIFI 连接,所以这里可以用旧的路由器充当 2G 的接入点。
如果你的路由器支持有线桥接,那可以桥接到树莓派上;如果不支持桥接,可以连到树莓派后设置为二级路由,只是这样就没办法访问到树莓派和同在树莓派下的其他设备了。
因为不同的路由器配置可能不一样,请自行查阅其他资料,这里就不再叙述了。
这一步不是必须的,可以跳过。
最后,把树莓派、光猫、无线路由器和其他有线设备统统接到交换机上,就可以愉快的玩耍了。
用树莓派4b做的nas和群晖nas在性能和功能上有什么区别?
两者的定位就不一样。
树莓派是ARM架构,群晖也有使用ARM架构处理器的几款产品,最新出的树莓派4性能可能还胜过ARM架构的群晖产品。
但群晖还有x86架构的产品,那性能可不是树莓派能够比得了的,甩树莓派n条街。
树莓派4b算是配置比较高的一款开发板,但是由于io所限,只能通过usb接口来外接硬盘,而且以太网口的速度由于机能所限一般都跑不满。可以用来组nas,功耗低,适合轻度负载,可以做睡后下载工具。
群晖就是正经nas,基本上可以算是一台电脑,运算能力强,wan口能跑满,白群晖稳定但是贵,黑群晖考验动手能力(其实难度也不大),群晖系统完整度高,资瓷功能多,硬盘可以组阵列来提高性能和数据安全。
个人觉得,如果单纯就是用来挂机下载+轻度备份,可以去搞一个玩客云来玩玩,不到一百块再加个硬盘、硬盘盒,相当于永久迅雷会员。
树莓派简介:
树莓派基金会提供了基于ARM的Debian和Arch Linux的发行版供大众下载。还计划提供支持Python作为主要编程语言,支持Java、BBC BASIC (通过 RISC OS 映像或者Linux的"Brandy Basic"克隆)、C 和Perl等编程语言。